Compare commits

...

1032 Commits

Author SHA1 Message Date
Anas Nashif
035ab2bb72 release: bump version to Zephyr 1.14.2
Update version to 1.14.2

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-04-19 21:15:25 -04:00
Vincent Wan
4730a9b42f tests: net: trickle: use separate semaphore for second trickle timer
A second semaphore is used for the second trickle timer, so that if the
first timer expires twice before the second one, the test would still
wait before proceeding to check on cb_2_called.

Fixes #18598.

Backported to v1.14 in order to fix PR #24300
Fixes #24300

Signed-off-by: Vincent Wan <vincent.wan@linaro.org>
2020-04-17 14:57:09 -04:00
David Brown
0f852f0e31 release: Update security section for 1.14.2
Add information on security vulnerabilities fixed in this release.
These CVEs are under embargo, and vulnerabilities page will be updated
when the embargo ends.

Signed-off-by: David Brown <david.brown@linaro.org>
2020-04-14 08:38:53 -04:00
Anas Nashif
ba602bddf4 ci: fix version of breathe and sphinx
Do not install latest version of breathe and sphinx, use the versions
supported by Zephyr.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-04-13 18:09:07 -04:00
Anas Nashif
2f00bd77fd release: v1.14.2 release notes
Release notes for 1.14.2 with a list of all fixed bugs.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-04-13 18:09:07 -04:00
Flavio Ceolin
8c49afac8d drivers: gpio: fix syscall handlers
No driver object checks were being performed for 3 APIs.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2020-03-25 10:16:08 -04:00
Flavio Ceolin
f032de6cc8 sys: usermode: Document 0 size buffer memory check
Documenting that 0 size buffer has undefined behavior.
See: https://github.com/zephyrproject-rtos/zephyr/pull/23239

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2020-03-24 19:22:48 -04:00
Flavio Ceolin
91d2d7d22c syscalls: arm: Fix possible overflow in is_in_region function
This function is widely used by functions that validate memory
buffers. Macros used to check permissions, like Z_SYSCALL_MEMORY_READ
and Z_SYSCALL_MEMORY_WRITE, use these functions to check that a
pointers passed by user threads in a syscall.

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2020-03-24 19:22:48 -04:00
Flavio Ceolin
13fd2d343b shell: utils: Fix buffer overrun in shell_spaces_trim
The third argument in memmove can possible be greater than remaining
buffer size. Just ensuring that memmove will changes bytes only inside
the string buffer and nothing else.

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2020-03-24 19:22:10 -04:00
Ioannis Glaropoulos
6da1361c71 arch: arm: userspace: fix syscall ID validation
We need an unsigned comparison when evaluating whether
the supplied syscall ID is lower than the syscall ID limit.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2020-03-24 19:21:23 -04:00
Ioannis Glaropoulos
83bd7d3f3e arch: arm: mpu: protect RNR when reading RBAR, RASR in ARMv7-M driver
We lock IRQs around writing to RNR and immediate reading of RBAR
RASR in ARMv7-M MPU driver. We do this for the functions invoked
directly or undirectly by arch_buffer_validate(). This locking
guarantees that
- arch_buffer_validate() calls by ISRs may safely preempt each
  other
- arch_buffer_validate() calls by threads may safely preempt
  each other (i.e via context switch -out and -in again).

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2020-03-18 12:24:47 -04:00
Jukka Rissanen
1058a659a3 tests: net: af_packet: Add test for binding with multiple interfaces
Add a simple test to verify that the bind() can be called multiple
times if AF_PACKET is set and there are multiple network interfaces
in the system.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2020-03-18 12:24:26 -04:00
Jukka Rissanen
06cd001d8c net: context: Allow binding AF_PACKET multiple times
If the system has more than one network interface, then it should
be possible to bind a AF_PACKET socket to each interface if the
network interface index is set when bind() is called. This was
not possible earlier as the code was always using default network
interface with AF_PACKET socket bind().

Fixes #23153

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2020-03-18 12:24:26 -04:00
Jamie McCrae
2bc8b7ff11 boards: arm: bl65x_dvk: fix reset not working
Switch from using pin reset to normal reset.

Signed-off-by: Jamie McCrae <jamie.mccrae@lairdconnect.com>
2020-03-18 12:24:00 -04:00
Wayne Ren
de09c936e9 arch: arc: fix the bug of blt in syscall
blt is signed comparsion, if r6 is a negative number created by
malicious code, it will pass the check, bring a secure risk.

use blo (unsinged comparison) to do the check.

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
Signed-off-by: David Brown <david.brown@linaro.org>
2020-03-18 12:23:41 -04:00
Johann Fischer
dae2e71c58 usb: mass_storage: check LBA range
Check if LBA is in range of the memory size.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
Signed-off-by: David Brown <david.brown@linaro.org>
2020-03-18 12:23:23 -04:00
Johann Fischer
afb307d3ff usb: dfu: check requested length (wLength) during DFU_UPLOAD
During DFU_UPLOAD, the host could requests more data
as stated in wTransferSize. Limit upload length to the
size of the request buffer (USB_REQUEST_BUFFER_SIZE).

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
Signed-off-by: David Brown <david.brown@linaro.org>
2020-03-18 12:23:09 -04:00
Anas Nashif
c59db75aef ci: ci-tools: do not mark docs/license as pending
Do not mark Doc/License checks as pending.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-03-18 12:22:05 -04:00
Anas Nashif
d0ad951774 CODEOWNER: update for .github/
Update with workflow owners under .github/

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-03-18 12:22:05 -04:00
Anas Nashif
74cc1c33e1 ci: use GH actions on 1.14 branch
Move doc/license checks to use actions on 1.14 branch.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-03-18 12:22:05 -04:00
Piotr Zięcik
24bdb9cc79 tests: test_sched_timeslice_reset: Fix slice time measurement
The time measurement based on k_uptime_delta() might be not accurate
for some values of CONFIG_SYS_CLOCK_TICKS_PER_SEC. This commit
introduces measurement based on k_cycle_get_32(), which is more
precise.

Signed-off-by: Piotr Zięcik <piotr.ziecik@nordicsemi.no>
2020-03-17 20:41:48 -04:00
Ioannis Glaropoulos
94aaf7d3eb tests: several tweaks for passing tests on qemu
This commit includes tweaks in several tests, so
that the tests can be passing on ARM QEMU targets,
mps2_an385 and mps2_an521 with Qemu 4.x release.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2020-03-17 20:41:48 -04:00
Anas Nashif
ee91881a82 ci: fix west pytests
Fix failing CI on west pytests:

++ west list '--format={abspath}' west
FATAL ERROR: Unknown project name/path west (available projects:
tinycbor, ci-tools, net-tools, zephyr)
+ WEST_SRC=/src

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-03-17 20:41:48 -04:00
Anas Nashif
b020b70eb3 ci: use docker image with 0.10.3 SDK
Use a docker image with 0.10.3 SDK which adds support to x86_64
toolchain.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-03-17 20:41:48 -04:00
Anas Nashif
d708d69f54 toolchain: disable newlib for x86_64
With new SDK, newlib is supported for x86_64, however in 1.14 this was
not available for x86_64, disable newlib here to satisfy filters and
keep things as they are now in 1.14.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-03-17 20:41:48 -04:00
Daniel Leung
726047f041 cmake: use sdk-ng built toolchain for x86_64
This adds the necessary bits to utilize the x86_64 toolchain
built by sdk-ng for x86_64 when toolchain variant is either
zephyr or xtools. This allows decoupling the builds from
the host toolchain.

Newlib is also available with this toolchain so remove
the Kconfig restriction on CONFIG_NEWLIB_LIBC.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-03-17 20:41:48 -04:00
Ioannis Glaropoulos
488c703f5c drivers: sam: entropy: implement get_entropy_isr
The commit contributes the implementation of
get_entropy_isr API function for the SAM entropy
driver. The implementation is similar to get_entropy,
with the difference that it does not invoke k_yield()
when called with the ENTROPY_BUSYWAIT options flag set.
When the function is invoked without the ENTROPY_BUSYWAIT
flag, it simply returns whatever data is available,
without busy waiting on the RNG herdware.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2020-03-15 11:04:17 -04:00
Andrew Boie
ff68292619 drivers: serial: add async API system calls
These were unintentionally omitted. We don't expose callback
registration or callback response APIs for security reasons.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2020-01-28 21:01:23 -05:00
Andrew Boie
d636161ccd mempool: use k_malloc heap for ISR allocations
Fixes an issue where calling z_thread_malloc() would
borrow the resource pool of whatever thread happened
to be interrupted at the time.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2020-01-28 21:00:58 -05:00
Andrew Boie
a059f7b1d9 userspace: fix incorrect linker routing
The _thread_idx_map bitfield which has '1' set for free
thread indexes really needs to live in the
data section reserved for kernel object metadata, as this
is a part of memory that is allowed to shift addresses
between zephyr_prebuilt.elf and zephyr.elf.

However, if an application defines enough static threads
that there are no free indexes, the entire bitfield will
be zeroed and the bitfield will end up in the main BSS
section.

Force this data to always be in the .kobject_data.data
section regardless of its contents.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2020-01-28 13:19:57 -05:00
Maksim Masalski
b2a528ce2b drivers: spi: Support PM busy state where relevant in DW
Need to set device busy when enter into transceive function
in SPI DW driver.
In current SPI DW driver the transceive function don't set busy state,
but that is important for PM busy state.
This will lead to unexpected behaviors when system calls this
function and enter into idle state.

Signed-off-by: Maksim Masalski <maksim.masalski@intel.com>
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-01-28 13:19:00 -05:00
Johann Fischer
238aa41368 drivers: usb_dc_stm32: do not restrict out stage transfers to one MPS
Do not restrict control out stage transfers to one MPS.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2020-01-08 08:21:40 -05:00
Jacob Siverskog
3132a41600 Bluetooth: GATT: Remove all subscriptions for connection when unpairing
Make sure all subscriptions are removed when a connection is unpaired.

Fixes #21131

Signed-off-by: Jacob Siverskog <jacob@teenage.engineering>
2020-01-07 22:40:19 -05:00
Wentong Wu
8228788145 power: add DEVICE_PM_LOW_POWER_STATE for device power management
When system going to sleep state, make peripherals go to state
DEVICE_PM_LOW_POWER_STATE which needs less time than state
DEVICE_PM_SUSPEND_STATE to save more power.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2020-01-07 22:39:36 -05:00
Wentong Wu
0dd37dd84e power: active all devices if not all devices enter suspend state
Active all devices if not all devices enter suspend state when system
decide going to suspend state.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2020-01-07 22:39:36 -05:00
Wentong Wu
ca8d60694c power: correct log level for power management
Current PM policy allow devices make the decision if going to
sleep/deep sleep state, so it's not error message if some
devices don't enter suspend state, change it to debug level.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2020-01-07 22:39:36 -05:00
Wentong Wu
e3617b1310 Style: remove extern on the function declarations in the header
Remove extern on the function declarations in the header file to
keep consistent with others.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2020-01-07 22:39:36 -05:00
Andrew Boie
c74ccf990f drivers: watchdog: add system calls
wdt_install_timeout() was skipped as it installs an ISR-context
callback handler function. The rest are simple wrappers.

Added myself as the maintainer of the syscall handlers. WDT
subsystem appears to not currently have an owner.

Fixes: #21432

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2020-01-07 22:38:20 -05:00
Kumar Gala
2073058140 doc: add .known-issue regex for struct bt_mesh_model_pub warnings
Filter out warnings generated by newer sphinx versions by
'struct bt_mesh_model_pub' having bitfields for
doc/reference/bluetooth/mesh/access.rst

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2020-01-04 11:12:04 -05:00
Kumar Gala
47ae9e801e doc: Update warning regex to handler newer sphinx output
Older versions of sphinx produced something like:

file_system/index.rst:58: WARNING: Duplicate declaration.

Newer versions produce:

file_system/index.rst:58: WARNING: Duplicate declaration, fs_statvfs

Change the regex to handle both conditions.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2020-01-04 11:12:04 -05:00
Wayne Ren
33638bc876 arch: arc: fix the bug in prologue of sys call handling
* the old codes may not save the caller saved regs correctly,
  e.g. r7- r12. Because the sys call entry is called in the form
  of static inline function. The compiler optimizations may not save
  all the caller saved regs.

* new codes use the irq stack frame as the sys call frame and gurantee
  all the called saved regs are pushed and popped correctly.

* the side effect of new codes are more stack operations and a little
  overhead.

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-12-13 16:38:32 -05:00
Krzysztof Chruscinski
84298d2236 shell: Move signals initialization from thread to init
By moving signals initialization to shell instance init function,
shell instance is ready to receive RX signals from backend before
thread is ready to handle them.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-12-05 15:00:50 -05:00
Jukka Rissanen
1dd3422576 net: gptp: Do not update clock if time diff is < 0
The time difference calculation did not check if the result
value would be < 0 which means really large value when converted
to unsigned.

Fixes #20100

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-12-05 15:00:26 -05:00
Vinayak Kariappa Chettimada
4a1ebe5590 Bluetooth: controller: Fix conn update to be cacheable
Fix connection update procedure to be cacheable if any other
local or remote control procedure is in progress.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-12-03 15:54:30 -05:00
Maximus Liu
048874982b Bluetooth: Mesh: Fixes seg_tx_reset adv buf unref
In seg_tx_reset() in transport.c, set the busy flag to 0U
before doing adv buf unref, which will avoid sending
unnecessary adv packets in case the adv buf is already put
in the mesh adv_queue.

Fixes #20970

Signed-off-by: Maximus Liu <maximus.liu@gmail.com>
2019-12-03 15:53:55 -05:00
Lingao Meng
7b60ff6d1b Bluetooth: Mesh: Fixes Config client send publish message
When Config client model send publish message, app_idx will
be need, however, currently code clear this value use `&`,
this will be generate error when app_idx not zero.

Signed-off-by: Lingao Meng <mengabc1086@gmail.com>
2019-12-03 15:53:55 -05:00
Piotr Zierhoffer
bd2cb354fa net: ip: ipv6_nbr: Fix uninitialized variable in ipv6_nbr
Setting it to UINT32_MAX, as it is subsequently overwritten with
MIN(oldest, something_else).

Signed-off-by: Piotr Zierhoffer <pzierhoffer@antmicro.com>
2019-12-03 15:53:16 -05:00
Maksim Masalski
28e80ace3d tests: disable watchdog for sam_e70 in test kernel/critical
Wrong configuration of a watchdog for sam_e70_xplained_board caused
endless reboot loop. It seems that problem caused by a watchdog.
I created a new config for the sam_e70_xplained hardware board
like in master branch.

Signed-off-by: Maksim Masalski <maksim.masalski@intel.com>
2019-12-03 15:53:00 -05:00
Maksim Masalski
ba1c1e3e2e tests: disable watchdog for sam_e70 in test kernel/critical
Wrong configuration of a watchdog for sam_e70_xplained_board caused
endless reboot loop. It seems that problem caused by a watchdog.
I created a new config for the sam_e70_xplained hardware board
like in master branch.

Signed-off-by: Maksim Masalski <maksim.masalski@intel.com>
2019-12-03 15:53:00 -05:00
Wentong Wu
6e34b590fe spi: fix spell typo in spi handler
fix spell typo in spi handler.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-12-03 15:52:40 -05:00
Wentong Wu
3d28c18a39 spi: pass correct buffer to spi driver given NULL to spi_transceive
When pass NULL to spi_transceive with user space enabled, stack buffer
is still passed to spi driver and it will cause kinds of problems like
MPU fault, so change it to pass relevant NULL pointers in the actual
transceive call.

Fixes: #20811.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-12-03 15:52:40 -05:00
peng1 chen
77c455caa5 API documentation: don't generate internal "z_impl_XX" APIS.
Internal APIs "z_impl_XX" should not be included into the API
documentaion when running doxgen commands, so we use the
EXCLUDE_SYMBOLS to exclude those apis.

Signed-off-by: peng1 chen <peng1.chen@intel.com>
2019-11-14 09:22:11 -05:00
Vinayak Kariappa Chettimada
fbc0a44987 Bluetooth: controller: Fix ticker previous slot value
Fix ticker previous slot value with elapsed ticks value from
the time stopped ticker has expired. When a ticker is
stopped, if it was in its reserved time space, then the
currently occupied slot (was set to 0) should be the amount
of time that has elapsed in the expired and stopped ticker's
reserved time space and beyond until the stop.
This is required to ensure that any other new ticker does
not get scheduled over the stopped ticker's reserved time
space.

Fixes #19515.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-11-06 23:08:02 -05:00
Johan Hedberg
4e58f176b5 Bluetooth: Mesh: Fix Clear Procedure start timestamp initialization
The start timestamp was supposed to signify the starting point of the
clear procedure. The code was incorrectly initializing it to the *end*
point of the procedure.

Fixes #19263

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-11-06 23:07:46 -05:00
Joakim Andersson
0c1d8d8a05 Bluetooth: GATT: Fix gatt buffer leak for write commands and notify
Fix GATT buffer leak when bt_att_send returns error the allocated
buffer is never freed. Discovered case where the link was disconnected
during the function call, so when GATT checkd the link was still
connected, but ATT checkd the link was disconnected.

Fixes: #19889

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-11-06 23:07:34 -05:00
Mariusz Skamra
500ddaf85c Bluetooth: tester: Adapt to BTP Get Attribute Value API change
Adapt the gatt_get_attribute_value_cmd to recent changes in API.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-11-06 23:07:20 -05:00
François Delawarde
ce1b902eeb bluetooth: host: fix missing bt_conn_unref
Fix missing bt_conn_unref when using the ccc match callback.

Fixes: #20299

Signed-off-by: François Delawarde <fnde@oticon.com>
2019-11-06 23:07:06 -05:00
Maureen Helm
45d5a1337d tests: pwm_api: Use smaller pwm period cycles on k64-based boards
The mcux pwm drivers use period cycles as a divisor to calculate the pwm
frequency in hertz. This operation can underflow easily with large
values of period cycles relative to the pwm clock source, causing the
driver to return an error code and the pwm_api test to fail.

Updates the test to use the smaller set of period and pulse cycles on
k64-based boards, fixing the test for frdm_k64f and hexiwear_k64 boards.

The test is not changed for i.mx rt boards because the pwm clock source
on these boards is much faster than on k64 boards, and thus the same pwm
frequency operation does not underflow.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-11-06 23:06:47 -05:00
Jukka Rissanen
55fe6eaa04 net: telnet: User could telnet to zephyr only once
User could telnet to zephyr only once and the second connection
was denied. The reason was that the telnet socket was not properly
marked as accepting a new connection.

Fixes #20042

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:06:26 -05:00
Jukka Rissanen
a95a2aab73 net: tcp: No need to unref pkt if it was not sent
In order to avoid net_pkt ref count going to <0, do not unref
the packet if it was not sent in the first place. This can happen
if the connection was closed while we are waiting packets to be sent.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:06:26 -05:00
Jukka Rissanen
c18e888a86 net: tcp: Allow state transition when socket is closed
Do not print warning if transitioning from LISTEN -> CLOSED which
happens when the socket is closed.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:06:26 -05:00
Jukka Rissanen
7183de9c15 net: tcp: Allow initial state to be set by net_tcp_change_state()
The initial state from CLOSED -> ESTABLISHED caused error
to be printed by state validator. This is unnecessary, so add
this as a valid state to validator.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:06:26 -05:00
Jukka Rissanen
8a0acea67e net: tcp: Handle special case where accepted socket is closed
Handle this corner case with TCP connection closing:

1) Client A connects, it is accepted and can send data to us
2) Client B connects, the application needs to call accept()
   before we will receive any data from client A to the application.
   The app has not yet called accept() at this point (for
   whatever reason).
3) Client B then disconnects and we receive FIN. The connection
   cleanup is a bit tricky as the client is in half-connected state
   meaning that the connection is in established state but the
   accept_q in socket queue contains still data which needs to be
   cleared.
4) Client A then disconnects, all data is sent etc

The above was not working correctly as the system did not handle the
step 3) properly. The client B was accepted in the application even
if the connection was closing.

After this commit, the commit called "net: tcp: Accept connections
only in LISTENING state" and related other commits are no longer
needed and are reverted.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:06:26 -05:00
Jukka Rissanen
20682b0935 net: tcp: Add Kconfig option for auto-accepting clients
Add CONFIG_NET_TCP_AUTO_ACCEPT option which can be used to
automatically accept incoming data connection even if the
application has not yet called accept(). This can speed up
data transfer from peer to the application.
Problem with this is that if the peer sends lot of data and
we have limited amount of net_buf's available, then we can
run out of them which is very bad situation and can lead to
deadlocks. Because of this, the setting is turned off by default.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:06:26 -05:00
Jukka Rissanen
86baaf4cee Revert "net: tcp: Accept connections only in LISTENING state"
This reverts commit 17ddcc03a1.

The upstream commit d88f25bd76 ("net: tcp: Handle special case
where accepted socket is closed") will fix a TCP connection creation
creation properly so this workaround can be reverted.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:06:26 -05:00
Jukka Rissanen
bef3aa455f tests: net: socket: Test that non-blocking accept() works
Mark socket non-blocking and make sure that accept() will return
immediately.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:06:26 -05:00
Jukka Rissanen
7265c3ea52 net: socket: Support non-blocking accept()
If socket is marked non-blocking, then accept() will return immediately
if there is no one connecting.

Fixes #19103

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:06:26 -05:00
Jukka Rissanen
db9d66a6bf net: tcp: When closing the connection send FIN without extra delays
The earlier code was always queuing the FIN that is sent when
connection is closed. This caused long delay (200 ms) before the peer at
the other end noticed that the connection was actually closed.
Now check if there is nothing in the queue, then send the FIN
immediately. If there is some data in the queue, flush it when a valid
ack has been received.

Fixes #19678

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:06:26 -05:00
Andrzej Głąbek
84c988d960 drivers: gpio_nrfx: Correct the way the callbacks are fired
Add additional masking of the pins with fired callback triggers
against the currently enabled callbacks, in order to not call
handlers for callbacks that got disabled in some other callback
handlers that were called in the same ISR execution.

Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
2019-11-06 23:06:08 -05:00
Yannis Damigos
405cb1b078 i2c_ll_stm32_v2: Send STOP manually after NACK
In master trasmitter mode AutoEndMode is
always disabled, so we need to send STOP
manually if NACK is received.

Fixes #19059

Signed-off-by: Yannis Damigos <giannis.damigos@gmail.com>
2019-11-06 23:05:46 -05:00
Peter Bigot
6d16b065d9 boards/efr32mg_sltb004a: use crystal instead of RC oscillator
Selection of the HFRCO causes the SOC to stay at its power-up frequency
of 19 MHz.  Switch to the HFXO to use the configured frequency.

Closes #17630

Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
2019-11-06 23:05:29 -05:00
Jukka Rissanen
805ef7e8a9 samples: net: zperf: Clarify that only iPerf 2.0.5 is supported
As the iPerf2 protocol is not documented properly, depend on
exact iPerf 2.0.5 version when testing.

Fixes #20313

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:05:07 -05:00
Mieszko Mierunski
a2e7b0ddf4 drivers: uart: Properly configure pins in NRF UARTE power management
Configure pins before enabling and after disabling UARTE through
power management functions.

Signed-off-by: Mieszko Mierunski <mieszko.mierunski@nordicsemi.no>
2019-11-06 23:04:50 -05:00
Vinayak Kariappa Chettimada
3f8c2fd39c Bluetooth: controller: Fix DLE for remote unsupported Coded PHY
Fix Data Length Procedure to use Feature Exchange values to
send correct parameters based on whether Coded PHY is
supported by remote peer.

Relates to BT TS.5.1.1 tests:
LL/CON/MAS/BV-129-C
LL/CON/MAS/BV-130-C
LL/CON/SLA/BV-132-C
LL/CON/SLA/BV-133-C

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-11-06 23:04:25 -05:00
Jukka Rissanen
097e836223 net: shell: ping: Figure out the output network interface
Try to figure out where the ping reply should be sent if there
are multiple network interfaces in the system.

Fixes #19612

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-11-06 23:04:04 -05:00
Wentong Wu
8ae5adae08 logging: wake up log process thread only when log message happen
Periodically wake up log process thread consume more power if system
already in sleep or deep sleep state. With the help of added logging
timer and semaphore, log process thread is woken up only when there
is logging message.

Fixes: #19982.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-10-29 09:22:59 +01:00
Anas Nashif
9591025942 release: Zephyr 1.14.1
Bump release to 1.14.1.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-10-06 12:28:06 -04:00
Charles E. Youse
cbb74d4e2f drivers/interrupt_controller/system_apic.c: remove dependence on IOAPIC
system_apic.c assumed that both a local APIC and I/O APIC are in use.
This caused compilation failures when the local APIC is enabled but no
I/O APIC is present (or configured). Fix preprocessor macros to allow
this configuration.

Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-10-02 22:20:15 -04:00
Carles Cufi
718e4592aa doc: bluetooth: Add 1.14 qualification listings
Add the 3 new listings obtained in the 1.14.x LTS release.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-10-01 13:38:16 -04:00
Anas Nashif
0feccf788c release: 1.14.1: add list of fixed bugs
Add list of all bugs addressed in this release.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-10-01 09:55:51 -04:00
Carles Cufi
d38d06e977 doc: releases: Fix QDIDs for 1.14.x
The QDIDs were wrong since they were taken from the URL. Use the proper
QDIDs themselves.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-10-01 08:02:46 -04:00
Carles Cufi
ac7fee87ee doc: relnotes: Add QDID for Controller
Now that the Controller has its own QDID, add it to the release notes.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-10-01 08:02:46 -04:00
Carles Cufi
6bacdd47e6 doc: relnotes: 1.14.1 release notes
Remove unused sections, bugfix list will come later. Also mention the
Bluetooth qualification listings with the Controller still TBD.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-09-29 22:21:18 -04:00
Anas Nashif
ea2439e70c release: bump version to 1.14.1-rc3
New release candidate.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-09-26 08:24:14 -04:00
Jukka Rissanen
d7ba097fd9 net: socket: Return 0 in recvfrom() if buffer size is 0
If user has buffer with size 0, then return 0.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-09-25 12:54:32 -04:00
Jan Van Winkel
3159e9fff2 fs: fcb: Increase temporary buffer in fcb_append
Increase temporary buffer size to 8 bytes in fcb_append to prevent
stack overflow in case flash alignment is bigger then 2 bytes.

Signed-off-by: Jan Van Winkel <jan.van_winkel@dxplore.eu>
Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-09-25 12:54:09 -04:00
Vinayak Kariappa Chettimada
24f823234b Bluetooth: controller: Fix data PDU leak during ctrl PDU defer
Fix a bug where in tx data PDU enqueued, while a ctrl PDU is
deferred due to Encryption setup being in progress, is
leaked causing HCI Tx Buffer Overflow crash.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-09-25 12:53:38 -04:00
Vinayak Kariappa Chettimada
14e8f84e2a Bluetooth: controller: Fix start encryption in progress check
Fix check in start encryption to disallow new encryption
setup while there is one already in progress.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-09-25 12:53:38 -04:00
Vinayak Kariappa Chettimada
cec657b2df Bluetooth: controller: Fix Re-encryption procedure
Fix MIC failure on re-encryption procedure when responding
at the same time to peer initiated feature request.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-09-25 12:53:38 -04:00
Vinayak Kariappa Chettimada
1f238a13dc Bluetooth: controller: Fix ENC_REQ PDU retransmission
Fix dropped ENC_REQ PDU when retransmitting, if slave was
not listening or nack-ed it.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-09-25 12:53:38 -04:00
Vinayak Kariappa Chettimada
bbdf13de87 Bluetooth: controller: Fix control tx queue handling
Fix control tx queue handling to correctly pause control PDU
responses during encryption setup.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-09-25 12:53:38 -04:00
Vinayak Kariappa Chettimada
f3e91773a0 Bluetooth: controller: Defer encryption setup if in conn update
Workaround, defer peer initiated encryption while local
initiated procedure with instant is not complete. Peer
master has sent CONN_UPDATE_IND in response to
CONN_PARAM_REQ, and also has initiated a Encryption Setup
thereafter. In this case, avoid corruption of the connection
update context by deferring the Encryption Setup.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-09-25 12:53:38 -04:00
Vinayak Kariappa Chettimada
0fbaf2c6fa Bluetooth: controller: Add data length procedure queueing
Added implementation to cache Data Length Procedure when
another control procedure is in progress.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-09-25 12:53:38 -04:00
Vinayak Kariappa Chettimada
fa619bd6ba Bluetooth: controller: Fix cmd disallowed and collision disconnects
Fix implementation to correctly cache the control procedures
initiatable by local and peer. And, fix feature exchange and
version information procedures from being disallowed by
having then as cached requests to the controller.

Relates to #15256.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-09-25 12:53:38 -04:00
Andrzej Puzdrowski
3ad9394afd nvs: Fix deletion of the last entry added
Make sure that the last entry added is deleted correctly by storing the
fact that one was found in a local variable.

Fix by Laczen JMS <laczenjms@gmail.com>

Fixes #18813.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-09-25 12:53:21 -04:00
Wentong Wu
700f41f667 scripts: elf_helper.py: fix stack declared K_THREAD_STACK_EXTERN
If a stack is declared with K_THREAD_STACK_EXTERN first, analyze array
in elf_helper.py will ignore this declaration which will be referenced
by the actual instances via the tag DW_AT_specification, so that this
stack can't be detected by the kernel object detection mechanism, and
this will cause userspace not work.

Fixes: #16760.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-09-25 12:52:59 -04:00
Wentong Wu
d295a4f2e0 scripts: elf_helper.py: add analyze for DW_TAG_typedef
add analyze for DW_TAG_typedef in order to catch all the
kernel objects.

Fixes: #16760.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-09-25 12:52:59 -04:00
Jukka Rissanen
d72212adb3 net: socket: Set default protocol if proto == 0
If proto field in socket() call is set to 0, then we should have
a sane default for it that depends on the type of the socket.

Fixes #18873

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-09-25 12:52:36 -04:00
Jukka Rissanen
16766c2051 net: Add IPPROTO_RAW as it was missing
The IPPROTO_RAW is used as a default for SOCK_RAW when protocol
is not set in socket() call.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-09-25 12:52:36 -04:00
Ravi kumar Veeramally
475a2a9bf8 samples: net: coap_client: Fix coverity issue
Ignore socket close() return value in this sample.

Fixes #18961

Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2019-09-25 12:52:19 -04:00
Johan Hedberg
af443132e8 Bluetooth: Mesh: Fix matching for "All Proxies" group address
The bt_mesh_fixed_group_match() function is intended to match the
various well-known group addresses, however it was never updated when
Proxy support was added.

Fixes #19015

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-09-25 12:51:46 -04:00
Ravi kumar Veeramally
17ddcc03a1 net: tcp: Accept connections only in LISTENING state
Issue noticed with following scenario.

 1) TCP server is listening for connections but will handle
    only one connection at a time (e.g. echo-server sample)
 2) Client A connects, and the connection is accepted.
 3) Client B connects, instead of denying a connection,
    it is "auto" accepted (this is the actual bug) even
    if the application has not called accept().
 4) After the connection A is closed, the connection B
    gets accepted by application but now the closed
    connection A will cause confusion in the net-stack
 5) This confusion can cause memory leak or double free
    in the TCP core.

It is not easy to trigger this issue because it depends
on timing of the connections A & B.

Fixes: #18308

Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2019-09-25 12:51:20 -04:00
Peter Bigot
261c0d5c96 kernel: reimplement k_uptime_get_32()
The current implementation does not return the low 32 bits of
k_uptime_get() as suggested by it's documentation; it returns the number
of milliseconds represented by the low 32-bits of the underlying system
clock.  The truncation before translation results in discontinuities at
every point where the system clock increments bit 33.

Reimplement it using the full-precision value, and update the
documentation to note that this variant has little value for
long-running applications.

Closes #18739.

Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
2019-09-25 12:51:01 -04:00
Jukka Rissanen
1221125664 tests: net: tcp: Test connection cleanup after receiving SYN
Make sure the net_context is properly removed if done after
receiving SYN.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-09-25 12:50:02 -04:00
Jukka Rissanen
810e590cb5 net: tcp: Cleanup context if connection is not established
If we are closing connection before the connection was established,
then unref the context so that the cleanup is done properly.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-09-25 12:50:02 -04:00
Peter Bigot
3d18496538 tests: add C++ 17 standard library test
Confirms build (and run) of C++17 applications that make use of STL
containers and other features.

Backport: aded6a5334
Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
2019-09-25 12:49:18 -04:00
Peter Bigot
79e1aea7f0 lib/newlib: revert treatment of libc files as system includes
The solution from #14312 of using -isystem to prioritize the position of
the libc directory bypasses the effect of -ffreestanding with respect to
libc symbols expected to be present in a non-hosted environment.

Further, it breaks C++ with the ARM Embedded toolchain as the system
fails to find the right file with #include_next.

Use a more fine-grained solution that explicitly includes the underlying
newlib header required for <inttypes.h> support before moving on to
include the next available one, whether system or non-system.

Closes #17564

Backport: 96c1b05125
Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
2019-09-25 12:49:18 -04:00
Peter Bigot
936588eecc subsys/testsuite: rearrange for standard use of extern "C"
Consistently place C++ use of extern "C" after all include directives,
within the negative branch of _ASMLANGUAGE if used.

Background from issue #17997:

Declarations that use C linkage should be placed within extern "C"
so the language linkage is correct when the header is included by
a C++ compiler.

Similarly #include directives should be outside the extern "C" to
ensure the language-specific default linkage is applied to any
declarations provided by the included header.

Backport: c0d33975d1
See: https://en.cppreference.com/w/cpp/language/language_linkage
Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
2019-09-25 12:49:18 -04:00
Wentong Wu
0d028847fd scripts: gen_relocate_app.py: add custom align size for relocation
add custom align size for code relocation to reduce alignment memory
wasting.

Fixes: #17337.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-09-25 12:48:17 -04:00
Wentong Wu
b813c894e3 linker: add custom align size to reduce alignment memory wasting
when enable CONFIG_CUSTOM_SECTION_ALIGN, it need less alignment
memory for image rom region. But that needs carefully configure
MPU region and sub-regions(ARMv7-M) to cover this feature.

Fixes: #17337.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-09-25 12:48:17 -04:00
Faisal Saleem
362131533c Settings: Improve error handling of settings load
if base64_decode function returns error, function can't continue
otherwise a fatal error will cause the thread to spin, putting the
system into an unrecoverable state

Signed-off-by: Faisal Saleem <faisal.saleem@setec.com.au>
2019-09-25 12:47:52 -04:00
Jukka Rissanen
68f5b4077d net: socket: Init net_context when taken into use
If we are getting an old net_context, clear the content of it
in order to make sure we do not have old data in it.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-09-25 12:47:28 -04:00
Jukka Rissanen
499614667f net: sockets: Store socket private data into its own variable
Do not try to re-use net_context.user_data field as in many places
(like in accept) it is expected to contain pointer to net_context.
Storing the socket flags will corrupt the value. To simplify and
make things less error prone, use socket specific field in net_context
to store the socket flags.

Fixes #19191

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-09-25 12:47:28 -04:00
Jukka Rissanen
d9434250cc net: socket: The socket flags need to use uintptr_t
The socket flags are stored in void* so we need to use uintptr_t
instead of u32_t when manipulating the flag variable.

Fixes #19181

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-09-25 12:47:28 -04:00
Erwin Rol
95674c0040 spinlock: Make sure C and C++ have the same sizeof(k_spinlock) value
If CONFIG_SMP and SPIN_VALIDATE are both not defined the k_spinlock
struct will have no members. The result is that in C the sizeof
value of struct k_spinlock is 0 and in C++ it is 1.

This size difference causes problems when the k_spinlock
is embedded into another struct like k_msgq, because C and
C++ will have different ideas on the offsets of the members
that come after the k_spinlock member.

To prevent this we add a 1 byte dummy member to k_spinlock
when the user selects C++ support and k_spinlock would
otherwise be empty.

Signed-off-by: Erwin Rol <erwin@erwinrol.com>
2019-09-25 12:47:03 -04:00
Peter A. Bigot
af0d895f34 drivers/spi_nor: de-pessimize reads
SPI NOR devices require that writes be performed within only one page at
a time.  There is no such limitation on reads.  Remove the code that
forced reads to be performed in 256-byte chunks.

Backport: 2.0 d60d16d4cd

Signed-off-by: Peter A. Bigot <pab@pabigot.com>
2019-09-25 12:46:43 -04:00
Peter A. Bigot
a2fa459f99 drivers/spi_nor: fix writes across page boundaries
The previous code limited the length of a write to the size of a page,
but did not check whether the starting position was far enough into the
page that the write would still cross a page boundary.

NOTE: SPI NOR page size is fixed as 256 regardless of what Kconfig says.

Backport: 2.0 660149b500
Backport: 2.0 86dcf3c173

Signed-off-by: Peter A. Bigot <pab@pabigot.com>
2019-09-25 12:46:43 -04:00
Vinayak Kariappa Chettimada
26665eb1c8 Bluetooth: controller: Fix to reject invalid enable command
Fix to reject invalid advertise and scan enable commands.

Fixes BT HCI.TS.5.1.1 tests:
HCI/DDI/BI-06-C
HCI/DDI/BI-07-C

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-09-25 12:46:15 -04:00
Vinayak Kariappa Chettimada
f8c58efea5 Bluetooth: controller: Fix DLE event on PHY update
Fix HCI Data Length Update event generation on PHY update
procedure, i.e. preserve Data Length Parameters on PHY
update.

Fixes BT LL.TS.5.1.1 tests:
LL/CON/MAS/BV-126-C
LL/CON/MAS/BV-127-C
LL/CON/SLA/BV-129-C
LL/CON/SLA/BV-130-C

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-09-25 12:45:55 -04:00
Lucas Peixoto
e98cb34ce7 disk: fixing the sending of commands with r1 response
The sdhc_cmd_r1_raw() function doesn't take into account the existence
of commands with data response. Because of this, some datas were being
lost.

The commands that return a r1 response and a data are: SDHC_SEND_CSD,
SDHC_SEND_CID, SDHC_READ_SINGLE_BLOCK, SDHC_READ_MULTIPLE_BLOCK,
SDHC_WRITE_BLOCK, SDHC_WRITE_MULTIPLE_BLOCK.

In order to solve this, was juts necessary skip the byte discard when
the command is one of these.

This problem was affecting, for example, the sdhc initialization. The
token returned from SDHC_SEND_CSD was being lost and the initialization
was broken.

Fixes #15444.

Signed-off-by: Lucas Peixoto <lucaspeixotoac@gmail.com>
Signed-off-by: Peter A. Bigot <pab@pabigot.com>
2019-09-25 12:44:59 -04:00
Anas Nashif
8a5e66b6f3 doc: link-roles: convert bytes to string
Get the correct branch name as a string instead of bytes.

Fixes #19165

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-09-19 00:19:17 -04:00
Johan Hedberg
da3371db03 doc: Add skeleton for 1.14.1 release notes
Add a basic skeleton for the 1.14.1 release notes. Currently only
concrete items are for Bluetooth qualification.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-09-13 10:07:47 +02:00
Piotr Zięcik
4019d67af4 CODEOWNERS: Add code owner for subsys/testsuite
This commit adds @nashif as code owner for subsys/testsuite.

Signed-off-by: Piotr Zięcik <piotr.ziecik@nordicsemi.no>
2019-08-29 18:28:27 -04:00
Piotr Zięcik
4811886abc samples: logging: Add usermode showcase
This commit extends existing logging sample in order to present
logger usage from user mode thread.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
Signed-off-by: Piotr Zięcik <piotr.ziecik@nordicsemi.no>
2019-08-29 18:28:27 -04:00
Piotr Zięcik
1f7c22bc42 logging: Add basic userspace support
This commit adds basic userspace support to the logging subsystem.
With this change, the following API could be called from user mode:
- LOG_*()
- LOG_INST_*(),
- LOG_HEXDUMP_*(),
- LOG_HEXDUMP_INST_*(),
- LOG_PANIC(), LOG_PROCESS(),
- log_printk(), log_generic(), log_buffrered_cnt(),
- log_filter_set(NULL, ...)

With userspace disabled, the logger behavior and performance
is not affected. With userspace enabled, the calls from kernel
space have an additional overhead introduced by _is_user_context().

The logger behavior changes when it is called from the user context.
All strings logged using LOG_*() and LOG_INST_*() API from userspace
are rendered in place for security reasons and then placed in
log_strdup() memory pool, which should be large enough to hold bursts
of log messages.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
Signed-off-by: Piotr Zięcik <piotr.ziecik@nordicsemi.no>
2019-08-29 18:28:27 -04:00
Piotr Zięcik
be16b583bb syscalls: Export _is_user_context() regardless of CONFIG_USERSPACE
This commit exports the _is_user_context() function regardless
of the CONFIG_USERSPACE setting. If userspace is enabled, the
value returned depends on the execution context. If userspace
is disabled, the _is_user_context() always returns false.

Signed-off-by: Piotr Zięcik <piotr.ziecik@nordicsemi.no>
2019-08-29 18:28:27 -04:00
Vinayak Kariappa Chettimada
d23e801ad5 Bluetooth: controller: Fix Enc setup reset on rejection
Fix reset of Encryption Procedure state on reception of
REJECT_IND and REJECT_EXT_IND.

This is a regression in commit 79cb615770 ("Bluetooth:
controller: split: Port Enc setup to be queueable")

Relates to #18578.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-29 18:27:53 -04:00
Johan Hedberg
65f70acd18 Bluetooth: Host: Fix checking for sufficient encryption key size
A security vulnerability in the Bluetooth BR/EDR Bluetooth Core
specification versions 1.0 through 5.1 has been identified as
CVE-2019-9506. The Bluetooth BR/EDR encryption key negotiation
protocol is vulnerable to packet injection that could allow an
unauthenticated user to decrease the size of the entropy of the
encryption key, potentially causing information disclosure and/or
escalation of privileges via adjacent access. There is not currently
any knowledge of this being exploited.

From Core spec erratum 11838:

A device shall enforce an encryption key with at least 128-bit
equivalent strength for all services that require Security Mode 4,
Level 4. For all other services that require encryption, a device
should enforce an encryption key with at least 56-bit equivalent
strength, irrespective of whether the remote device supports Secure
Simple Pairing.

After encryption has been enabled, the Host should check the
encryption key size using either the HCI_Read_Encryption_Key_Size
command (see [Vol 2] Part E, Section 7.5.7) or a vendor-specific
method.

Fixes #18658

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-29 18:27:10 -04:00
Johan Hedberg
45ff6b2dca Bluetooth: Host: Fix failure handling with security level change
In case sufficient security level wasn't reached the error propagation
was missing, which could lead to incorrect state transitions when
update_sec_level_br() returns. Return true/false and make sure to
abort any further operations in case the update fails.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-29 18:27:10 -04:00
Joakim Andersson
babb2bfb2b Bluetooth: Host: Fix invalid pointer in bt_smp_pkey_ready
The storage for the public key is pub_key in hci_core.c.
When the public key event is generated the public key is copied into
this buffer, but the pointer to the event storage of the key is given
in the public key ready callback (bt_smp_pkey_ready).
SMP expects that it is safe to assign a global pointer to this variable.
In smp_init bt_pub_key_get is used to get the pointer to the public key.
In both cases SMP assigns the le_sc_pub_key to the pointer given.

This creates an issue when bt_smp_pkey_ready callback occurs after
smp_init during pairing procedure, SMP will then have a pointer to an
event buffer that has been released and contains invalid data.

Fixes: #18580

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-29 18:26:41 -04:00
Johan Hedberg
13d04abd1d Bluetooth: Mesh: Fix publication period timestamp initialization
The period_start timestamp wasn't getting properly initialized in the
case that retransmission was not being used. In the case of
retransmission the timestamp was getting updated in the mod_publish()
delayed work callback. Add a send_start callback and do the
initialization there, since this covers both the retransmission as
well as the no-retransmission cases.

Fixes #17820

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-29 18:26:24 -04:00
Jukka Rissanen
0370797560 net: gptp: Avoid memcpy to same buffer
Do not try to memcpy() the same buffer to itself.

This one also reverts commit 112ecb7290
("net: gptp: Fix for coverity CIDs 203471 and 203464") as that
did not fully fix the issue.

Coverity-CID: 203464
Coverity-CID: 203471
Fixes #18394

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-08-29 18:26:07 -04:00
Jukka Rissanen
8f5b5db7db net: ipv6: Check sub-option length
Make sure that the extension, like HBHO, sub-option length is
not too large.

Fixes #16323

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-08-29 18:25:41 -04:00
David B. Kinder
f0fa7e2de3 doc: update link from released doc to master
Documents generated for a tagged release have a header that mentions
that the "latest" (master branch) version of the doc may be more up to
date, but the link to the corresponding master doc is missing the
/latest/ (previously the master docs were in the root folder.

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
Fixes: #17764
2019-08-29 18:25:20 -04:00
Declan Traill
49b06f044c Settings: Fix incorrect return of -EINVAL for deleted entries
Fix for Zephyr bug #17415
For settings_line_val_read function with following .conf setting:
CONFIG_SETTINGS_USE_BASE64=y

Signed-off-by: Declan Traill <declan.traill@setec.com.au>
2019-08-27 11:15:52 +02:00
Andrzej Puzdrowski
89add1b798 tests/subsys/settings/fcb: deletion test
Add test for check whether deleted entry is recognized properly
after settings reload.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-08-27 11:15:52 +02:00
Anas Nashif
5ad3f4a693 release: bump release to 1.14.0-rc2
We are now on rc2

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-08-20 20:19:30 -04:00
Peter Bigot
3caa1ca92d logging: avoid buffer overrun extracting arguments
The number of arguments for a format string is approximated by the
number of conversion specifications.  This count may exceed the maximum
supported argument count.  Limit the extraction to the available space.

Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
2019-08-20 19:21:03 -04:00
Alberto Escolar Piedras
61e084f102 arch: POSIX: Fix race with unused threads
Fix a race which seems to have been presenting itself
very sporadically on loaded systems.
The race seems to have caused tests/kernel/sched/schedule_api
to fail at random on native_posix.

The case is a bit convoluted:
When the kernel calls z_new_thread(), the POSIX arch saves
the new thread entry call in that new Zephyr thread stack
together with a bit of extra info for the POSIX arch.
And spawns a new pthread (posix_thread_starter()) which
will eventually (after the Zephyr kernel swapped to it),
call that entry function.
(Note that in principle a thread spawned by pthreads may
be arbitrarily delayed)
The POSIX arch does not try to synchronize to that new
pthread (because why should it) until the first time the
Zephyr kernel tries to swap to that thread.
But, the kernel may never try to swap to it.
And therefore that thread's posix_thread_starter() may never
have got to run before the thread was aborted, and its
Zephyr stack reused for something else by the Zephyr app.

As posix_thread_starter() was relaying on looking into that
thread stack, it may now be looking into another thread stack
or anything else.

So, this commit fixes it by having posix_thread_starter()
get the input it always needs not from the Zephyr stack,
but from its own pthread_create() parameter pointing to a
structure kept by the POSIX arch.

Note that if the thread was aborted before reaching that point
posix_thread_starter() will NOT call the Zephyr thread entry
function, but just cleanup.

With this change all "asynchronous" parts of the POSIX arch
should relay only on the POSIX arch own structures.

Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
2019-08-20 19:20:42 -04:00
Joakim Andersson
5fcaeaa93c Bluetooth: Host: Fix unable to connect using host resolution
Fix issue unable to connect to bonded peer when host resolution is used
either because the controller does not support privacy, or the
controller resolving list was exceeded.
In this case we need to use the RPA from the advertising report
directly, there is a small chance of the peer cycling the RPA here, in
which case the connection might be unsuccessful.

Bug introduced here: 45da629b24

Fixes: #18306

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-20 19:20:26 -04:00
Luiz Augusto von Dentz
96d56cc84d Bluetooth: GATT: Fix not clearing out of sync flag
When the database changes and a client becomes change unware it should
also clear the out of sync flag as the following request should return
an error:

Core Spec 5.1 | Vol 3, Part G, 2.5.2.1 Robust Caching:

  'The error response is sent only once after the client becomes
  change-unaware, unless the client disconnects or the database changes
  again before the client becomes change-aware in which case the error
  response shall be sent again.'

Fixes: #18183

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-08-20 19:20:05 -04:00
Luiz Augusto von Dentz
3f19a2e020 Bluetooth: GATT: Fix assert when storying CCCs
This fixes the following crash:

ASSERTION FAIL [0] @ ZEPHYR_BASE/subsys/logging/log_core.c:180
	argument 2 in log message "%s: Stored CCCs for %s (%s)"
	missing log_strdup().

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-08-20 19:20:05 -04:00
Johan Hedberg
0d5640ecd7 Bluetooth: Mesh: Fix discarding messages with many segments
The code for checking space in the Friend queue was faulty in the case
that we receive a message with more segments than the configure Friend
Queue size. This is not an issue for the default configuration but
still a possible one. Move the check for exceeding Friend Queue Size
to the per-LPN function, so that bt_mesh_friend_queue_has_space()
iterates all LPNs before delivering its verdict. This allows us to
return success in case no LPN matched (which is how the code was
intended to work).

Fixes #18522

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-20 19:19:46 -04:00
Johan Hedberg
ce83a7c0ae Bluetooth: Mesh: Fix adhering to the configured Friend Queue size
Qualification test case MESH/NODE/FRND/FN/BV-08-C requires that we do
not store more messages than the reported Friend Queue size. The
implementation was so far opportunistic and stored more if it could
(it would later discard if necessary to make sure all queues can store
the required amount). The spec also requires the queues to have new
messages overwrite old ones (in the style of a circular buffer), so we
have to keep track of which buffers are part of the same segmented
message (so we discard all buffers belonging to the same message).

To pass the test case, add APIs to check for space in the Friend
queue, and track the number of buffers for each incoming segmented
message.

Fixes #18090

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-20 19:19:46 -04:00
Johan Hedberg
31842cc9e4 Bluetooth: Mesh: Remove unused code
The bt_mesh_trans_resend() function had no users, and had in fact not
even a prototype in a header file. Just remove it.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-20 19:19:46 -04:00
Johan Hedberg
4ec14cc693 Bluetooth: Mesh: Fix missing call to send_cb_finalize
When sent solely to the Friend Queue the send callbacks were not
getting called for unsegmented messages.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-20 19:19:46 -04:00
Trond Einar Snekvik
07964c23f1 Bluetooth: Mesh: Use define for no prov pdu
Adds a prov PDU type define for cases when no PDU is expected.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
2019-08-20 19:19:20 -04:00
Trond Einar Snekvik
98d3225492 Bluetooth: Mesh: Prov confirm tx after confirm rx
According to Mesh Profile Specification 1.0.1 Figure 5.17, the
unprovisioned device should send its confirmation value after the
provisioner sends theirs. Previously, the confirmation value would be
sent immediately after OOB input complete. Now it first waits for the
input data, then from confirmation from the provisioner before sending
the confirmation.

Fixes: #18178.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
2019-08-20 19:19:20 -04:00
Kumar Gala
3a42ff922f cmake: Support SDK versions more broadly
The SDK version is of the form X.Y.Z.  Change the cmake scripts to be
based on X.Y of the version.  This allows us to easily support newer
toolchains without having to explicitly add cmake files for the version
as well as removes duplication between those files.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-08-20 19:18:56 -04:00
Johan Hedberg
1b397ddef2 Bluetooth: Remove bogus files
These files got inadvertently added to the 1.14 branch with the
manual backport commit d7d9988d55.
Remove these since they're not supposed to be in the 1.14 branch and
there are not even any hooks to build them.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-19 07:56:06 -04:00
Marti Bolivar
ccb2844ec7 scripts: west build: fix pristine builds
There's a couple of missing imports from when the
203021bedb backport was added to this
branch.

Signed-off-by: Marti Bolivar <marti.bolivar@nordicsemi.no>
2019-08-17 06:05:37 -04:00
Jukka Rissanen
93874f0cca net: ipv4: Drop pkt if src address is unspecified
If we receive IPv4 packet where source address is unspecified
(all zeros), then we need to drop it.

Fixes #17427

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-08-15 18:13:33 -04:00
Tomasz Bursztyka
7ddd15c289 net/udp: Accept UDP packet with missing checksum
Having a checksum of zeros in UDP means "missing checksum" and is a
valid case as per RFC 768:

"An all zero transmitted checksum value means that the transmitter
generated no checksum (for debugging or for higher level protocols
that don't care)."

Such support is made possible by adding a new Kconfig option named
CONFIG_NET_UDP_MISSING_CHECKSUM.

However, that is valid only for IPv4. For IPv6, see the RFC 2460
section 8.1:

"Unlike IPv4, when UDP packets are originated by an IPv6 node, the UDP
checksum is not optional."

So the UDP checksum will always be verified in IPv6.

Fixes #16375

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-08-15 18:13:12 -04:00
Tomasz Bursztyka
caacf7caef net/udp: Computed checksum field should not be 0
From RFC 768, in "Fields":
"If the computed  checksum  is zero,  it is transmitted  as all ones"

Fixes #16379

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-08-15 18:13:12 -04:00
Cami Carballo
2fc4a1d94e tests: base64: add tests for error paths
line coverage was only at 72.7% due to untested error paths

Signed-off-by: Cami Carballo <cami.carballo@intel.com>
2019-08-15 18:12:45 -04:00
Jukka Rissanen
be4de1a60a net: sockets: Do not call NULL socket callback function
Before calling socket callback function, make sure the callback
function exists so that we do not get NULL pointer reference.

Fixes #18021

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-08-15 18:12:11 -04:00
Marcin Sloniewski
689d63b1a0 requirements.txt: change package name "hub" to "git-spindle"
Package "hub" has been renamed some time ago to "git-spindle".
Recently package with the same name "hub" has been released on PyPi
page, which causes installing pip requirements.txt to fail since
it is trying to install different package.

Signed-off-by: Marcin Sloniewski <marcin.sloniewski@gmail.com>
2019-08-15 18:11:58 -04:00
Michael Scott
ad4afacff9 net: lwm2m: fix error message in load_tls_credential()
Copy/paste issue was showing the wrong error message when a TLS
credential failed to be added.

Signed-off-by: Michael Scott <mike@foundries.io>
2019-08-15 18:11:39 -04:00
Jukka Rissanen
9d16440356 net: pkt: Allow larger packets for IPv6 fragmentation
If the allocated net_pkt is larger than the network interface MTU,
then check if the IPv6 fragmentation is enabled and allow larger
net_pkt length as the IPv6 fragmentation will split the packet into
suitable parts.

Fixes #16354

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-08-15 18:11:21 -04:00
Jukka Rissanen
3204df2903 net: ipv6: Fix fragmentation
The next header was not properly set in the de-fragmented
packet.

Fixes #16354

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-08-15 18:11:21 -04:00
Jukka Rissanen
6f21f39b47 net: pkt: Move everything up when pulling data
The net_pkt_pull() needs to move all the remaining data in the
net_buf instead of just the pull amount.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-08-15 18:11:21 -04:00
Andrzej Puzdrowski
baae719e3f fs/nvs: preserve the previous ate searching
Previous ATE searching is accelerate by reading sector
close ate, which allow to skip reading whole storage.

ATE is already covered by crc8. That patch introduce
check on correctness offset read form close ate. This
increases meta-data integrity check level.
This also preserves against possible looping when read
incorrect or not a NVS storage image.

fixes #16899

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-08-15 18:11:03 -04:00
Wentong Wu
83f71a2caf scripts: make mpu align in sections for code reloation
make mpu align inside sections instead of outside to avoid
overlap for code relocation feature.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-08-15 18:10:39 -04:00
Wentong Wu
36684b4519 linker: move scripts generated code at the beginning of .text
When code relocation enabled, there will be serval regions holding
text. And then there will be function call between these .text
regions, when distance between caller and callee is too far, linker
will automatically generate and insert veneer functions. And these
veneer functions will be located right after the last instruction
in the .text region by the linker. So these code will be put in the
memory reserved for priv_stacks text and kobject text if they don't
consume all the reserved memory. Or the veneer functions will be put
before the reserved memory if there isn't code in the reserved
memory. And then in the user mode building process, there will be
different memory layout and it will cause usr mode not working.
And moving the memory reserved for priv_stacks text and kobject text
at the beginning of .text will avoid above problem. The detailed
analysis for this issue can be found on Github issue #17038.

Fixes: #17038.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-08-15 18:10:39 -04:00
Andrzej Puzdrowski
d216624615 fs/nvs: skip deletion on non existing entry
No need to write deletion entry for non-existing entry.
Furthermore such a write to filled up storage will make another
writes impossible as it occupied delete nvs_ate space, but it
does not remove anything.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-08-15 18:10:10 -04:00
Andrzej Puzdrowski
e54f97e5e9 fs/nvs: fix initialization hang if sector is full
During initialization NVS analyzes open sector for
find write addresses. It was possible to infinite loop
in case when there was no space for any new ATE in the sector.

This patch introduce check for space available in the sector which
fix the issue.

fixes #17891

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-08-15 18:10:10 -04:00
Andrzej Puzdrowski
d5ea318c8b fs/nvs: fix delete ate accommodation
NVS always leave space for deletion ate in a full sector.
Even that it was not possible to write delete nvs_ate to the
full sector. Because of that it was possible to fill up NVS,
and be able to delete nothing.

This patch introduce recognition of case
the delete ate is writing, and allow to write such nvs_ate to
opened full sector.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-08-15 18:10:10 -04:00
Wentong Wu
662a5425e5 scripts: elf_helper: correct kernel object address check range
kernel object should not located in app_smem area.

Fixes: #17338.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-08-15 18:09:18 -04:00
Jukka Rissanen
7dded23a84 net: ipv6: Drop pkt if src address is unspecified
If we receive IPv6 packet where source address is unspecified
(all zeros), then we need to drop it.

Fixes #17450

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-08-15 18:09:00 -04:00
Andrzej Puzdrowski
c59da31415 doc/reference: add FCB page
Added page for description FCB subsystem.
Content was ported from MyNewt.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-08-15 18:08:36 -04:00
Andrzej Puzdrowski
3dae810785 fs/fcb: add API documentation to the header
Added doxygen documentation for FCB API.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-08-15 18:08:36 -04:00
Wentong Wu
040ecf154a driver: timer: loapic_timer: fix compile issue
fix compile issue when DEVICE_POWER_MANAGEMENT enabled.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-08-15 18:08:14 -04:00
Nicolas Pitre
0d983a3d56 realloc(): fix possible memory leak
If size is equal to zero, and ptr is not NULL, then the call must be
equivalent to free(ptr).

Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
2019-08-15 18:07:53 -04:00
Jukka Rissanen
97996f3abe tests: net: trickle: Adjust config options to avoid error prints
Noticed this error print when running in mps2_an385 platform.

   <err> net_if: There is no network interface to work with!

Adding CONFIG_NET_LOOPBACK=y removes this error. After this
the CONFIG_NET_IPV6_MLD=n needed to be added in order to avoid
crashes when IPv6 MLD is done which is not needed for this test.

Removed also the whitelisting as that is not really needed and
we want to run these in as many platforms as possible.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-08-15 18:07:10 -04:00
Robert Lubos
4ef8660b9a net: lwm2m: Ignore close return value
Explicitly ignore return value from `close` call.

Coverity-CID: 198870

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2019-08-15 18:06:37 -04:00
Michael Scott
5ff798407f net: lwm2m: remove IP CONFIG checks in lwm2m_parse_peerinfo()
CONFIG_NET_IPV* checks are not needed in lwm2m_parse_peerinfo().
The functions used are always available.  Worse, having these checks
forces the need to enable CONFIG_NET_IPV4 or IPV6 when it's not really
needed (LwM2M could be using an offloaded IP stack).

Fixes: https://github.com/zephyrproject-rtos/zephyr/issues/17401

Signed-off-by: Michael Scott <mike@foundries.io>
2019-08-15 18:06:08 -04:00
Michael Scott
0a09250d92 net: lwm2m: remove IP CONFIG checks in lwm2m_sprint_ip_addr()
CONFIG_NET_IPV* checks are not needed in lwm2m_sprint_ip_addr().  The
functions used are always available.  Worse, having these checks
forces the need to enable CONFIG_NET_IPV4 or IPV6 when it's not really
needed (LwM2M could be using an offloaded IP stack).

NOTE: Also fixes an issue where a NULL is returned when the IP address
is unknown.  This usually ends up with a crash/abort in the logging
code.

Fixes: https://github.com/zephyrproject-rtos/zephyr/issues/17401

Signed-off-by: Michael Scott <mike@foundries.io>
2019-08-15 18:06:08 -04:00
Jukka Rissanen
f078060387 net: tcp: Adjust data length if TCP options are present
Skip the TCP options before giving the data to application.
Without this, the TCP options would be passed to the application.

Fixes #17055

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-08-15 18:05:46 -04:00
Michael Scott
3f402ba529 net: lwm2m: dont select MBEDTLS or set MBEDTLS options in subsys
If a sample wants to use the Zephyr implementation of mbedtls, it
enables CONFIG_MBEDTLS and sets any needed Zephyr-specific mbedtls
options.

Currently, the LwM2M subsystem selects MBEDTLS automatically when
LWM2M_DTLS_SUPPORT is enabled.  Let's remove this and let the
LwM2M client sample enable mbedtls and it's options.

This mimics the behavior of several other network-related samples
and removes conflicts when selecting alternate implementations of
MBEDTLS.

Fixes: https://github.com/zephyrproject-rtos/zephyr/issues/17399

Signed-off-by: Michael Scott <mike@foundries.io>
2019-08-15 18:05:22 -04:00
Marti Bolivar
896085abc5 doc: getting_started: west init --mr v1.14.1
That is, specifically fetch v1.14.1, which will be the release tag to
check out on the LTS branch the next time a point release is cut.

Signed-off-by: Marti Bolivar <marti.bolivar@nordicsemi.no>
2019-08-15 18:04:59 -04:00
Marti Bolivar
c38ec879f6 doc: getting_started: recommend west v0.5.x
West is moving on. While later versions of west will remain compatible
with Zephyr LTS as long as it's supported, let's still recommend the
best tested version.

Signed-off-by: Marti Bolivar <marti.bolivar@nordicsemi.no>
2019-08-15 18:04:59 -04:00
Johan Hedberg
e41dd6d3d3 Bluetooth: Mesh: Fix reference count imbalance in bt_mesh_net_resend()
The commit 1c7b668804 tried to fix
resending segments to the GATT bearer, however it got the buffer
refernce counting wrong. The bt_mesh_net_resend() function doesn't
own a reference to the buffer, i.e. it's not responsible for unrefing
it. E.g. bt_mesh_adv_send() takes its own reference.

What was missing however was the handling of the callbacks. Use the
recently introduced send_cb_finalize() helper to make sure they're
called.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-15 18:04:36 -04:00
Johan Hedberg
c86c1b19a0 Bluetooth: Mesh: Introduce a helper for send callback finalization
There are several places that require the send callbacks to be called
immediately. Reduce the code a bit by introducing a helper for this.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-15 18:04:36 -04:00
Johan Hedberg
30f4fcb039 Bluetooth: Mesh: Fix starting IV Update when not on primary subnet
The Mesh Profile Specification states in section 3.10.5 IV Update
procedure: "The IV Update procedure is initiated by any node that is a
member of a primary subnet", meaning if we're not on the primary
subnet we should not try to initiate the procedure.

Additionally this fixes initiating IV Update in all cases where the
sequence is updated, by putting the code into bt_mesh_next_seq().

Fixes #17977

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-15 18:04:36 -04:00
Johan Hedberg
d6679e7739 Bluetooth: Mesh: Fix canceling publication retransmission timer
This branch is inherited from old code that used to start the timer as
soon as a message was queued for transmission rather than when it was
actually transmitted (the case today). It'll also cause a race in case
the publication goes over the GATT layer since the "sent" callback
happens synchronously in that case.

Fixes #17821

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-15 18:04:36 -04:00
Johan Hedberg
3be43c5e22 Bluetooth: Mesh: Fix resending segments on correct bearer
The GATT bearer is a reliable one so there should theoretically never
be a need to resend segments. If however for some strange reason the
proxy client doesn't immediately ack all segments we should do the
resending on the GATT bearer, rather than sending them over
advertising.

Fixes #17907

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-15 18:04:36 -04:00
Johan Hedberg
650475e7ad Bluetooth: Mesh: Fix not sending all segments through the Friend Queue
The code was incorrectly bailing out with "return 0" rather than
continue. Also, it was incorrectly making a reference to
tx->seg[seg_o] since when a PDU goes through the friend queue we don't
use the usual retransmission mechanism.

Fixes: #17932

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-15 18:04:36 -04:00
Johan Hedberg
f5ab2a897b Bluetooth: Mesh: Fix canceled buffer memory leak
In case a queued buffer is canceled before sending we have to unref
it, since that's what adv_send() would do as well.

Fixes #17936
Fixes #18013

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-15 18:04:36 -04:00
Johan Hedberg
9d6617dcc3 Bluetooth: Mesh: Fix heartbeat sending on Friendship established/lost
Mesh Profile 3.6.7.2 Publishing Heartbeat messages:

"
Triggered publishing of Heartbeat messages is enabled by
the Heartbeat Publication Features state (see Section 4.2.17.5):
...
- If the Low Power bit is set to 1, a Heartbeat message shall be
 published when the node establishes or loses Friendship (see Section
 3.6.6.1).
"

Fixes #18194

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-15 18:04:36 -04:00
Johan Hedberg
c62e43aee4 Bluetooth: Mesh: Fix checking for active heartbeat publication
When sending heartbeat messages triggered by feature changes the code
was trying to look up the configured publication subnet, in an
apparent attempt to figure out if publication is enabled or not. A
more appropriate way is to check for the heartbeat publication
destination address, and since we have a helper function this can be
done in a single place.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-15 18:04:36 -04:00
Johan Hedberg
8f6a0d7a67 Bluetooth: Mesh: Move heartbeat sending to transport layer
The heartbeat is a transport layer feature, so move it to transport.c.
This also opens the way to properly fix Friendship-established/lost
triggering for LPN role.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-08-15 18:04:36 -04:00
Rich Barlow
bf5d17a862 Bluetooth: Mesh: LPN: Remove msg from cache on rejection
When in Low Power mode an LPN may receive messages sent by nodes other
than its friend during its brief receive window. These messages get
rejected by the transport layer. At some point in the future the LPN
will receive these messages from its friend, however they will have
already been added to the network message cache earlier.

When the transport layer rejects a message due to it being received from
a non-friend node while in Low Power mode it must be removed from the
network message cache so that it can be correctly received from its
friend in the future.

Fixes #17809

Signed-off-by: Rich Barlow <rich@bennellick.com>
2019-08-15 18:04:36 -04:00
Joakim Andersson
e7ea607b6b Bluetooth: Host: Set Kconfig RPA timeout in controller
Use the RPA timeout provided by Kconfig in the controller

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Joakim Andersson
ef725487e2 Bluetooth: Host: Fix RPA timer not running
The RPA timer should always be running, even with privacy supported by
the controller. In order to select an IRK to generate the private
the controller is instructed by provided an identity address.
If we want to advertise privately without providing an identity address
the host has to set the private address.

Fixes: #18150

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Joakim Andersson
9866122685 Bluetooth: Host: fix missing interval_min copy
Fix missing interval min copy in bt_conn_set_param_le. Application is
unable to override BT_GAP_INIT_CONN_INT_MIN for interval_min.

Fixes: #17789

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Joakim Andersson
6715b80abf Bluetooth: controller: Fix assert in RPA timeout for advertiser
Fix assert in the RPA timeout when no resolving entry exists in the
resolving list, and the advertiser was requested to use a local IRK
to generate it's own address.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Arthur Crepin-Leblond
6cc836df3b Bluetooth: gatt: Reuse existing handles from a previously added service
When removing a service using bt_gatt_service_unregister, its attributes
handles will keep their value which can cause a problem when adding the
service again to the GATT database.
When re-adding, the gatt_register routine is taking the last handle of
the GATT database to compare it with the handles of the service to be
added.
If a service has handles with a lower value than the last handle of
the database an error will occur.
If we add/remove/add the last service, no error will occur as its
handles are always greater than the last one of the database.

Instead of resetting the handles when unregistering a service and
reassign new ones we make sure that the handles of the services are
not in use in the GATT database in order to place the service back
where it used to be.

Signed-off-by: Arthur Crepin-Leblond <arthur.crepin@proglove.de>
2019-08-15 18:04:36 -04:00
Findlay Feng
3283cabb70 bluetooth: Fix an undefined behavior
The original creates a pointer to a compiler-generated temporary that is
destroyed when the scope is exited. The pointer is stored in a structure
defined in an enclosing scope and is invalid by the point it's used.

The fix holds the structure in a variable with the same lifetime as
the pointer.

Signed-off-by: Findlay Feng <i@fengch.me>
2019-08-15 18:04:36 -04:00
Joakim Andersson
2fd43e4617 Bluetooth: SMP: Fix peripheral security request with authenticated keys
The call to bt_conn_security will send a SMP security request for
peripheral, and for central it will initiate LL encryption.
A call to bt_conn_security with no IO capabilities but authenticated
keys has been distributed, would succeed on central side, but fail on
peripheral side with error code -22.

The keys could have been either:
 - Preprogrammed
 - IO capabilities may have changed.
 - OOB bonding may been used.

Fix so that Peripheral can send a security request if the bond
information is already established.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Joakim Andersson
0695270d3a Bluetooth: Settings: Fix generated identity not persistently stored.
Fix an issue where the generated identity was not permanently stored.
This resulted in being unable to reconnect after bonding when using
privacy, since a new local IRK was generated on reboot.

When settings is enabled the application is responsible for loading
identities and possible creating its own identities.
When settings_load is called and no identities has been created or found
in persistent storage a new identity will be created.
Since bt init has not been finalized bt_id_create will not make a call
to bt_settings_save_id. So we need to make sure that this identity will
be stored.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Tedd Ho-Jeong An
1e783c649d doc: Bluetooth: Update PICS to ICS
PICS is changed to ICS by BTI.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-08-15 18:04:36 -04:00
Tedd Ho-Jeong An
326727dc54 doc: Bluetooth: Add ICS for Mesh Profile
This patch adds the ICS for Mesh Profile based on 7.4.1.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-08-15 18:04:36 -04:00
Tedd Ho-Jeong An
da83659d36 doc: Bluetooth: Update SM ICS to 7.4.1
This ptach updates the SM ICS to 7.4.1.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-08-15 18:04:36 -04:00
Tedd Ho-Jeong An
da3cfaff90 doc: Bluetooth: Update L2CAP ICS to 7.4.1
This patch updates the L2CAP ICS to 7.4.1.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-08-15 18:04:36 -04:00
Tedd Ho-Jeong An
788399bb8b doc: Bluetooth: Update GATT ICS to 7.4.1
This patch update the GATT ICS to 7.4.1.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-08-15 18:04:36 -04:00
Tedd Ho-Jeong An
657b2f51f6 doc: Bluetooth: Update GAP ICS to 7.4.1
This patch updates the GAP ICS to 7.4.1.
It updates the Bluetooth Spec to 5.1 and added missing ICS tables.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-08-15 18:04:36 -04:00
Joakim Andersson
6c26811d56 Bluetooth: GATT: Fix segfault discover descriptors all UUIDs
Handle optional argument UUID in bt_gatt_discover with type
DISCOVER_DESCRIPTOR, bt_uuid_cmp doesn't check for NULL pointer.
On system with MMU (nrf52_bsim) this can result in segfault.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Luiz Augusto von Dentz
b5ea0989b6 Bluetooth: GATT: Use atomic_t for subscribe flags
This makes use of atomic_t helpers to set, test and clear flags.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-08-15 18:04:36 -04:00
Luiz Augusto von Dentz
500d85c26b Bluetooth: GATT: Fix not canceling on unsubscribe
This introduces a new flag (BT_GATT_SUBSCRIBE_WRITE_PENDING) which is
set when a write operation requires canceling before the parameters can
be reused.

Fixes #17534

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-08-15 18:04:36 -04:00
Luiz Augusto von Dentz
d80c0500e5 Bluetooth: ATT: Fix bt_att_req_cancel clearing outstanding request
This adds a dummy cancel request which is used instead of NULL when
clearing and outstanding request thus prevent new request to take
place before a response is received while allowing the original request
to be reused.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-08-15 18:04:36 -04:00
Joakim Andersson
11d60f9661 Bluetooth: Host: Fix advertiser state flags
Set advertisers state flags so that previous advertise params does not
affect the current advertiser state.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Joakim Andersson
c367281156 Bluetooth: host: Fix gatt indicate when conn is NULL
Fix gatt indicate when conn is NULL and called with characteristic
declaration as the attribute argument. In this case the handle was not
advanced to the characteristic value. This is inconsistent with the rest
of the notify and indicate API

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Arthur Crepin-Leblond
a8578ea2aa Bluetooth: gatt: Fix DB corruption when adding/removing service
Fix an issue in the gatt_register routine where removing a service and
adding it again would cause the database to have non-ascending
orderdered handles numbers and lead to an incomplete service discovery.

Fix: Go through the database and look for a place where to insert
the new service.

Signed-off-by: Arthur Crepin-Leblond <arthur.crepin@proglove.de>
Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Joakim Andersson
b23f856c5d Bluetooth: SMP: Fix SMP identity distributing IRK for ID 0 always
Fix an issue in the SMP identity distribution where the IRK for the
default identity was always distributed.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Mariusz Skamra
a6737bb8d9 Bluetooth: Mesh: Fix rejecting invalid remote public key
The code was already rejecting the key, however that rejection
happened only after we had already sent our public key as response,
which got interpreted as acceptance by the tester (PTS).

This fixes issue that d4fd267086
supposed to fix. The problem is bt_dh_key_gen is async.
Local public key cannot be sent from the same context
the bt_dh_key_gen is called because we don't know yet
if remote key is valid.

Fixes MESH/NODE/PROV/BI-13-C.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-08-15 18:04:36 -04:00
Joakim Andersson
84bf14d682 Bluetooth: Host: Fix bug in creating connection with wrong own address.
Fix bug introduced by: 45da629b24
Mistakenly set the own address type to the destination address type.
Also this uses the RPA_OR_RANDOM in case local IRKs exists in the
controller.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Joakim Andersson
2b1a8dd77a Bluetooth: Controller: Fix privacy advertiser connect peer address type
Fix an issue with enhanced connection complete event raised by the
advertiser role. The advertiser reported that it has resolved the
the identity address of the peer, even when the peer is connecting
using it's identity address.
The host will not have the correct on-air address type i.e public.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Joakim Andersson
0c57ca579b Bluetooth: Host: Fix wrong init address when controller resolved address
The init addr should contain the on-air address used to establish the
connection. The dst address contains either the current RPA of the
unknown peer, or the identity address after identity information has
been exchanged.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-08-15 18:04:36 -04:00
Mariusz Skamra
b3a4d9c308 Bluetooth: Shell: Fix unregister GATT Metrics vendor service
The 'registered' flag was not cleared when 'gatt metrics off'
was called so that one was unable to register the service again.
Remove 'registered' variable that is actually not needed as there
is no tracking if service is already registered in similar
cmd_register_test_svc command. If the service is already registered,
the host will log an error.

Fixes: #17882
Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-08-15 18:04:36 -04:00
Mariusz Skamra
66edcfcefb Bluetooth: GATT: Add BTP Discover All Primary Services command handler
This will handle BTP Discover All Primary Services command.

Related TC: GATT/CL/GAD/BV-01-C
Fixes: #17861
Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-08-15 18:04:36 -04:00
Mariusz Skamra
7a9ad1f741 Bluetooth: GATT: Fix byte order for database hash
Core 5.1, Vol 3, Part F, 3.3.1
"Multi-octet fields within the GATT profile shall be sent least
significant octet first (little-endian) with the exception of the
Characteristic Value field. The Characteristic Value and any fields
within it shall be little-endian unless otherwise defined in the
specification which defines the characteristic."

Fixes: GATT/SR/GAS/BV-02-C
Fixes: #17857
Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-08-15 18:04:36 -04:00
Mariusz Skamra
9077f6d2cc Bluetooth: tester: Change RPA timeout
This changes RPA timeout so that the address is changed every 60
seconds. This change is needed to speed up privacy related test cases.
Currently, the new RPA was initiated on request that was a bit hackish
and could be done via BT_RPA_TIMEOUT Kconfig option.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-08-15 18:04:36 -04:00
Mariusz Skamra
9dae70c137 Bluetooth: tester: Enable GAP writable device name
This enables support for GAP writable device name in tester application
for testing purposes.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-08-15 18:04:36 -04:00
Mariusz Skamra
3fa36b23e6 Bluetooth: tester: Update to recent conn param related changes in BTP
This updates tester application to recent changes in BTP related
to Connection Parameters Update.
Connected event has been extended with connection parameters.
Connection Parameters Update command and event have beend added to
initiate and track current connection parameters.
Needed to automate qualification test GAP/CONN/CPUP/BV-06-C

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-08-15 18:04:36 -04:00
Mariusz Skamra
bd46765601 Bluetooth: shell: Fix L2CAP connect parameters count
This fixes mandatory parameters count.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-08-15 18:04:36 -04:00
Mariusz Skamra
fbf9ac1ad7 Bluetooth: tester: Enable Mesh Friend support
Enable Mesh Friend support in tester application.

Fixes: #17600
Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-08-15 18:04:36 -04:00
Mariusz Skamra
4d47ece3e6 Bluetooth: Add BT_SMP_ENFORCE_MITM option
Having this option disabled, MITM flag state can be controlled by
bt_conn_security state. This option is enabled by default to not
change the current implementation behavior.
Related to SM/MAS/SCPK/BV-01-C.

Fixes #17463

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-08-15 18:04:36 -04:00
Michael Scott
868ca61b51 net: lwm2m: firmware: add log_strdup to remove logging errors
When performing OTA using the LwM2M subsys, several logging errors
regarding log_strdup were noted.  Let's fix these.

Signed-off-by: Michael Scott <mike@foundries.io>
2019-08-15 18:03:59 -04:00
Wentong Wu
8ec8a58fe8 kernel: timeout: do not active time slicing if idle thread ready
zero slice_ticks when can't time slice so that next_timeout will
ignore slice_ticks of _current_cpu and system can stay low power
state longer time.

Fixes: #17368.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-08-15 18:03:28 -04:00
Robert Lubos
af4effd9de net: openthread: Verify iface in net_mgmt event handler
OpenThread did not verify if the interface provided in the net_mgmt
handler is actually an OpenThread interface. In result, when multiple
network interfaces were used, different interfaces were processed by the
OpenThread handler, ending up in a crash.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2019-08-15 18:02:59 -04:00
Marti Bolivar
4afa7739db scripts: runners: check for required programs
Add self.require() checks before running commands. Increase test
coverage, including for this feature, while we are here.

Signed-off-by: Marti Bolivar <marti.bolivar@nordicsemi.no>
2019-08-15 18:02:35 -04:00
Marti Bolivar
95e056b196 scripts: runners: abstract jlink's missing program support
The runners/jlink.py script has a mechanism for erroring out if a host
tool is not installed. Abstract it into runners/core.py and handle it
from run_common.py. This will let it be used in more places.

Signed-off-by: Marti Bolivar <marti.bolivar@nordicsemi.no>
2019-08-15 18:02:35 -04:00
Wayne Ren
ed0c8812ee arch: arc: fix the bug caused by hardware sp switch in interrupt
* if thread switchs in interrupt, the target sp must be in
thread's kernel stack, no need to do hardware sp switch

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-08-14 17:32:38 -04:00
Joakim Andersson
6b726c0260 Bluetooth: controller: Fix assert in RPA timeout for advertiser
Fix assert in the RPA timeout when no resolving entry exists in the
resolving list, and the advertiser was requested to use a local IRK
to generate it's own address.

Relates to #18091 and #17846.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
0c5593a05f Bluetooth: controller: Decorrelate address generation from resolution
Changes related to Bluetooth TSE 11068.

Fixes BT LL TS 5.1.0 test:
LL/SEC/ADV/BV-03-C [Privacy - Non-connectable Undirected
Advertising, Resolvable Private Address]

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
0420e0646d Bluetooth: controller: Fix nRF52840 Coded PHY timings
Fix the nRF52840 Coded PHY radio timings based on testing
with conformance tester.

Fixes the following conformance tests:
LL/CON/MAS/BV-52-C [Master Receiving Data, LE Coded, CI Change]
LL/CON/MAS/BV-54-C [Slave Receiving Data, LE Coded, CI Change]

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
d19c19da28 Bluetooth: controller: Fix regression in Coded PHY CI Change
Fix the regression in Coded PHY CI change implementation
introduced by reverting the commit 9d1ca9c390 ("Bluetooth:
controller: remove redundant PPI channel and TIMER CC").

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
e5823dcf5d Bluetooth: controller: Add PA/LNA support on NRF_P1 GPIO pins
Added support for using NRF_P1 GPIO pins on nRF52840 SoC.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
2829372121 Bluetooth: controller: Fix cond compile of DLU event generation
Fix the conditional compile of Data Length Update event
generation on PHY Update Procedure when Data Length
Extensions are not supported.

The regression was introduced in
commit 70a89876d0 ("Bluetooth: controller: Fix missing
data length update event")

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
e584837d1e Bluetooth: controller: Update Bluetooth version to 5.1
Update the Bluetooth HCI Version to 5.1.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
c93673fbec Bluetooth: controller: Fix DLE during data transmission
Fix bug in Data Length Update procedure that caused the
connection to drop due to the implementation sending bigger
PDU before the peer has acknowledged the receipt of Length
Response PDU.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
95c84b25a8 Bluetooth: controller: Add deferred procedure complete event
Added implementation to defer procedure complete event until
actual on-air connection event instant.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
069b7d3ef8 Bluetooth: controller: Enable Fast Enc and RSSI features
Enable the Fast Encryption design and connection RSSI
measurement when CONFIG_BT_HCI_RAW is selected.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
3d112a6c72 Bluetooth: controller: Fix post DLE/PHY update event length
Fix the controller implementation to perform connection
event length reservation based on the completed Data Length
Update and/or PHY Update Procedure.

This fix with avoid states/roles from stepping on each
others event length. Connection would have supervision timed
out or have stalled data transmissions due to insufficient
reserved air time.

Relates to #15171.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
9fa7db868c Bluetooth: controller: Fix missing data length update event
Fix missing generation of data length update HCI event when
effective tx and rx timings change due to PHY update
procedure.

Fixes BT LL TS 5.1.0 test:
LL/CON/MAS/BV-52-C [Master Receiving Data, LE Coded, CI
Change]

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
5f455a6e66 Bluetooth: controller: Fix packet timing restriction reset
Fixed a bug related to missing reset of packet timing
restriction variable.

Fixes BT LL TS 5.1.0 test:
LL/CON/SLA/BV-55-C [Initiating PHY Update Procedure - Packet
Time Restrictions, LE Coded]

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Vinayak Kariappa Chettimada
0ce629178d Bluetooth: controller: Fix PHY update proc symmetric rsp
Fix PHY update procedure to correctly handle master
requesting asymmetrical and slave symmetrical.

Fixes BT LL TS 5.1.0 conformance test:
LL/CON/MAS/BV-117-C [PHY Update Procedure - Master
Requests Asymmetrical, Slave Symmetrical]

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-08-14 17:31:55 -04:00
Ioannis Konstantelias
105ff0446f drivers: flash: stm32: Fix insufficient wait time
flash_erase cannot erase a page from the STM32xx SOC flash. It seems
that the erase wait time is not enough and against to what the SOC's
datasheet states. As a result this patch doubles the wait time.

Signed-off-by: Ioannis Konstantelias <ikonstadel@gmail.com>
2019-08-14 17:30:49 -04:00
Andrei Gansari
d3f50fb6a7 soc: k64f MPU configured to always allow ENET
Because NXP MPU's regions are dynamically enabled/disabled, ENET
device's access maybe restricted when switching out of a task.
Background DMA transfers from RAM to MAC/PHY may happen during MPU
region reconfiguration or core idling.
Enabled ENET (Kinetis MPU Master 3) to always have access to RAM address
space.

Signed-off-by: Andrei Gansari <andrei.gansari@nxp.com>
2019-08-14 17:29:51 -04:00
Andrew Boie
1117710ffc tests: force stack canaries off for two user tests
Stack canaries require that the z_libc_partition be added to
the memory domain, otherwise user thread access to the
stack canary value will result in an MPU/MMU fault.

These tests define their own domains to test specific userspace
features. Adding another partition to them would be invasive,
would potentially break some platforms with a limited number
of MPU regions, and these tests are not designed to validate
stack canaries anyway, we have other tests for that.

Fixes: #17595

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-08-14 17:28:51 -04:00
Nicolas Pitre
e7ae2f17ca mempool: fix corruption of the free block bitmap and beyond
In z_sys_mem_pool_block_alloc() the size of the first level block
allocation is rounded up to the next 4-bite boundary. This means one
or more of the trailing blocks could overlap the free block bitmap.

Let's consider this code from kernel.h:

  #define K_MEM_POOL_DEFINE(name, minsz, maxsz, nmax, align) \
       char __aligned(align) _mpool_buf_##name[_ALIGN4(maxsz * nmax) \
                              + _MPOOL_BITS_SIZE(maxsz, minsz, nmax)]; \

The static pool allocation rounds up the product of maxsz and nmax not
size of individual blocks. If we have, say maxsz = 10 and nmax = 20,
the result of _ALIGN4(10 * 20) is 200. That's the offset at which the
free block bitmap will be located.

However, because z_sys_mem_pool_block_alloc() does this:

        lsizes[0] = _ALIGN4(p->max_sz);

Individual level 0 blocks will have a size of 12 not 10. That means
the 17th block will extend up to offset 204, 18th block up to 216, 19th
block to 228, and 20th block to 240. So 4 out of the 20 blocks are
overflowing the static pool area and 3 of them are even located
completely outside of it.

In this example, we have only 20 blocks that can't be split so there is
no extra free block bitmap allocation beyond the bitmap embedded in the
sys_mem_pool_lvl structure. This means that memory corruption will
happen in whatever data is located alongside the _mpool_buf_##name
array. But even with, say, 40 blocks, or larger blocks, the extra bitmap
size would be small compared to the extent of the overflow, and it would
get corrupted too of course.

And the data corruption will happen even without allocating any memory
since z_sys_mem_pool_base_init() stores free_list pointer nodes into
those blocks, which in turn may get corrupted if that other data is
later modified instead.

Fixing this issue is simple: rounding on the static pool allocation is
"misparenthesized". Let's turn

	_ALIGN4(maxsz * nmax)

into

	_ALIGN4(maxsz) * nmax

But that's not sufficient.

In z_sys_mem_pool_base_init() we have:

        size_t buflen = p->n_max * p->max_sz, sz = p->max_sz;
        u32_t *bits = (u32_t *)((u8_t *)p->buf + buflen);

Considering the same parameters as above, here we're locating the extra
free block bitmap at offset `buflen` which is 20 * 10 = 200, again below
the reach of the last 4 memory blocks. If the number of blocks gets past
the size of the embedded bitmap, it will overlap memory blocks.

Also, the block_ptr() call used here to initialize the free block linked
list uses unrounded p->max_sz, meaning that it is initially not locating
dlist nodes within the same block boundaries as what is expected from
z_sys_mem_pool_block_alloc(). This opens the possibility for allocated
adjacent blocks to overwrite dlist nodes, leading to random crashes in
the future.

So a complete fix must round up p->max_sz here too.

Given that runtime usage of max_sz should always be rounded up, it is
then preferable to round it up once at compile time instead and avoid
further mistakes of that sort. The existing _ALIGN4() usage on p->max_sz
at run time are then redundant.

Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
2019-08-14 17:28:23 -04:00
Andy Ross
0000746002 lib/os/mempool: Fix corruption case with block splitting
The block_fits() predicate was borked.  It would check that a block
fits within the bounds of the whole heap.  But that's not enough:
because of alignment changes between levels the sub-blocks may be
adjusted forward.  It needs to fit inside the PARENT block that it was
split from.

What could happen at runtime is that the last subblocks of a
misaligned parent block would overlap memory from subsequent blocks,
or even run off the end of the heap.  That's bad.

Change the API of block_fits() a little so it can extract the parent
region and do this properly.

Fixes #15279.  Passes test introduced in #16728 to demonstrate what
seems like the same issue.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2019-08-14 17:28:23 -04:00
Krzysztof Chruscinski
4dfcb881e9 logging: Fix corruption in log panic when scheduler was active
Logger had false assumption that once log_panic is called then
context switch will never occur and was not protecting against
reentrancy in panic mode. Added interrupt locking when accessing
unprotected part.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-08-14 17:27:47 -04:00
Ioannis Glaropoulos
8b0fdf54ac arch: arm: userspace: don't use the default stack in z_arm_do_syscall
z_arm_do_syscall is executing in privileged mode. This implies
that we shall not be allowed to use the thread's default
unprivileged stack, (i.e push to or pop from it), to avoid any
possible stack corruptions.

Note that since we execute in PRIV mode and no MPU guard or
PSPLIM register is guarding the end of the default stack, we
won't be able to detect any stack overflows.

This commit implement the above change, by forcing
z_arm_do_syscall() to FIRST switch to privileged
stack and then do all the preparations to execute
the system call.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-08-14 17:26:55 -04:00
Ioannis Glaropoulos
113924134e userspace: minor typo fixes in various places
System call arguments are indexed from 1 to 6, so arg0
is corrected to arg1 in two occasions. In addition, the
ARM function for system calls is now called z_arm_do_syscall,
so we update the inline comment in __svc handler.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-08-14 17:26:55 -04:00
Ioannis Glaropoulos
37b867b08a arch: arm: userspace: correct inline comment for bad syscalls
We need to correct the inline comment in swap_helper.S,
which is suggesting that system call attempts with
invalid syscall IDs (i.e. above the limit) do not force
the CPU to elevate privileges. This is in fact not true,
since the execution flow moves into valid syscall ID
handling.

In other words, all we do for system calls with invalid
ID numbers is to treat them as valid syscalls with the
K_SYSCALL_BAD ID value.

We fix the inline documentation to reflect the actual
execution flow.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-08-14 17:26:55 -04:00
Andrew Boie
6cec0bcc6b toolchain: allow 0.10.1 SDK
Code coverage gathering is broken on qemu_x86 with the
0.10.0 SDK.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-08-14 17:26:39 -04:00
Daniel Leung
233c6d8540 tests/kernel/device: extends test for code coverage
device_get_binding() compares pointers first before doing strcmp().
However, enabling coverage forces -O0 to disable any compiler
optimizations. There would be multiple copies of the same string,
and the code pathing doing pointer comparsion would not be tested
at all. So add this flag to merge string constants such that
the pointer comparison would be exercised.

This also adds a bad driver which fails initialization. This is
to make sure that execution path is covered.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-08-14 17:26:39 -04:00
Andrew Boie
a5a7831f4e tests: crc: convert to regular test case
The special 'unittest' target has largely been supersesed by
native_posix, and converting this to a regular test will allow
us to see code coverage for the CRC functions in our coverage
reports.

Fixes: #16943

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-08-14 17:26:39 -04:00
Benoit Leforestier
ab5c2e3d0e codeowner: add codeowners for /test/lib
Add codeowners for /test/lib

Signed-off-by: Benoit Leforestier <benoit.leforestier@gmail.com>
2019-08-14 17:26:39 -04:00
Andrew Boie
5ba8569470 tests: mem_alloc: don't set main thread size
This test uses ztest, there is no need to set this and it
was breaking builds with CONFIG_COVERAGE=y

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-08-14 17:26:39 -04:00
Declan Traill
5b8488a936 Settings: Fixes for compiler warnings
Warnings were due to due to possibly uninitialized variables.

Signed-off-by: Declan Traill <declan.traill@setec.com.au>
2019-07-31 05:49:33 -04:00
Anas Nashif
03a52401c6 release: bump version to 1.14.1-rc1
Bump version to 1.14.1-rc1

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-07-05 12:07:55 -04:00
Andrew Boie
a3db646ee7 tests: fatal: test failed assertion
Covers assert_post_action() which was previously uncovered.

Partial fix for #16011

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-05 10:58:18 -04:00
Andrew Boie
45a1852ce7 tests: json: improve code coverage
Adds coverage for the uncovered json_calc_encoded_len()
and covers a bunch more error cases.

This gets us up to 90.1% line coverage and 100% function
coverage.

Fixes: #16944
Partial fix for: #16011

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-05 10:57:58 -04:00
Andrew Boie
eaf7c2f4c2 kernel: fix CONFIG_THREAD_NAME from user mode.
This mechanism had multiple problems:

- Missing parameter documentation strings.
- Multiple calls to k_thread_name_set() from user
  mode would leak memory, since the copied string was never
  freed
- k_thread_name_get() returns memory to user mode
  with no guarantees on whether user mode can actually
  read it; in the case where the string was in thread
  resource pool memory (which happens when k_thread_name_set()
  is called from user mode) it would never be readable.
- There was no test case coverage for these functions
  from user mode.

To properly fix this, thread objects now have a buffer region
reserved specifically for the thread name. Setting the thread
name copies the string into the buffer. Getting the thread name
with k_thread_name_get() still returns a pointer, but the
system call has been removed. A new API k_thread_name_copy()
is introduced to copy the thread name into a destination buffer,
and a system call has been provided for that instead.

We now have full test case coverge for these APIs in both user
and supervisor mode.

Some of the code has been cleaned up to place system call
handler functions in proximity with their implementations.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-05 10:57:41 -04:00
Andrew Boie
d5b83ae461 arc: use different load instruction
If the offset within the thread struct to the
ARC arch-specific 'relinquish_cause' member is too
large, ld_s instructions referencing it will not
compile. This happens easily if CONFIG_THREAD_NAME
reserves a name buffer within the thread struct, since
all the arch-specific members come last.

Use the regular 'ld' instruction instead.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-05 10:57:41 -04:00
Andrew Boie
c9f0148e3c tests: schedule_api: cover priority checks
Some cases, such as for the idle thread, were uncovered.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-05 10:57:15 -04:00
Andrew Boie
f0f74e4f0e tests: common: add tests for extra sflist APIs
sflists have a couple APIs related to sfnodes that aren't
present for slists. There were uncovered, write some tests
for them.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-05 10:56:44 -04:00
Andrew Boie
dfb96f40d6 kernel: test coverage for sflist
We were testing all the slist APIs, but not the sflist
variant. Make a copy of the slist tests for sflist,
with the names properly changed.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-05 10:56:44 -04:00
Andrew Boie
4899c096ae lib: os: fix slist code coverage
Some of the slist APIs were only being indirectly exercised;
add to the slist test case to cover everything explicitly.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-05 10:56:44 -04:00
Vinayak Kariappa Chettimada
528f787ddd Bluetooth: controller: Fix handling zero length L2CAP start frame
Added a fix handling L2CAP start frame with payload length
of zero which otherwise sent zero length data start PDU on
air.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-07-04 09:25:40 -04:00
Andrew Boie
db50b4ec2a lib: os: exclude z_arch_printk_char_out()
This function doesn't do anything, and only exists so that
it can be overridden later, exclude from coverage reports.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 17:06:33 -04:00
Andrew Boie
d3ca4bdbdb lib: os: fix vsnprintk coverage
vsnprintk() was uncovered. Simply adjust snprintk() to use
it, instead of duplicating logic.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 17:06:33 -04:00
Tedd Ho-Jeong An
301558a433 tests: bluetooth/tester: Add support Read Using Characteristic UUID
This patch adds an API to support Read Using Characteristic UUID.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-07-02 16:56:47 -04:00
Mariusz Skamra
919aa1785a Bluetooth: gatt: Fix infinite read_by_uuid procedure
The attribute handle used to read next attribute has to be incremented
to not loop reading the same attribute.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-07-02 16:56:47 -04:00
Luiz Augusto von Dentz
0f01fe754c Bluetooth: GATT: Fix not parsing result of Read by Type
When using the procedure Read By Type the response may contain multiple
instances so it needs to be parsed properly. When dealing with long
values only the beggining will be read, for the remaining bytes the
application should issue another bt_gatt_read with offset so Read Blob
procedure is used as recommended by the spec:

BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part F page 2312:

The Read Blob Request would be used to read the remaining octets of a
long attribute value.

Fixes #16107

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-07-02 16:56:47 -04:00
Tedd Ho-Jeong An
fb199a2ac5 Bluetooth: GATT: Add support for Read Using Characteristic UUID
This patch adds support for Read Using Characteristic UUID which is one
of the procedure to read the characteristic value especially when the
client only knows the characteristic UUID and does not know the handle
of the characteristic.

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-07-02 16:56:47 -04:00
Marti Bolivar
3c6f0742a7 scripts: fix pyocd runner --flash-opt help
This doesn't work. Fix the example.

Signed-off-by: Marti Bolivar <marti.bolivar@nordicsemi.no>
2019-07-02 16:56:20 -04:00
Andrew Boie
5bbae10490 kernel: offsets: exclude from coverage
None of this is runtime code.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 16:55:59 -04:00
Johan Hedberg
24d7e9e03f Bluetooth: Mesh: Fix provisioning send error handling
Log all send errors, but don't try to call e.g. prov_send_fail_msg()
since that'll almost certainly fail as well.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 16:55:33 -04:00
Johan Hedberg
d4fd267086 Bluetooth: Mesh: Fix rejecting invalid remote public key
Mesh Profile Spec v1.0.1 | Section 5.4.2.3:
"The Provisioner and the device shall check whether the public key
provided by the peer device or obtained OOB is valid (see Section
5.4.3.1).

When the Provisioner receives an invalid public key, then provisioning
fails, and the Provisioner shall act as described in Section 5.4.4.
When the device receives an invalid public key, then provisioning
fails, and the device shall act as described in Section 5.4.4."

This is also in Erratum 10395 which is Mandatory for Mesh v1.0.

The code was already rejecting the key, however that rejection
happened only after we had already sent our public key as response,
which got interpreted as acceptance by the tester (PTS).

Fixes MESH/NODE/PROV/BI-13-C.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 16:55:33 -04:00
Johan Hedberg
9fb22af194 Bluetooth: Mesh: Generate new public key for each provisioning session
Mesh Profile Spec v1.0.1 Section 5.4.2.3: "If the public key was not
available using an OOB technology, then the public keys are exchanged
between the Provisioner and the unprovisioned device. For each
exchange, a new key pair shall be generated by the Provisioner and the
unprovisioned device."

This allows passing MESH/NODE/PROV/BV-12-C.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 16:55:33 -04:00
Johan Hedberg
f35dc9c018 Bluetooth: Fix public key callback management
Clear the callback list once generation is complete and we've done
calling all callbacks. This lets us use bt_pub_key_gen() multiple
times, which before this patch could have resulted in a corrupt linked
list.

Also remove redundant callback dispatching from bt_pub_key_gen() since
the function checks for the PUB_KEY_BUSY flag in the beginning, i.e.
there cannot be other pending generation actions at this point in the
code.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 16:55:33 -04:00
Johan Hedberg
2761887b20 Bluetooth: SMP: Make public key handling more robust
Update code to handle other users of the public key generation APIs
by fetching the current public key at the beginning of each SMP
session. This is particularly important if someone creates the (rather
odd) combination of Mesh and SMP where Mesh will regenerate a new
key pair after provisioning.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 16:55:33 -04:00
Johan Hedberg
de50834455 Bluetooth: Mesh: Rename reset_link() to reset_adv_link()
This is a PB-ADV specific internal helper, so rename it appropriately
to avoid any confusion.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 16:55:33 -04:00
Johan Hedberg
683e14cc94 Bluetooth: Mesh: Fix Public Key mismatch error handling
Mismatch in Public Key type will cause device to send Invalid Format
error, and treat any further PDU's as unexpected.

This affects MESH/NODE/PROV/BI-03-C test case.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 16:55:33 -04:00
Johan Hedberg
ee793280f3 Bluetooth: Mesh: Fix missing protocol error timeout
Provisioning errors shouldn't cause device to close link. Upon error,
device will send Provisioning Failed PDU, and any further PDU's will
be considered as unexpected as per Mesh Profile section 5.4.4.

Also a timer is started every time device sends or receives a PDU.
This affects MESH/NODE/PROV/BV-10-C test case.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 16:55:33 -04:00
Johan Hedberg
8c2c5618de Bluetooth: Introduce separate pool for discardable events
Introduce a separate buffer pool for events which the HCI driver
considers discardable. Examples of such events could be e.g.
Advertising Reports. The benefit of having such a pool means that the
if there is a heavy inflow of such events it will not cause the
allocation for other critical events to block and may even eliminate
deadlocks in some cases.

Also update all mesh samples not to specify explicit RX buffer counts
anymore. Instead, create appropriate defaults in Kconfig so that we
only need to override this in the app for cases like the bbc:microbit
with limited memory.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 16:54:49 -04:00
Johan Hedberg
d7d9988d55 Bluetooth: Add dedicated pool for HCI_Num_Completed_Packets HCI event
This event is a priority one, so it's not safe to have it use the RX
buffer pool which may be depleted due to non-priority events (e.g.
advertising events). Since the event is consumed synchronously it's
safe to have a single-buffer pool for it. Also introduce a new
bt_buf_get_evt() API for HCI drivers to simplify the driver-side code,
this effectively also deprecates bt_buf_get_cmd_complete() which now
has no in-tree HCI driver users anymore.

Fixes #16864

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 16:54:49 -04:00
Andrew Boie
7e37ef4a7c tests: sys_mutex: improve code coverage
Test error cases and alternative implementation to bring code
coverage up to 100% file / 100% line.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 16:54:27 -04:00
Ravi kumar Veeramally
47588913d3 net: sockets: Add timeout to socket connect call
Current socket connect call implementation always takes
K_FOREVER timeout value, which blocks TCP connections
in case failure. TCP connections waits until it receives
SYN ACK. If there is no SYC ACK means, connect call is
blocked forever.

Added a Kconfig option to define timeout value. Default
value is 3000 milliseconds. User can modify it.

Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2019-07-02 16:54:00 -04:00
Jukka Rissanen
b1991f9d12 tests: net: dns: Add tests for dns_unpack_answer()
Make sure that dns_unpack_answer() works as expected.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-07-02 16:53:19 -04:00
Jukka Rissanen
686f3d21b4 net: dns: Make dns_unpack_answer() to check non-compressed answers
Modify dns_unpack_answer() function to check if the answer is
compressed or not, and return correct values regardless.

Fixes #16594

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-07-02 16:53:19 -04:00
Andrew Boie
a92a530465 tests: thread_apis: exercise some system calls
We had no system call coverage for k_thread_suspend
and k_thread_resume.

Some unnecessary cleanup tasks in the test case have
been removed.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 16:52:53 -04:00
Andrew Boie
2ae7f09dad tests: device: cover device_get_binding()
We had no coverage for invoking this from a system call.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 16:52:09 -04:00
Andrew Boie
a880994e06 tests: common: cover k_cycle_get_32() syscall
We had plenty of coverage for k_cycle_get(), but not its
32-bit variant. Run a case in user mode so that the system
call handler gets covered.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 16:49:20 -04:00
Jukka Rissanen
f06bb3f1cd tests: net: mgmt: Verify that info_length is correct
If info is sent by net_mgmt, make sure it contains correct data.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-07-02 16:48:37 -04:00
Jukka Rissanen
ea02a080a6 net: mgmt: Send event with info when applicaple
If the net_mgmt event has some info, like IP address, that
could be sent, then send it the same time. This is very useful
for the receiver of the event in order to know that is happening
in the system.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-07-02 16:48:37 -04:00
Jukka Rissanen
1ab6102343 net: mgmt: Add info length to event wait API
The info parameter is difficult to use if the caller does not
get information how long the info struct is. So add info_length
parameter to net_mgmt_event_wait_on_iface() and
net_mgmt_event_wait() APIs.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-07-02 16:48:37 -04:00
Andrew Boie
0608aa8ffe kernel: exclude stubs from code coverage
These are stub functions that do nothing. Exclude from
coverage reports.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 16:46:06 -04:00
Andrew Boie
618a2a7ea3 tests: userspace: cover z_object_recycle()
We didn't have code coverage for this function anywhere
except indirectly through some network tests; exercise it
in the suite of userspace tests.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 16:15:49 -04:00
Andrew Boie
a51247e5fc tests: dynamic_thread: cover thread_idx_free()
Address a coverage gap in kernel/userspace.
Unfortunately, in the process of fixing this, a bug was
discovered, see #17023.

This test is user mode specific, filter the testcase
on whether userspace is available instead of ifdefing
the code.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 16:15:49 -04:00
Andrew Boie
5a418dd8f8 tests: userspace: cover missing/bad syscalls
We were missing code coverage for bad or unimplemented
system call IDs.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 16:15:49 -04:00
Jukka Rissanen
15a830a1ef net: sntp: Ignore return value from close
Return value from close() can be ignored in sntp_close()
as it is not returning value to caller anyway.

Coverity-CID: 198863
Fixes #16584

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-07-02 16:14:56 -04:00
Andrew Boie
f3e094afe3 tests: schedule_api: skip test assert if COVERAGE
This test case is so timing sensitive that gathering code
coverage data screws up the results.

Since this is an abnormal execution environment anyway,
just skip the assertions if CONFIG_COVERAGE=y.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 08:45:07 -04:00
Andrew Boie
bd49769964 tests: schedule_api: test syscalls from usermode
We didn't have any coverage of the system call handlers for
k_wakeup() and k_is_preempt().

Increase RAM requirements due to stack alignment constraints
on MPU platforms when user mode is enabled.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 08:45:07 -04:00
Andrew Boie
3472eeaed4 tests: schedule_api: exercise SCHED_MULTIQ
This option should work on any arch, don't reserve
this just for native_posix.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 08:45:07 -04:00
Andrew Boie
c9af4aa4a8 tests: schedule_api: fix extern tstacks
Fix how the tstacks array was declared extern so this
actually compiles on all platforms with user mode enabled.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-07-02 08:45:07 -04:00
Johan Hedberg
08c4c32e91 Bluetooth: Fix expiring RPA when different local identities are used
When advertising with different identities we need to flag any
programmed RPA as invalid if it was generated using a different
identity.

Fixes #16893

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 08:44:31 -04:00
Ryan C Johnson
d3f926f73f drivers: flash: w25q: erase operations must be erase-size aligned
- Erase operations must be aligned to the erase-size.
 - Don't need to perform an alignment check on a full erase. The offset
   is not used in this case.
 - Don't need to perform alignment check on a sector sized erase, as
   this alignment is checked on entrance to the function.
 - Removed some whitespace.

Signed-off-by: Ryan C Johnson <ryan.johnson@flex.com>
2019-07-02 08:43:32 -04:00
Luiz Augusto von Dentz
7cf70968fc Bluetooth: shell: gatt: Add discover command
This adds discover command which can be used to discover all attributes
using BT_GATT_DISCOVER_ATTRIBUTE:

uart:~$ gatt discover
Discover pending
Descriptor 2800 found: handle 1
Descriptor 2803 found: handle 2
Descriptor 2a00 found: handle 3
Descriptor 2803 found: handle 4
Descriptor 2a01 found: handle 5
Descriptor 2800 found: handle 6
Descriptor 2803 found: handle 7
Descriptor 2a05 found: handle 8
Descriptor 2902 found: handle 9
Descriptor 2803 found: handle a
Descriptor 2b29 found: handle b
Descriptor 2803 found: handle c
Descriptor 2b2a found: handle d
Descriptor 2803 found: handle e
Descriptor 2b2b found: handle f

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-07-02 08:42:48 -04:00
Luiz Augusto von Dentz
e3f71020d3 Bluetooth: GATT: Fix bt_gatt_discovery with BT_GATT_DISCOVER_DESCRIPTOR
Fix iterating past the response which causes an invalid memory to be
accessed and passed over to the callback as if there were more
attributes found.

Fixes #16602

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-07-02 08:42:48 -04:00
Johan Hedberg
6e96c8abca Bluetooth: Mesh: Fix segmented message RPL behavior
Update the Replay Protection List handling for segmented messages to
be more in line with Figure 3.43 in Mesh Profile Specification 1.0.
This means that the RPL check and update need to be split into two
independent steps rather than always doing these together.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-07-02 08:40:47 -04:00
Andrzej Puzdrowski
39121ae854 fs/nvs: fix startup for 2-sectors configuration
This patch fixes following bug:

After first GC operation the 1st sector had become scratch
and the 2nd sector had became write sector. After that NVS
was initialize (via reboot) again - it recognized the 1st
sector as write sector and 2nd as undone GC destination sector,
therefore it cleared 2nd sector and  re-run GC, which implied data loss.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-07-02 08:39:28 -04:00
Anas Nashif
21609c2562 CODEOWNERS: remove non-existing path
arch/arm/include/cortex_m/cmse/ does not exist in the tree.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-06-25 22:20:14 -04:00
Andrew Boie
1c18dc7b2f tests: poll: expand userspace coverage
The syscall handler for k_poll() returns error values
instead of killing the caller for various bad arguments,
cover these cases.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-06-18 18:55:19 -04:00
Andrew Boie
bdf05c01e3 lib: os: remove dead code
If multithreading is disabled, thread_entry() never runs
since we cannot create threads; the non-multithreading case
was simply dead code.

Indicate to code coverage that CODE_UNREACHABLE should be
skipped.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-06-18 18:55:19 -04:00
Andrew Boie
99ddf9ce0c kernel: idle: exclude no-op funcs from coverage
These get overridden anyway.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-06-18 18:55:19 -04:00
Andrew Boie
6712db44b9 tests: queue: test k_queue_alloc_*pend()
These were never getting called anywhere from user mode,
except for k_queue_alloc_append(), but only by virtue of
some workqueue tests.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-06-18 18:55:19 -04:00
Andrew Boie
17b2abec79 kernel: allow k_sleep(K_FOREVER)
Threads that are sleeping forever may be woken up with
k_wakeup(), this shouldn't fail assertions.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-06-18 18:55:19 -04:00
Andrew Boie
4f52e63153 kernel: init: exclude unreachable code
LCOV/gcovr doesn't understand what CODE_UNREACHABLE means.
Adding LCOV_EXCL_LINE to the macro definition unfortunately
doesn't work.

Exclude a bit of code which spins endlessly when multi-
threading is disabled that runs after the coverage report
is dumped.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-06-18 18:55:19 -04:00
Andrew Boie
ed5625a837 kernel: init: fix coverage gap
We don't get any coverage past when we dump the coverage data,
so exclude the end of the function and move setting the main
thread as nonessential to immediately before the coverage dump.
The comment was also amended.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-06-18 18:55:19 -04:00
Andrew Boie
344e275f31 kernel: init: exclude some funcs from coverage
data copying and bss zero are called from arch code
before z_cstart(), and coverage data gathering doesn't
work properly at that point. Not all arches use this
code anyway, some do it in optimized assembly instead.

Weak main() is also excluded; it does nothing and every
test overrides it.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-06-18 18:55:19 -04:00
Andrew Boie
e2b31e6c29 tests: mutex_api: run in user mode
Addresses coverage gaps. Some changes were made so that exited
threads do not have k_thread_abort() called on them.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-06-18 18:55:19 -04:00
Jukka Rissanen
52cecb5148 net: if: Fix null pointer deref when selecting IPv4 address
It is possible that iface is NULL when selecting IPv4 destination
address for a sent packet.

Coverity-CID: 198877
Fixes #16570

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-06-18 18:54:53 -04:00
Ioannis Glaropoulos
92ebf5e6a8 arch: arm: fix start of MPU guard in stack-fail check (no user mode)
When building without support for user mode (CONFIG_USERSPACE=n)
we need to correct the starting address of the MPU Guard, before
passing it to the function that evaluates whether a stack
corruption has occurred. The bug was introduced by commit
(60bae5de38) in
PR-13619, where the start address of the MPU guard was properly
corrected, but the guard start at the corresponding stack-fail
check was not adjusted accordingly.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-06-18 18:54:17 -04:00
Rich Barlow
3bbcdc79d0 Bluetooth: Mesh: LPN: Clear sent_req on failure
When trying to establish friendship the Friend must respond to the
initial Friend Poll with a Friend Update. If this initial Friend Update
response is not received the Friendship establishment process must start
again.

When starting a second Friendship establishment processes the `sent_req`
field of the `lpn` struct was left set to `TRANS_CTL_OP_FRIEND_POLL`.
This prevented the initial Friend Poll being sent out on the second
attempt. Since the Friend Poll was not sent, no timeout is set and
nothing happens ever again. No more Friendship Requests are sent.

This commit clears `sent_req` back to zero when no Friend Update
response has been received after the initial Friend Poll.

Fixes #16678

Signed-off-by: Rich Barlow <rich@bennellick.com>
2019-06-18 18:53:33 -04:00
Luiz Augusto von Dentz
2371a976d1 Bluetooth: L2CAP: Fix inverting of SCID and DCID on disconnect
For the request:

DCID shall map to rx.cid:
  'This field specifies the endpoint of the channel to be disconnected
  on the device receiving this request.'

SCID shall map to tx.cid:
  'This field specifies the endpoint of the channel to be disconnected
  on the device sending this request.'

For the response when receiving the roles are inverted.

Fixes #16799

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-06-18 18:53:04 -04:00
Anas Nashif
6d174a2b75 ci: add v1.14-branch to email integration
Configure 1.14 branch for notifications via email.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-06-18 15:52:06 -04:00
Anas Nashif
e798ae7e07 manifest: add ci-tools
Add a working version of ci-tools with this branch. We will need to be
kept compatible with 1.14.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-06-18 11:39:59 -04:00
Luiz Augusto von Dentz
6950a38cb3 Bluetooth: GATT: Fix assuming writes to CCC will always contain 2 bytes
Although unlikely it is possible that a remote may attempt to send just
1 byte as the write request allows to do that:

BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part F
page 2320:

  'If the attribute value has a fixed length and the Attribute Value
  parameter length is less than or equal to the length of the attribute
  value, the octets of the attribute value parameter length shall be
  written; all other octets in this attribute value shall be
  unchanged.'

Fixes #16734

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-06-11 15:14:31 -04:00
Johan Hedberg
8fa76985b1 Bluetooth: Mesh: Fix missing implementation of Proxy SAR timeout
Mesh Profile 1.0 Section 6.6:
"The timeout for the SAR transfer is 20 seconds. When the timeout
expires, the Proxy Server shall disconnect."

This will let qualification test case MESH/SR/PROX/BV-05-C pass
without requiring an explicit disconnect.

Fixes #16600

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-06-11 15:13:52 -04:00
Jukka Rissanen
63841b5607 net: llmnr: Check that UDP header can be accessed
It is possible that UDP header cannot be accessed so we need
to check that we do not do null pointer dereference.

Coverity-CID: 198866
Fixes #16581

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-06-11 15:13:19 -04:00
Joao Cordeiro
6f2cf7986d samples: bluetooth: peripheral: Fix RX buffer size
GATT long messages require buffers to store multiple packets. The actual
configuration for the bluetooth peripheral sample defines only two
buffers to store these messages. As the default ATT payload size is
18 bytes, the maximum payload size for a long ATT message is 36 bytes.
As the variable `vnd_long_value[]` has a defined size of 74 bytes, it
cannot be fully modified due to the 36 bytes limitation.

Set CONFIG_BT_ATT_PREPARE_COUNT=5 so all the maximum payload size goes
to 90 bytes and all the 74 bytes can be written to `vnd_long_value[]`.

Signed-off-by: Joao Cordeiro <jvcc@cesar.org.br>
2019-06-11 12:40:43 -04:00
Andrzej Głąbek
a72f851d12 drivers: pwm_nrfx: Correct prescaler value for undivided clock
When there is no need to divide the PWM clock (i.e. the requested
period cycles fit the 15-bit PWM counter), the prescaler value
should be 0, not 1.

Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
2019-06-11 12:40:14 -04:00
Loic Poulain
f5d9f0b2af net: ethernet: Fix build issue with C++
When compiling with CPP, compiler complains about implicit type
conversions. Fix them.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2019-06-11 12:39:46 -04:00
Andrzej Głąbek
38d186a878 boards: nrf52840_pca10059: Configure NFC pins as GPIOs by default
Since there is no NFC antenna connector on the dongle and the pins
P0.09 and P0.10 that are dedicated to NFC functionality are in the
group of just a few ones available for external connections, it seems
more reasonable to configure these pins by default as regular GPIOs,
as users will most likely want to use them in this way.

Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
2019-06-11 12:39:13 -04:00
Nicolas Pitre
1b7b809f1d PTHREAD_MUTEX_DEFINE(): don't store into the _k_mutex section
The _k_mutex linker section is used to gather instances of
struct k_mutex into a list so that init_mutex_module() could iterate
that list to perform runtime initialization tasks. In this case, we're
not defining a struct k_mutex but rather a struct pthread_mutex which is
a completely different structure. Not only those struct pthread_mutex
would be corrupted with unexpected data, but since they're not the
same size as struct k_mutex, the actual struct k_mutex instances that
follow in the list would be misaligned and get corrupted too.

There is nothing that requires runtime initialization in the static
definition of a struct pthread_mutex so let's remove the section
attribute.

Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
2019-06-11 12:38:42 -04:00
Michael Scott
42b8d0c747 net: openthread: fix off-by-one error in settings offset calculation
OpenThread uses CONFIG_OT_PLAT_FLASH_PAGES_COUNT to calculate the # of
pages at the end of flash to use for storing OpenThread settings.

This calculation has an off-by-one error which sets the offset for
the storage area as 1 page of flash too low.

For example, on nRF52840:
- default setting for CONFIG_OT_PLAT_FLASH_PAGES_COUNT is 4
- flash size is 1MB (0x100000)
- flash page size is 4096 (0x1000)
- expected offset is 0xfc000

Using the current logic we get an offset of: 0xfb000

Fixes: https://github.com/zephyrproject-rtos/zephyr/issues/16339

Signed-off-by: Michael Scott <mike@foundries.io>
2019-06-11 12:38:19 -04:00
Johann Fischer
c55d817744 usb: usb_dfu: do not set bwPollTimeout dynamically
Partially revert commit ea177e785c
("usb: dfu: set bwPollTimeout dynamically")

Introduced fix does not work proper because there is no way to be
sure that a control stage had success before start erase process.
Instead IMG_ERASE_PROGRESSIVELY configuration should be used
if the erase of the flash takes longer time.

resolves: #15497

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2019-06-11 12:38:06 -04:00
Vinayak Kariappa Chettimada
9403dd3126 Bluetooth: controller: Fix Enc Setup overlap with Length Update
Fix the encryption setup queueing implementation to avoid
overlapping with local initiated Length Update Procedure.

Fixes #15733.
Relates to #15335, and #15186.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-06-11 12:37:41 -04:00
Sören Tempel
251f48682a drivers: serial: sifive: Fix UART extern interrupts
IRQ_CONNECT and irq_enable calls in the SiFive UART driver were
misconfigured when the conversion to DeviceTree support occurred.

See also: https://github.com/zephyrproject-rtos/zephyr/pull/10613

Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net>
2019-06-11 12:37:18 -04:00
Krzysztof Chruscinski
9ca3f9a967 drivers: counter: nrfx_rtc: Fix lack of interrupt when CC=0
According to documentation Compare event will not be triggered
if CC=0 and CLEAR task is set. Added handling of that situation.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-06-11 12:36:53 -04:00
Krzysztof Chruscinski
bccaa9f4b7 drivers: clock_control: nrf: Fix lfclk source settings for nrf9160
Aligned lfclk source values for nrf9160.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-06-11 12:36:21 -04:00
Vinayak Kariappa Chettimada
c1191dec2d Bluetooth: controller: Add GPIO Debug Pins for HFCLK state
Add implementation to toggle GPIO Debug pins on HFCLK
request and release by the controller.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-06-11 12:35:58 -04:00
Vinayak Kariappa Chettimada
b504992306 Bluetooth: controller: Fix XTAL advanced feature
Fix XTAL advanced feature by adding the missing
implementation to calculate and, retain or release the XTAL
clock source after a Bluetooth state or role is stopped.

Fixes #15817.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-06-11 12:35:58 -04:00
Vinayak Kariappa Chettimada
9d00571faa Bluetooth: controller: Fix pin or key missing response
Fix the missing reset of Encryption Procedure state when the
peripheral responded with error reason as pin or key missing
which otherwise caused connection disconnection on next
reception of data or control packet.

Relates to #15570.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-06-11 12:35:40 -04:00
Wentong Wu
870429de9a linker: add no-flash system support
Non-XIP system with FLASH_SIZE = 0 is no-flash system. And no-flash
system makes text, rodata, and data all in SRAM, so define the marco
ROM_ADDR to RAM_ADDR.

Fixes: #16027.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-06-11 12:35:23 -04:00
Mariusz Skamra
14a1f91d1e Bluetooth: controller: Workaround CPR procedure collision at CPU instant
This is a workaround for IOP issue, where peer rejects LLCP Slave
Connection Parameter Request with LMP Error Transaction Collision
error code even if previous request is complete at the instant.

Relates to #15366.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-06-11 12:34:55 -04:00
Georgij Cernysiov
581a8cf218 drivers: rtc: stm32: correct tm_mon conversion
tm_mon valid interval [0,11]
LL_RTC_DateTypeDef.Month valid interval [1,12]

Signed-off-by: Georgij Cernysiov <g.cernysiov@elco-automation.de>
2019-06-11 10:44:13 -04:00
Wentong Wu
7c44108677 scripts: make code relocation work for non-XIP system
on non-XIP system, loading address shouldn't be located on
FLASH memory region.

Fixes: #16090.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-06-11 10:43:41 -04:00
Wentong Wu
4d7977f31d scripts: mpu align for ro section of new memory region on non-XIP system
on non-XIP system, SRAM is the default region, and relocated .data
section and .bss section of SRAM shouldn't be inserted between
_image_rom_start and _image_rom_end, because the memory region between
_image_rom_start and _image_rom_end will construct the mpu ro region.
Also for the newly added memory region on non-XIP system, the
relocated .text secition and .rodata section should also be mpu aligned.

Fixes: #16090.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-06-11 10:43:41 -04:00
Benoit Leforestier
d01d68835e C++: Fix compilation error "invalid conversion"
When some header are included into C++ source file, this kind of
compilations errors are generated:
error: invalid conversion from 'void*'
	to 'u32_t*' {aka 'unsigned int*'} [-fpermissive]

Signed-off-by: Benoit Leforestier <benoit.leforestier@gmail.com>
2019-06-11 10:43:16 -04:00
Sebastian Bøe
c5dca7f96a cmake: DT: Add support for out-of-tree binding root directories
Just like board's can be placed in out-of-tree BOARD_ROOT's, we now
support DeviceTree sources and bindings being placed in out-of-tree
DTS_ROOT's.

This required for out-of-tree drivers that use DeviceTree.

To implement this we get rid of various user-settable CMake variables
like DTS_APP_BINDINGS, DTS_APP_INCLUDE, and instead have ZEPHYR_BASE,
APPLICATION_SOURCE_DIR and out-of-tree directories conform to using
the same DTS_ROOT concept and directory structure.

Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
2019-06-11 10:42:18 -04:00
Sebastian Bøe
6a3e7ac12c cmake: DT: Change from -Idts/common to -isystem dts/common
All DT include directories are system directories, except for
dts/common. There is no reason for dts/common to diverge, so we align
it with the other directories to be consistent.

Also, we move it closer to the other include directories.

Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
2019-06-11 10:42:18 -04:00
Marek Pieta
3e142b4fd8 Bluetooth: host: Fix bt_keys_get_addr()
Change fixes issue causing multiple keys creation for given address
and identity.

Fixes: #16478

Signed-off-by: Marek Pieta <Marek.Pieta@nordicsemi.no>
2019-06-11 10:41:29 -04:00
Ryan QIAN
6bd02e3f33 boards: arm: mimxrt1020_evk: update board dts
- update board dts file to refer to nxp_rt1020.dtsi to include sram size
fix

Signed-off-by: Ryan QIAN <jianghao.qian@nxp.com>
2019-05-27 11:32:54 -04:00
Ryan QIAN
9430a7e4e6 dts: arm: nxp: Add dtsi for RT1020
The default flexram configuration for RT1020:
  - ITCM  0x0,         64KB
  - DTCM  0x200000000, 64KB
  - OCRAM 0x20200000,  128KB

Signed-off-by: Ryan QIAN <jianghao.qian@nxp.com>
Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-05-27 11:32:54 -04:00
Alexander Wachter
5df0f30930 drivers: can: stm32: fix filter mode set
Bits are actually shifted by filter number instead of bank number.
This results in wrong mode and filter_index calculation.
Fix shifting of mode bits by using bank_number instead of filter_number.

Signed-off-by: Alexander Wachter <alexander.wachter@student.tugraz.at>
2019-05-27 11:32:29 -04:00
Carles Cufi
d7189919c5 doc: west: Backport moving the build config opts doc
Backport to 1.14 the move of the configuration options that control the
west build command to the page where the command itself is described.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-05-27 11:32:09 -04:00
Marti Bolivar
012f1c7445 scripts: flake8 cleanup for west build
Clean up coding nits to match west's style.

Signed-off-by: Marti Bolivar <marti.bolivar@nordicsemi.no>
2019-05-27 11:32:09 -04:00
Carles Cufi
203021bedb scripts: west: Run pristine.cmake directly instead of the target
When making a build folder pristine until now we were running the
'pristine' build target. The issue with that is that ninja/make or
whatever build tool is being used might decide to re-run CMake itself if
some of the dependencies have changes. This might trigger an error that
is unfriendly and unnecessary, since the user is explicitly asking for
the build folder to be wiped before starting a fresh build.
To avoid this issue restor to running directly the CMake script that the
'pristine' build target itself uses, so as to make sure that the build
folder is wiped unconditionally regardless of changes made to the tree.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-05-27 11:32:09 -04:00
Carles Cufi
0f8de841af west: build: Add new pristine cmd-line and config option
Add a new command-line and build config option, `pristine`, that the
user can pass to `west build` or set in its configuration file(s) in
order to automatically trigger a pristine build on every build or
whenever west considers it required.

The option can take the following values:

- never: Never run the target
- always: Always run the pristine target before building
- auto: Run the pristine target when required

With `auto`, the pristine target will be run when running
west with an existing build folder containing a build system and:

- Selecting a different board from the one currently in the build system
- Selecting a different application from the one currently in the build
  system

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-05-27 11:32:09 -04:00
Carles Cufi
7586e60a89 west: build: Use officially documented CMake options
The -B option has always existed but was first officially documented in
CMake 3.13.0. In that same release the -S option was introduced,
replacing the old undocumented -H. Switch to using the officially
documented options.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-05-27 11:32:09 -04:00
Greg S. Woods
fd4c012fd8 entropy: fix C++ compiler warnings
Move includes to outside of the extern "C" statements to fix C linkage
issue.
| /include/misc/util.h:53:1: error: template with C linkage
|  template < class T, size_t N >
|  ^~~~~~~~

Signed-off-by: Greg S. Woods <gwoods@lexmark.com>
2019-05-27 11:31:48 -04:00
Phil Erwin
2af72beaf5 cmake: Fix missing dependency
KOBJ_OTYPE should depend on any changes to the tool that generates it,
gen_kobject_list.py.

Signed-off-by: Phil Erwin <erwin@lexmark.com>
2019-05-27 11:31:30 -04:00
Johann Fischer
1f509d3baf boards: reel_board: enable pull-up on UART TX pin
Enable pull-up on UART TX pin to reduce power consumption.
If the board is powered by battery the SoC consumes more
power than expected.
The consumption increases because TX pin is floating
(High-Impedance state of pin B from Dual-Supply Bus Transceiver).

Similar to commit b5b728495b
("boards: reel_board: enable pull-up on UART RX pin")

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2019-05-27 11:31:11 -04:00
Sebastian Bøe
1973bfa703 cmake: Don't have users call zephyr_link_interface on mbedTLS
Libraries that use mbedTLS have been invoking
zephyr_link_interface(mbedTLS). It is not clear what the intent of
this code has been, but it is redundant with the mbedTLS build
scripts, so it can be safely removed.

In addition to being redundant, it causes problems as it introduces an
ordering dependency, with this code mbedTLS must be declared before
users of mbedTLS are declared. Since this code is redundant, this
ordering dependency is also unnecessary.

This code is believed to have been added early on by accident and
copied through cargo-cult programming since.

Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
2019-05-27 11:30:26 -04:00
Thomas Stilwell
841df9aed2 cmake: fix regex for west version check in host-tools.cmake
'west --version' output has the path to the west manifest directory.
If there is a semantic version string in this path name, it will
raise a false version check failure.

Signed-off-by: Thomas Stilwell <Thomas.Stilwell@nordicsemi.no>
2019-05-27 11:30:09 -04:00
Benjamin Valentin
01e086c007 drivers: watchdog: sam0: Check if timeout is valid
The upper limit of the timeout should not be 0.
tests/drivers/watchdog/wdt_basic_api checks for this and fails as the
driver currently only checks that the timout does not exceed the upper
bound.
This also makes it check the lower bound, so that the test passes.

Signed-off-by: Benjamin Valentin <benjamin.valentin@ml-pa.com>
2019-05-27 11:29:49 -04:00
Vinayak Kariappa Chettimada
fc67da0f5c Bluetooth: controller: Fix advanced XTAL feature regression
Fix regression by the addition of CONFIG_BT_CONN conditional
compilation that disabled the advanced clock (crystal)
oscillator management when only observer and/or advertiser
states supported in the controller build.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-05-27 11:28:48 -04:00
Alexander Mihajlovic
8b0f062ff4 posix: Fix calculation of clock base in clock_settime
Previous version calculated rt_clock_base incorrectly by subtracting
clock_gettime from the specified time. Effectively the following
formula was used.

    rt_clock_base := new_time - clock_gettime()

This is clearly incorrect when we consider what should happen if we
call clock_settime with the result of clock_gettime. It ought to be
approximately a no-op, but instead we end up zeroing the clock.

    rt_clock_base := clock_gettime() - clock_gettime() = 0

This patch fixes clock_settime by instead using k_uptime_get to
calculate rt_clock_base, like so:

    rt_clock_base := new_time - k_uptime_get()

Trying the earlier thought experiment we get:

    rt_clock_base := clock_gettime() - k_uptime_get()

Using the definition of clock_gettime this expands to:

    rt_clock_base := (rt_clock_base + k_uptime_get()) - k_uptime_get()

The two k_uptime_get() terms cancel out, leaving:

    rt_clock_base := rt_clock_base

I.e. the no-op that we expect when calling clock_settime with
the result of clock_gettime.

Note: The bug is only observable when rt_clock_base is non-zero.
So when clock_settime is called for the first time, it will appear
to work correctly since rt_clock_base is initialized to 0.

Signed-off-by: Alexander Mihajlovic <alexander.mihajlovic@endian.se>
2019-05-21 15:15:25 -04:00
Jukka Rissanen
3f09b1293c net: if: Select global IPv4 address if needed
The net_if_ipv4_select_src_addr() should return global address
in the interface if nothing else is being found.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-05-21 15:14:40 -04:00
Jukka Rissanen
2d05e7ab3f net: ipv4: Send multicast ICMPv4 reply with correct src address
If we receive a multicast ICMPv4 packet, then send the reply back
with correct source address and not with multicast address.

Fixes #16257

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-05-21 15:14:40 -04:00
Tomasz Bursztyka
eee12033e7 net/iface: Add a function to get IPv4 global address
As for IPv6, let's create the same function on IPv4 side.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-05-21 15:14:40 -04:00
Tomasz Bursztyka
cd8ccef8e4 net/iface: Modify function to get IPv6 global address
Let's filter out on a state parameter.

There is no impact as this function is not used anywhere yet.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-05-21 15:14:40 -04:00
Jukka Rissanen
ed6dc0ef13 net: ipv4: Allow UDP packets with broadcast dst address
Make sure we are able to receive UDP packets with broadcast
destination address. If CONFIG_NET_IPV4_ACCEPT_ZERO_BROADCAST
is set, then check here also non-standard broadcast address
that is described in RFC 1122 chapter 3.3.6.

Fixes #11617

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-05-21 15:13:36 -04:00
Wentong Wu
7526dab2d5 tests: kernel: increase stack buffer when code coverage enabled
increase stack buffer when code coverage enabled.

Fixes: #15794.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-05-21 15:13:04 -04:00
Wentong Wu
c73cf83d85 arch: arm: switching stack pointer with assembly code
With -O0 optimizion, gcc compiler doesn't inline "static inline"
marked function. So when function call return from function
set_and_switch_to_psp which is to switch sp from MSP to PSP, the
ending "mov sp, r7" instruction will overwrite the just updated
sp value(PSP) with the beginning stack pointer(should be MSP)
stored in r7 register, so the switch doesn't happen. And it causes
unpredictable problems in the initialization process, the backward
analysis for this problem can be found on Github issue #15794.

Fixes: #15794.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-05-21 15:13:04 -04:00
Andrew Boie
26357e8e99 kernel: fix k_stack_alloc_init()
k_stack_alloc_init() was creating a buffer that was 4 times
too small to support the requested number of entries, since
each entry in a k_stack is a u32_t.

Fixes: #15911

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-21 10:19:36 -04:00
Armando Visconti
6fe0f2a14a drivers/i2s_ll_stm32.c: (FIX) Avoid warning in LOG_ERR
The LL_I2S_ReadReg() function returns uint32_t, while %d requires
'int' as a type.

Signed-off-by: Armando Visconti <armando.visconti@st.com>
2019-05-21 10:19:10 -04:00
Jukka Rissanen
c90b6332dc samples: net: dumb_http_server: Check EOF while skipping headers
If recv() returns 0 bytes, then terminate the connection.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-05-21 10:18:30 -04:00
Jukka Rissanen
fdde0b06cf samples: net: dumb_http_server: Add net_pkt.h file inclusion
The function net_pkt_get_info() is found in net_pkt.h and not
in buf.h. This caused
"implicit declaration of function ‘net_pkt_get_info’"
warning if CONFIG_NET_BUF_POOL_USAGE was enabled.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-05-21 10:18:30 -04:00
Marcin Szymczyk
550e3165aa usb: add zero-length packet after MPS-sized IN transaction
Send ZLP when host asks for a bigger length and the last chunk
is wMaxPacketSize long, to indicate the last packet.

Signed-off-by: Marcin Szymczyk <Marcin.Szymczyk@nordicsemi.no>
2019-05-21 10:18:06 -04:00
Wayne Ren
a4cc1f0fdc boards: iotdk: add mpu and fpu configuration
* iotdk supports fpu and mpu
* iotdk supports fast irq
* a fix in device tree

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-05-21 10:17:43 -04:00
Andrew Boie
85348add23 kernel: adjust default main stack for riscv
We are just at the knife edge with 512, with stack
overflows being observed with stack canaries enabled.
Given the special case for the idle thread stack size
on this arch, seems reasonable to increase it here
for that arch.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:54:29 -04:00
Andrew Boie
f8be489b2e tests: stackprot: don't set main stack size
This test uses ztest anyway, the default should be fine
just like any other test running under ztest.

k_thread_create() uses a lot of stack, and the main
stack size is very small if ztest is enabled. Do it in
another ztest task instead.

We don't need to mess with the main thread's priority,
just have the alt thread run cooperatively.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:54:29 -04:00
Andrew Boie
8812c7fd08 tests: timer_api: run in user mode
We didn't have any coverage of the timer APIs in user
mode.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:54:04 -04:00
Patrik Flykt
6cbdf40036 net/ip/dhcpv4: Set source IP address in DHCP Request
The source address in unicast DHCPv4 Request packets was found out
to be all zeros address 0.0.0.0. This address is only acceptable if
the destination is a multicast one, where the host in question is
acquiring a DHCP address lease. This is true for the DHCP Discover
and the initial DHCP Request message from the client towards the
server. As subsequent DHCP Request renewal messages are sent as
unicast to the server, the server will drop such packets.

Fix this issue by explicitely specifying what source IP address is
to be used, if none is specified, the all zeros address 0.0.0.0 is
used in multicast addresses. The source address in the other
unicast cases is identical to the 'ciaddr' in the DHCP message.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-05-08 14:53:44 -04:00
Andrew Boie
16a74a2fed testsuite: fix memory access
Depending on optimization level, the TC_RESULT_STR[]
array could actually be placed in memory instead of
being expanded at compile time, resulting in memory
access errors from user mode.

Just replace TC_RESULT_TO_STR() with an inline function
containing a switch statement instead.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:53:28 -04:00
Andrew Boie
c297c82039 kernel: increase workq sizes if COVERAGE=y
The defaults are too small if coverage is enabled.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:53:06 -04:00
Andrew Boie
1c5fa377a1 lib: cmsis_v1: set stack size larger if coverage
Use some large value, coverage targets have lots of RAM.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:52:42 -04:00
Andrew Boie
19b96e997e tests: cmsis_v1: properly set stack size
There are limits to CMSIS stack sizes, we can't just
add a number to it. Use the configured maximum.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:52:42 -04:00
Andrew Boie
28ae163885 lib: cmsis_v2: increase stack sizes if coverage
Set to 4096, coverage targets have lots of RAM.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:52:42 -04:00
Andrew Boie
b8c44c2ada lib: cmsis_v2: set default dynamic stack size
Set to same default as regular stacks. This doesn't use
any extra memory until CMSIS_V2_THREAD_DYNAMIC_MAX_COUNT
is set. 0 is not a valid default if that is set.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:52:42 -04:00
Andrew Boie
41b07b1d86 tests: cmsis_v2: don't hard-code stack sizes
Just use the configured value.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:52:42 -04:00
Marek Pieta
88b82c8152 bluetooth: Fix bt_conn->id handling
Fixed bt_conn->id handling in bt_conn_create_slave_le function.

Fixes: #15698

Signed-off-by: Marek Pieta <Marek.Pieta@nordicsemi.no>
2019-05-08 14:52:05 -04:00
Andrew Boie
6bd361409e tests: pipe: fix error with optimization disabled
The various struct pipe_sequence were not located in memory
accessible to user mode. With optimization turned on, they
weren't in memory at all, but with code coverage enabled
the arrays were actually being read, resulting in memory
access failures from user mode.

Fix them by placing in ROM, they never get modified.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:51:12 -04:00
Andrew Boie
12d6aa8b44 newlib: fix user mode calls to _sbrk
Depending on configuration, this value could end up as
a variable and not an array symbol, causing a crash if
newlib decides to call _sbrk on behalf of a user thread,
which needs to perform arithmetic on it.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-08 14:50:52 -04:00
Armando Visconti
2ddf341e40 boards: 96b_argonkey: upgrade documentation using official info
The 96Boards Argonkey mezzanine board has been officially
published on ST website:

  https://www.st.com/en/evaluation-tools/steval-mki187v1.html

Update documentation with official picture and website info.

Signed-off-by: Armando Visconti <armando.visconti@st.com>
2019-05-08 14:50:25 -04:00
Marcin Szymczyk
d4163bc17e cmake: fix support for out of tree shields
After the rework in #12403, specifying a shield which has overlay
out of the tree causes unnecessary inclusions of overlays.
For every board root, overlays that have same index as
expected overlay are being included.
Fix this by removing already included overlays from SHIELD list.

Signed-off-by: Marcin Szymczyk <Marcin.Szymczyk@nordicsemi.no>
2019-05-07 16:58:12 -04:00
Loic Poulain
14fe45898f ext: mcux: csi: Fix wrong circular queue delta calculation
This error causes various instabilities during capture.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2019-05-07 16:57:46 -04:00
Josef Gajdusek
f1b0df08e9 drivers: usb_dc_stm32: Reinitialize the write semaphores on bus reset
If the user attempts to send data before the USB connection is
established (see the HID sample for an example of such code), the
DataInCallback never gets called which leaves the write semaphore in a
taken state forever.

Signed-off-by: Josef Gajdusek <atx@atx.name>
2019-05-07 16:57:24 -04:00
Josef Gajdusek
cea42e3554 drivers: usb_dc_stm32: Make pin remapping part of the device tree
The SYSCFG_CFGR1_PA11_PA12_RMP define is present even on packages where
the remap isn't strictly required. This commit makes the remap optional
based on a DT property.

Also fixes syntax error caused by a missing );.

Signed-off-by: Josef Gajdusek <atx@atx.name>
2019-05-07 16:57:24 -04:00
Derek Hageman
e2d715b319 soc: sam0: Fix SAMD20 IRQ assignments
SAMD20 does not have the DMA or USB peripherals and as a result
the IRQs for all subsequent lines are shifted down from SAMD21.
This splits the interrupt assignment for the SERCOMs into the
SoC specific DTS file and moves the USB definition to SAMD21 only.

Signed-off-by: Derek Hageman <hageman@inthat.cloud>
2019-05-07 16:57:01 -04:00
Tobias Aschenbrenner
eb4fa6f000 fix: kw41z: Use correct mapping for dBm
The radio API expects the setting of the TX-power in dBm. The actual
TX-power is however set by a 6bit register, which mapping between
register value and power in dBm is a lookup-table in the datasheet.

This mapping for the kw41z was off, which not only lead to incorrect
output power, but also to a maximal output power of only -1.9 dBm
instead of the possible +3.5 dBm.

Signed-off-by: Tobias Aschenbrenner <tobias.aschenbrenner@blik.io>
Signed-off-by: Franco Saworski <f.saworski@posteo.de>
2019-05-07 16:56:08 -04:00
Bradley Bolen
a64cdc8388 cmake: Fix missing dependency
DRV_VALIDATION should depend on any changes to the tool that generates
it, gen_kobject_list.py.

Signed-off-by: Bradley Bolen <bbolen@lexmark.com>
2019-05-07 16:55:26 -04:00
Georgij Cernysiov
56481d9edd drivers: counter: stm32: fix LSE clock source for not F4 SoC
Fixes the STM32 counter driver when LSE is the clock source
and SoC is not F4.

Signed-off-by: Georgij Cernysiov <g.cernysiov@elco-automation.de>
2019-05-07 16:54:54 -04:00
Benjamin Valentin
8bf9538caf usb: sam0: Implement missing API functions
This implements three API functions that are required for
tests/subsys/usb/device to build:

 - usb_dc_ep_disable()
 - usb_dc_ep_halt()
 - usb_dc_ep_flush()

While halt and disable are trivial, flush is just a stub for now.

Signed-off-by: Benjamin Valentin <benpicco@googlemail.com>
2019-05-07 16:54:19 -04:00
Benjamin Valentin
756ae3d542 usb: sam0: Ensure API arguments are valid
Make sure the parameters for the API functions are valid, return error
otherwise.

This is expected by the tests/subsys/usb/device test case.

Signed-off-by: Benjamin Valentin <benpicco@googlemail.com>
2019-05-07 16:54:19 -04:00
Kwon Tae-young
fb5bde6f70 boards: stm32f4_disco: Fix yaml ram size
Total RAM is 192, including 64K CCM.

Signed-off-by: Kwon Tae-young <tykwon@m2i.co.kr>
2019-05-07 16:53:36 -04:00
Sören Tempel
6993ee3cbf net: slip: fix compilation without NET_L2_ETHERNET
For example it should be possible to compile and use the SLIP module
with NET_L2_DUMMY. This required the following changes:

* Fix a typo in the initializer for struct dummy_api
* Only define eth_capabilities if CONFIG_NET_L2_ETHERNET is defined to
  silence a -Wunused-function compiler warning
* Unconditionally include net/dummy.h

Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net>
2019-05-07 16:50:34 -04:00
Sören Tempel
8d72bbdc79 net: slip: allow compilation without CONFIG_NET_LLDP
Without this change compilation of the SLIP module would fail if LLDP
wasn't enabled. There is also no need to include net/lldp.h explicitly
as net/ethernet.h will include it conditionally if CONFIG_NET_LLDP is
defined.

Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net>
2019-05-07 16:50:34 -04:00
Sören Tempel
a4afa13a7a soc/riscv32-fe310: add label for uart1
Without this label cmake fails when attempting to enable this uart.

Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net>
2019-05-07 16:50:18 -04:00
ling wei
93558f2fb9 net: trickle: Re-init trickle timer for multiple triggerings
We need to re-initialize the trickle->timer delayed work to use
trickle_timeout() if there are multiple triggerings.

Fixes #15606

Signed-off-by: ling wei <lingwei@cisco.com>
2019-05-07 16:49:50 -04:00
Bub Wei
23b54e42c3 samples: net: zperf: Add __packed for zperf_udp_datagram
UDP packet from net is not 4-byte aligned.
So we have to add __packed for zperf_udp_datagram.

Fixes #15605.

Signed-off-by: Bub Wei <bub.wei@unisoc.com>
2019-05-07 16:49:28 -04:00
Henrik Brix Andersen
ee9d7a960b gpio: rv32m1: enable GPIO port clocks
Enable the clock for GPIO ports on the RV32M1 SoC before attempting to
access the port controller registers.

Fixes: #15339

Signed-off-by: Henrik Brix Andersen <henrik@brixandersen.dk>
2019-05-07 16:49:10 -04:00
Tomasz Gorochowik
a68fd9c733 libc: minimal: fix realloc function
Excerpt from the manual:

  If ptr is NULL, then the call is equivalent to malloc(size) [...]

Without this commit, such calls end with a BUS FAULT.

Signed-off-by: Tomasz Gorochowik <tgorochowik@antmicro.com>
2019-05-07 16:48:51 -04:00
David B. Kinder
ed47cf92cb doc: fix watchdog API documentation
There was a stray close group comment @} that was causing a large chunk
of the watchdoc API documentation to be missing.

Fixes: #15678

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2019-05-07 16:48:28 -04:00
Krzysztof Chruscinski
25b00e8b6d lib: os: ring_buffer: Fix C++ compilation warning
Fix warning when header file is included by C++ source file.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-05-07 16:48:06 -04:00
Krzysztof Chruscinski
1a9ef5ef4a logging: Allow logger usage in C++ files
Allow usage of LOG_MODULE_REGISTER and LOG_MODULE_DECLARE in
C++.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-05-07 16:48:06 -04:00
Andrew Boie
349cc71d63 arc: arm: fix support for MPUs on non-XIP systems
The size of the ROM region is now rounded up to the
nearest power of two; we no longer assume that RAM
is in a different part of memory.

Fixes: #15558

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-05-07 16:47:18 -04:00
Patrik Flykt
bdcc09ff2c net: ethernet: Send sender IP address in ARP announce packets
In addition to checking that the ARP entry does not exist as the
implementation is done currently, also check if the ARP packet
is due to IPv4 link local address configuration. In both cases
use the provided IPv4 address instead of the one set for the
interface.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-05-07 16:46:57 -04:00
Patrik Flykt
c6325a66ca net: ethernet: Set NET_ETH_PTYPE_ARP for IPv4 link local packet type
IPv4 link local uses ARP to detect conflicting addresses. Properly
set the ethernet packet type to NET_ETH_PTYPE_ARP when probing
for address duplicates.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-05-07 16:46:57 -04:00
Pawel Dunaj
29c3fe5d77 bluetooth: host: Unref conn on direct adv start error
Unref conn when direct adv start exits with an error.

Signed-off-by: Pawel Dunaj <pawel.dunaj@nordicsemi.no>
2019-05-07 16:46:35 -04:00
Pawel Dunaj
82f176311d bluetooth: host: Use correct identity when direct advertising
When starting direct advertising use correct identity during
connection lookup.

Signed-off-by: Pawel Dunaj <pawel.dunaj@nordicsemi.no>
2019-05-07 16:46:35 -04:00
Johan Hedberg
1b099c3e13 Bluetooth: Mesh: Fix postponing storage deadline indefinitely
If the local node keeps getting bombarded with messages, it's possible
that the storage timer gets rescheduled over and over again and never
expires. Add the necessary code to only reschedule the timer if the
new deadline is earlier than an existing one.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-05-07 16:46:06 -04:00
Johan Hedberg
9132dcc697 Bluetooth: Mesh: Fix RPL storage timeout handling
The default values for the timeouts, as well as non-defaults in most
Mesh samples, use a higher value for the RPL than then generic mesh
storage timeout. This hasn't had any effect in practice since the code
only uses the RPL timeout if it is *smaller* than the generic one.

The original intention of the code was to use the RPL timeout,
regardless of what the generic one is, whenever the RPL is the only
thing that needs updating. Add some helper macros to track the various
groups of pending flags, and perform the appropriate checks to apply
the RPL timeout whenever it's smaller than the generic timeout, or if
there are no other items to store besides the RPL.

Fixes #15904

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-05-07 16:46:06 -04:00
Anas Nashif
d8236589e9 ci: only build on specified branches
Do not start CI on random branches created in the tree.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-17 08:57:40 -05:00
Brett Witherspoon
247330d62a net: fix errno returned without promiscuous mode support
If promiscuous mode support is disabled in Kconfig and promiscuous.h is
included the build will fail. The returned errno should be ENOTSUP.

Signed-off-by: Brett Witherspoon <spoonb@cdspooner.com>
2019-04-17 08:35:18 -05:00
Kumar Gala
cebe11544e release: Zephyr 1.14.0
Bump version to 1.14.0 final.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-04-16 15:50:24 -05:00
Kumar Gala
cdf55d813b doc: changes for 1.14 documentaiton release
Doc changes listed in the release checklist (#9898)

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-04-16 14:48:23 -05:00
Wayne Ren
0e4d4fa67f include/linker: .object_access.* should be in ROM
.object_access.* sections should be with

GROUP_LINK_IN(ROMABLE_REGION) as other sections in
common-rom.ld

Fixes #15481

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-16 13:32:20 -05:00
Kumar Gala
db8d32881f doc: releases: Add device tree related changes
Add items on major changes related to device tree usage in this release.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-04-16 12:38:59 -05:00
Peter A. Bigot
db365c43c0 boards: arm: particle_*: default-enable SPI_2 when SPI enabled
SPI is not normally enabled, but some tests assume that there's a device
available.  Conditionally enable SPI_2 which is associated with the
on-board flash.

Closes #15374

Signed-off-by: Peter A. Bigot <pab@pabigot.com>
2019-04-16 12:37:44 -05:00
Marek Pieta
51b45f0df6 bluetooth: conn: Fix bt_gatt_connected call
bt_gatt_connected should be only called, when there is no
connection error. Change fixes problem with receiving notifications
before connection.

Signed-off-by: Marek Pieta <Marek.Pieta@nordicsemi.no>
2019-04-16 17:43:55 +02:00
Johann Fischer
bf71aee8e4 samples: cdc_acm: add config overlay for cdc_acm+dfu
Add config overlay for cdc_acm+dfu composite configuration.
Manual configuration over menuconfig may be error-prone for
the user because then FLASH_LOAD_OFFSET and FLASH_LOAD_SIZE
should also to be set to appropriate values.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2019-04-16 08:55:51 -04:00
Johann Fischer
a05ef2559d usb: dfu: set bwPollTimeout dynamically
Set bwPollTimeout for DFU_GETSTATUS request dynamically.
For now, adjust bwPollTimeout only during DNLOAD stage.

Fixes: #8734

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2019-04-16 08:55:51 -04:00
Kumar Gala
5307858e4e boards: arm: drop counter from board yaml
Remove 'counter' as a supported feature on several NRF boards as these
boards fail to build tests/drivers/counter/counter_basic_api.  This is
due to the fact that we either need explicit board conf files for the
test or have the counter driver enabled via Kconfig.

Fixes #15460

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-04-15 20:53:17 -04:00
Kumar Gala
a3fd36d778 tests: counter: counter_basic_api: exclude nucleo_f302r8
Exclude nucleo_f302r8 platform as the tests doesn't fit in flash size.
This is due to that fact that we pull in newlib for the STM32 counter
driver.

Fixes #15460

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-04-15 20:53:17 -04:00
Charles E. Youse
468df5390e soc/x86/apollo_lake: strip leading zeros from decimal constants
Remove leading zeros from decimal constants, because long live octal.

Fixes: #15463

Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-04-15 20:42:42 -04:00
Ioannis Glaropoulos
4a1ebfa049 drivers: timer: SysTick: revert clearing pending events
Clearing the pending IRQs when resetting the timeout fixes the
forward time drifting, but the change needs more investigation
until we are sure this won't break kernel time management.
Reverting the change to get 1.14 release out.

This reverts commit 2895da02a4.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-15 20:37:44 -04:00
Maureen Helm
34f3837896 arch: arm: mpu: Lock irqs while reprogramming the nxp mpu
The nxp mpu uses the logical OR of access permissions when multiple
region descriptors apply to a given memory access. This means that we
must partition the sram into two non-overlapping regions to implement
the mpu stack guard. This partitioning gets reconfigured at every
context switch, and if an interrupt occurs during this time, it can
cause a fault because we do not have a valid mpu region descriptor for
the sram.

This scenario was observed on frdm_k64f in tests/posix/common before
commit 2895da02a4, which changed timing.
In this case, we couldn't even print fault information to the console
and the hardware would reset. It looked a lot like a watchdog reset,
unless you attached a debugger to see the fault.

A similar problem was fixed in commit
ec424b7a45, but this change temporarily
disabled the mpu.

Fix both cases by locking interrupts during the critical sections, as
this is more secure than disabling the mpu.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-04-15 20:37:27 -04:00
Anas Nashif
a94f2b0b12 release: update footprint data
Update footprint data for 1.14 release.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-15 20:31:52 -04:00
David B. Kinder
7848215334 doc: review edits on 1.14 release notes
Clean up accumulated release notes with (final) clarity edits, spell
check, and such.  Remove "Working Draft" from the heading.

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2019-04-15 18:13:07 -04:00
Anas Nashif
c0abb410ce release: add more highlights from the kernel
Update with more kernel highlights.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-15 14:02:22 -04:00
Andy Ross
c5b2aad94f doc: More kernel release notes for 1.14
Add notes on timer, SMP and x86_64

Signed-off-by: Andy Ross <andy@ajross-mobl.jf.intel.com>
2019-04-15 12:52:38 -04:00
Anas Nashif
802098dca3 release: add list of fixed bugs
Add list of fixed bugs to release notes.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-15 11:14:38 -04:00
Paweł Zadrożniak
b2a3e12d86 drivers: usb: nordic: Do not log an error if HFCLK is busy
HFCLK may be requested for multiple modules, i.e. Bluetooth stack.
When any other module has requested HFCLK to run, the driver will
return -EBUSY on free attempt which is not an error - thie means
that free request has been processed, but someone else is still
requiring the clock to run. When all clock users free the clock,
it may be disabled.

Related issue: #15145

Signed-off-by: Paweł Zadrożniak <pawel.zadrozniak@nordicsemi.no>
2019-04-15 11:10:19 +02:00
Anas Nashif
06ab394f05 release: rework release notes, add highlights
Reformat notes and add highlights.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-14 17:08:54 -04:00
Torsten Rasmussen
10327e59c6 doc: Add to 1.14 release notes zephyr modules
Added information to release notes about Zephyr modules which allow for
splitting ext/ into multi-repo instead using Zephyr modules.

Signed-off-by: Torsten Rasmussen <torsten.rasmussen@nordicsemi.no>
2019-04-13 08:45:04 -04:00
Flavio Ceolin
d1176d1789 doc: relnotes: add notes about MISRA-C
Update release notes with MISRA-C info.

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-04-13 08:00:19 -04:00
Andrew Boie
5d6aaeb88b doc: relnotes: add notes for x86 and userspace
Update release notes for changes in 1.14.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-13 07:59:53 -04:00
Bradley Bolen
54472ea054 syscall: Fix comment
The macros that generate the handler and implementation functions
changed the generated names.  Fix the comments to match.

Signed-off-by: Bradley Bolen <bbolen@lexmark.com>
2019-04-12 17:59:25 -04:00
Daniel Leung
7fe29dcee9 soc: intel_s1000: change cached regions to write-through
The i2s_cavs.c driver manipulates cache lines before commencing
any DMA transfers. With write-back cache, if the DMA receive
buffer is not aligned to the cache lines, the data around
the buffer will be invalidated and may never written to memory.
Since the driver takes an external memory slab as buffer and
there is no easy way to force cache line alignment on
the application side, set the cached region to write-through
to avoid potential issue.

Fixes #13223

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-04-12 17:59:06 -04:00
Sebastian Bøe
c15545d4d4 doc: relnotes: 1.14 Build and Infrastructure release notes
Add more release notes for the build system for version 1.14.

Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
2019-04-12 17:58:18 -04:00
Ioannis Glaropoulos
7f478a5d29 doc: guides: porting: fix nRF51 Cortex-m core
nRF51xx SoCs have an ARM Cortex-M0 core, not an ARM Cortex-M0+.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-12 10:28:02 -05:00
Robert Lubos
a886a28450 doc: relnotes: 1.14 nrf 802.15.4 radio driver update
nRF 802.15.4 radio driver was updated, hence mention it in release
notes.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2019-04-12 10:08:05 -04:00
Wentong Wu
8646a8e4f5 tests/kernel/mem_protect/stackprot: stack size adjust
revert commit 3e255e968 which is to adjust stack size
on qemu_x86 platform for coverage test, but break other
platform's CI test.

Fixes: #15379.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-04-12 10:06:43 -04:00
David B. Kinder
f38aa2e301 doc: improve visibility of doc version menu
Move the doc version selection menu from the bottom of the left nav menu
to above the TOC menu, making it more obvious.

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2019-04-12 09:37:15 -04:00
Krzysztof Chruscinski
f35b854345 logging: Fix RTT backend drop mode and coverity issue
Drop mode in RTT backend was broken. It is not the default
one so most likely it was unnoticed for a long time. Fixed
to report drop message when logs are lost.

Additionally, added assert to ensure that memmove does not
do memory overwrite.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-04-12 08:38:16 -04:00
Robert Lubos
9411abbc00 shell: telnet: Fix coverity issues
Fix coverity issue 197618, reporting unhandled return values.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2019-04-12 08:35:19 -04:00
Andrzej Głąbek
4438c1a5fe doc: relnotes: 1.14 add a few more drivers related release notes
Add more drivers related release notes for version 1.14.

Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
2019-04-12 08:29:06 -04:00
Ulf Magnusson
4f920df29a scripts: Remove checkconfig.py
This is an old script for finding references to undefined Kconfig
symbols that assumes Kconfiglib 1 (an older API).

There's now a different check for references to undefined symbols (see
commit 1d0834b35f ("checks: kconfig: Check for references to undefined
Kconfig symbols") in the ci-tools repo).

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-04-12 08:28:03 -04:00
Anas Nashif
a942fcc23e doc: release notes cleanup
Added ARC related changed and cleaned up bullets.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-11 23:57:12 -04:00
Vijay Kumar B
a69cb036c4 ethernet: eth_stellaris: data_len should not include header size
As part of the ll_reserve refactoring effort, the packet length now
includes header size as well. Before the refactor, when the packet
length was written to the device, it did not include the header size,
which is the required value as per the LM3S6965 datasheet. After the
refactor the packet length includes the header size as well. The
header size has to subtracted from the packet length before writing to
the device. Fixes #13943.

Signed-off-by: Vijay Kumar B <vijaykumar@zilogic.com>
2019-04-11 18:04:05 -04:00
Jukka Rissanen
1897896e97 net: sockets: Make sure that getaddrinfo() cannot hang forever
If for some reason the DNS resolver callback is not called properly
then make sure that semaphore will not block forever.

Fixes #15197

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-04-11 18:01:08 -04:00
Wentong Wu
22c9646b97 tests: adjust stack size for mps2_an385's coverage test
for SDK 0.10.0, it consumes more stack size when coverage
enabled, so adjust stack size to fix stack overflow issue.

Fixes: #15206.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-04-11 17:59:39 -04:00
Wentong Wu
3e255e968a tests: adjust stack size for qemu_x86's coverage test
for SDK 0.10.0, it consumes more stack size when coverage
enabled, so adjust stack size to fix stack overflow issue.

Fixes: #15206.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-04-11 17:59:39 -04:00
Krzysztof Chruscinski
aa9f0ec2fa doc: relnotes: 1.14 logging, shell, ring_buf and drivers release notes
Added release notes for 1.14 release.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-11 17:51:21 -04:00
Maureen Helm
dd7ccd590d doc: releases: Add drivers to 1.14 release notes
Adds new and significantly modified drivers to the 1.14 release notes.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-04-11 17:49:40 -04:00
Maureen Helm
720ce48e2f doc: releases: Add Arm, RISC-V, and shield boards to 1.14 release notes
Adds all the new Arm, RISC-V, and shield boards to the 1.14 release
notes.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-04-11 17:49:40 -04:00
Johan Hedberg
42d330406e Bluetooth: Mesh: Fix qualification test MESH/SR/HM/CFS/BV-02-C
The commit 8d0ef1eb85 attempted to fix
test case MESH/SR/HM/CFS/BV-02-C, however inadvertently ended up
introducing a hidden bug. This bug was unearthed thanks to commit
686f5c79cf. We have to keep always track
of the FastPeriodDivisor state whether we're using it (faults > 0) or
not (faults == 0). Introduce a boolean field to the model publication
that's used to indicate whether the FastPeriodDivisor should be
applied or not, instead of zeroing the divisor when there are no
faults (this would cause wrong behavior when faults appear again).

Additionally, the PTS seems to require that we wait until the end of
the existing period before sending the next Health Current Status,
rather than sending it immediately when the fault count changes.

Fixes #15365

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-11 21:24:55 +03:00
Ioannis Glaropoulos
2895da02a4 drivers: timer: systick: clear pending events when resetting timeout
In the unlucky scenario of a SysTick event (wrap) occurring
while we re-program the last_load value, the SysTick ISR
will run immediately after we unlock interrupts. In that
case the timeout we have just configured will expire
instantaneously, leading to operations being executed
much earlier than expected. Avoid this by clearing possibly
pending SysTick exceptions (writing 1 to ICSR.PENDSTCLR).

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-11 13:50:41 -04:00
Ioannis Glaropoulos
a0a861bfd7 drivers: timer: systick: fix off-by-one setting in tickless mode
When the counter reaches zero, it reloads the value in
SYST_RVR on the next clock edge. This means that if the
LOAD value is N, the interrupt ("tick") is triggered
every N+1 cycles. Therefore, when we operate in tickless
mode, and we want to schedule the next timeout, we need
to configure the LOAD value with last_load - 1, in order
to get an event in last_load cycles.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-11 13:50:41 -04:00
Ioannis Glaropoulos
b1b4ec126d drivers: timer: systick: fix off-by-one setting
When the counter reaches zero, it reloads the value in
SYST_RVR on the next clock edge. This means that if the
LOAD value is N, the interrupt ("tick") is triggered
every N+1 cycles. Therefore, when we operate in non-
tickless mode, we need to configure the LOAD value
with CYC_PER_TICK - 1, in order to get an event
every CYC_PER_TICK cycles.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-11 13:50:41 -04:00
Ioannis Glaropoulos
04ef68b85a CODEOWNERS: Adding missing code owner for Cortex-M SysTick driver
Adding code-owner for the ARM Cortex-M SysTick-based
timer driver.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-11 13:50:41 -04:00
Johann Fischer
d2c6869e30 drivers: usb: check maximum packet size
Check maximum packet size (MPS) of an endpoint in usb_dc_kinetis
and usb_dc_native_posix drivers.

resolves #14957
resolves #14954

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2019-04-11 13:35:24 -04:00
Johann Fischer
65fd5859a4 include: usb: add FS MPS for different endpoint types
Add full speed maximum packet size for different endpoint types.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2019-04-11 13:35:24 -04:00
Johann Fischer
c13e201b18 usb: replace MAX_PACKET_SIZE0 with meaningful USB_MAX_CTRL_MPS
Replace MAX_PACKET_SIZE0 with meaningful USB_MAX_CTRL_MPS.

Signed-off-by: Johann Fischer <j.fischer@phytec.de>
2019-04-11 13:35:24 -04:00
Andrei Emeltchenko
5b74fb4f23 usb: usb_dc_kinetis: Fix endpoint index check
Fix check for maximum endpoint index.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-11 13:35:24 -04:00
Andrei Emeltchenko
40774007c3 usb: usb_dc_kinetis: Fix access wrong memory
Add appropriate check.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-11 13:35:24 -04:00
Andrei Emeltchenko
08f53a435c usb: usb_dc_kinetis: Fix setting address for not attached device
Add appropriate check.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-11 13:35:24 -04:00
Andrei Emeltchenko
4c9ea1e370 usb: netusb: ecm: Enable netusb for the right iface/alt_set
Only enable netusb for the right configuration of interface and
alt_setting.

Fixes #13560

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-11 13:35:24 -04:00
Andrei Emeltchenko
1a1c518c25 usb: device: Change iface set callback parameters
Include to the callback parameters also alt_setting to be able to make
right choice for ECM.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-11 13:35:24 -04:00
Vinayak Kariappa Chettimada
fff35bd682 Bluetooth: controller: Fix encryption setup to be queueable
Fix the controller implementation to make start encryption
queueable if there is any control procedure in progress.

The context related to encryption procedure is now shared so
that it will be used after the ongoing procedure completes.

The fix here maintains the old functionality of serializing
the queued data and LL Encryption Request PDU, so that data
queued before start encryption is acknowledged.

Fixes #15012.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-04-11 13:22:02 -04:00
Vinayak Kariappa Chettimada
e81acd8c3f Bluetooth: controller: Revert set encryption procedure pending
This reverts commit 0cf82cdd31.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-04-11 13:22:02 -04:00
Ravi kumar Veeramally
189b22789c net: vlan: Etherent layer missed L2 header
When VLAN is enabled, ethernet l2 layer fills ethernet header
but not added to the network buffer.

Fixes #15346

Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2019-04-11 13:20:40 -04:00
Johan Hedberg
44bfefce14 doc: relnotes: 1.14 Bluetooth Host release notes
Add major changes for Bluetooth Host since 1.13.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-11 10:40:57 -04:00
Carles Cufi
d3f56d60dc doc: relnotes: 1.14 Bluetooth Controller release notes
Add the relevant release notes for the Bluetooth Controller for version
1.14.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-04-11 10:40:57 -04:00
Ioannis Glaropoulos
7886d50f2c doc: relnotes: 1.14 arm arch release notes
Release notes entries for ARM architecture.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-11 10:40:31 -04:00
Ioannis Glaropoulos
3e61917254 doc: relnotes: 1.14 arm SoC/Boards release notes
Release notes entries for ARM SoC and Board support.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-11 10:40:31 -04:00
Andrei Emeltchenko
fa5d9d20ec quark_se_c1000_devboard: Fix broken DTS configuration
Fixes broken CC2520 on quark_se_c1000_devboard configuration after
commit 25d17db.

Fixes #15070

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-11 10:39:21 -04:00
Andrzej Puzdrowski
e015661b94 doc: relnotes: 1.14 update documentation improvement patagtaph
Update the relevant release notes for the documentation improvement
for version 1.14.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-04-11 10:38:45 -04:00
Andrzej Puzdrowski
b607d48031 doc: relnotes: 1.14 nRF5 flash driver release notes
Add the relevant release notes for the nRF flash driver for version
1.14.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-04-11 10:38:45 -04:00
Andrzej Puzdrowski
480c5d00f2 doc: relnotes: 1.14 settings release notes
Add the relevant release notes for the settings for version
1.14.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-04-11 10:38:45 -04:00
Andrzej Puzdrowski
5e52d3a11d doc: relnotes: 1.14 flash_map release notes
Add the relevant release notes for the flash_map for version
1.14.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-04-11 10:38:45 -04:00
Carles Cufi
14c75705cb samples: hci_uart: Reduce MAX_CONN to 16 for the micro:bit
In order to fit in SRAM, reduce the CONFIG_BT_MAX_CONN from 20 to 16 in
the configuration used for the BBC micro:bit.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-04-11 14:54:37 +02:00
Carles Cufi
bae9f1967b samples: Bluetooth: hci_uart: Implement NOP Command Complete
Implement the Controller counterpart to CONFIG_BT_WAIT_NOP so that it
issues a NOP Command Complete event after booting up, to signal to the
Host that it is ready to receive HCI traffic.

Fixes #15333

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-04-11 14:54:37 +02:00
David B. Kinder
9fff548c88 doc: add orphaned crypto docs
tinycrypt documentation wasn't included in the table of contents so add
it into the guides section.

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2019-04-11 08:08:28 -04:00
Luiz Augusto von Dentz
f2a34a6106 Bluetooth: GATT: Fix not clearing Client Features
When a device is considered unpaired any configuration set in Client
Features shall also be removed.

Fixes #15329

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-04-11 12:04:53 +03:00
Jim Paris
510a6dc5e4 drivers: flash: spi_nor.c: fix typo
This was referencing the wrong DT property, leading to build errors.

Signed-off-by: Jim Paris <jim@jtan.com>
2019-04-11 10:02:44 +02:00
Jim Paris
9a0d113260 dts: flash: add missing DT properties to jedec,spi-nor
The erase-block-size and write-block-size are needed for the spi_nor
driver to compile.

scripts/dts/extract/flash.py automatically adds these properties if
this flash device is part of the "chosen" flash node, but they're
otherwise missing.

Signed-off-by: Jim Paris <jim@jtan.com>
2019-04-11 10:02:44 +02:00
Andy Ross
110cab8aa3 drivers/timer/systick: Improve clock slippage under irq_lock load
The SysTick logic looked logically sound, but it was allowing us to
set a LOAD value as low as 512 cycles.  On other platforms, that
minimum future interrupt delay is there to protect the "read, compute,
write, unmask" cycle that sets the new interrupt from trying to set
one sooner than it can handle.

But with SysTick, that value then becomes the value of the LOAD
register, which is effectively the frequency with which timer
interrupts arrive.  This has two side effects:

1. It opens up the possibility that future code that masks interrupts
   longer than 512 cycles will miss more than one overflow, slipping
   the clock backward as viewed by z_clock_announce().

2. The original code only understood one overflow cycle, so in the
   event we do set one of these very near timeouts and then mask
   interrupts, we'll only add at most one overflow to the "elapsed()"
   time, slipping the CURRENT time backward (actually turning it into
   a non-monotonic sawtooth which would slip every LOAD cycle) and
   thus messing up future scheduled interrupts, slipping those forward
   relative to what the ISR was counting.

This patch simplifies the logic for reading SysTick VAL/CTRL (the loop
wasn't needed), handles the case where we see more than one overflow,
and increases the MIN_DELAY cycles from 512 to 1/16th of a tick.

Fixes #15216

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2019-04-10 22:05:57 -04:00
Marti Bolivar
100a2bba6c scripts: update pyocd in requirements.txt
This includes a bugfix for a pyocd requirement on pyyaml
that could not be satisfied using officially supported
releases.

Signed-off-by: Marti Bolivar <marti.bolivar@nordicsemi.no>
2019-04-10 17:52:15 -04:00
Johan Hedberg
91139c1534 doc: bluetooth: Clarify notes about blocking in the RX thread
Callbacks called from the RX thread may block, but should avoid doing
it for long periods of time.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-10 17:43:55 -04:00
Johan Hedberg
c5e826e8ff doc: bluetooth: Move L2CAP text from to API reference section
Move the L2CAP text from the guides section to the API reference
section.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-10 17:43:55 -04:00
Johan Hedberg
bf31fbd789 doc: bluetooth: Move GATT text to API reference section
Move the GATT text from the guides section to the API reference.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-10 17:43:55 -04:00
Johan Hedberg
d34128a97b doc: bluetooth: Add reference to Mesh API section
Add a reference from the architecture guide to the Mesh API section.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-10 17:43:55 -04:00
Johan Hedberg
eb46f47a8d doc: bluetooth: Fix text corruption
For some reason there were garbage characters at the end of the line.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-10 17:43:55 -04:00
Johan Hedberg
83b443aa2d doc: bluetooth: Move connection management text to API reference
Move the connection management text from the Guides section to the API
reference section.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-10 17:43:55 -04:00
Andrzej Głąbek
112baf1721 boards: nrf9160_pca10090: Fix polarity of pwm0/ch0
This is a follow up to commit 436c4262da.
By default the channel 0 of pwm0 is set to the pin that drives led0.
Since the LED is active high, the inversion of polarity is incorrect.

Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
2019-04-10 13:55:10 -04:00
Michael Scott
cb2bfcb9c0 net: lwm2m: fix periodic services handling
This fixes an issue where if timestamp == service_due_timestamp,
we don't call the periodic service.  Then the following call to
engine_next_service_timeout_ms() returns 0 because the service
is still due and lwm2m_engine_service() is called again.
This process repeats several times until the value of
k_uptime_get() changes and then the work is finally handled.

Previously, the resolution of k_uptime_get() was in ms.  A recent
change to this API defaults Zephyr so that the resolution is
set via CONFIG_SYS_CLOCK_TICKS_PER_SEC (default 100).

This means the value of k_uptime_get() only changes every 10ms.

Reported-by: Github User pieterjanc
Signed-off-by: Michael Scott <mike@foundries.io>
2019-04-10 13:54:23 -04:00
Michael Scott
42abfc6532 net: lwm2m: dont use system workqueue for services
"It's a Trap!" -- Admiral Ackbar

When moving to the BSD-socket APIs, the original thread running LwM2M
periodic services such as observes and lifetime updates, was replaced
with a re-occuring workqueue job.  To save the overhead of creating a
new thread, I used the system workqueue for these jobs.

This was a mistake.  If these jobs hit a semaphore or wait for some
reason, it cannot be prempted due to the priority of the system work
queue.

Let's instead add this service handling to the thread that we already
use for polling sockets.  This also removes a configuration issue where
the system workqueue stack size needed to be increased.  This can now
be adjusted via the LWM2M_ENGINE_STACK_SIZE knob.

Directly fixes semaphore usage in the socket-based DNS code.
This was introduced as a bugfix for non-responsive DNS server hanging
the Zephyr device forever.  However, this probably fixes randomly
seeming hangs on the device.

Signed-off-by: Michael Scott <mike@foundries.io>
2019-04-10 13:54:23 -04:00
Mieszko Mierunski
6a739435a0 drivers: nrf: Fix UARTE interrupt driven operation.
Bad order of interrupt calls made it unable to transmitt data
using interrupt driven API.

Signed-off-by: Mieszko Mierunski <mieszko.mierunski@nordicsemi.no>
2019-04-10 13:53:40 -04:00
Andrew Boie
9e69c54060 sanitycheck: add more info during processing
After the testcase configs are built, there is a step to
filter all the test case information to determine the set
of tests to run.

As this step takes a nontrivial amount of time, add an
informational message about it.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-10 13:09:28 -04:00
Alberto Escolar Piedras
6a70f397ff doc: Reorganize development model section
Renamed the page "review_process.rst" to "dev_env_and_tools.rst"
as the old name did not cover all its content.
Moved the labels page content into this
"Developemnt Environment and Tools" page.

Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
2019-04-10 12:58:43 -04:00
Alberto Escolar Piedras
ee194c375a doc: dev_process: Add description about GH labels usage
There has been some confusion about how GitHub labels
should be used.
This commit adds a new doc page, which tries to clarify this.

Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
2019-04-10 12:58:43 -04:00
Alberto Escolar Piedras
1923a04ff0 doc: Add to 1.14 release notes native_posix and nrf52_bsim changes
Added information to the release notes about the new drivers
in native_posix, the new nrf52_bsim board and the BabbleSim
integration in CI and testcases.

Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
2019-04-10 12:41:51 -04:00
Ioannis Glaropoulos
e2969e5de0 tests: kernel: fp_sharing: minor fix in #ifdef expression
We need to use the ARMV7_M_ARMV8_M_FP Kconfig symbol,
which denotes the Floating-Point capabilities, instead
of the option that signifies the Cortex-M variant. Fix
is of minor importance, as long as the #ifdef block
remains empty.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-10 10:59:46 -04:00
Ulf Magnusson
3a8db5549a editorconfig: Set insert_final_newline true
This is what checkpatch.pl expects, and GitHub's file viewer flags a
missing trailing newline too.

Note that this is different from a blank line at the end of the file. It
just says whether the last line must end in a newline.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-04-10 14:15:38 +02:00
Joakim Andersson
0e7bf9b657 Bluetooth: controller: Send unknown rsp to unexpected ENC ctrl PDU
Send unknown rsp instead of asserting when encryption related control
PDUs are received in the wrong state.
This would allow an attacker to intentionally crash the device.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-04-10 14:01:21 +02:00
Joakim Andersson
9fb3abef1e Bluetooth: controller: Fix length request during encryption procedure
Stop the Length request procedure from initiating during the encryption
procedue. This would cause the peer to disconnect the link with error
code LMP_TRANSACTION_COLLISION

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-04-10 14:01:21 +02:00
Joakim Andersson
0cf82cdd31 Bluetooth: controller: Set encryption procedure pending
Set the encryption procedure pending and start it as soon as
there are no other procedures running.
This allows the Host to enqueue the encryption procedure, and not
get disallowed command because a different LL procedure is active.

Fixes #15012

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-04-10 14:01:21 +02:00
Aaron Tsui
5922be2ed6 samples: subsys: logging Remove repetitive code.
Remove repetitive code

Signed-off-by: Aaron Tsui <aaron.tsui@outlook.com>
2019-04-10 13:51:38 +02:00
Aaron Tsui
1c742a9756 doc: subsys: logging Update documentation
Update documentation.

Signed-off-by: Aaron Tsui <aaron.tsui@outlook.com>
2019-04-10 13:51:38 +02:00
Johan Hedberg
63955e5f70 Bluetooth: Fix clearing conn->le.keys when unpairing
When calling bt_unpair() the keys were removed from flash, however a
pointer was left to the invalidated keys in case there was an existing
connection. This would then lead to a bogus entry being stored in
flash for a zero-address peer device. Fix this issue by clearing the
conn->le.keys pointer in the bt_unpair() function.

Fixes #15325

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-10 14:47:29 +03:00
David B. Kinder
2e5172dab7 doc: update 1.14 release notes with doc changes
Update 1.14 draft release notes with doc changes.  Also edited existing
release notes material to make sentence tense consistent (past tense).

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2019-04-10 07:37:04 -04:00
Johan Hedberg
686f5c79cf Bluetooth: Mesh: Fix not updating health publication message
The bt_mesh_fault_update() API is meant for updating the publication
message and sending it out to the network, however it was missing the
necessary call to health_pub_update() which is responsible for
updating the publication message.

Fixes #15300

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-10 10:56:27 +03:00
Andrew Boie
9926f947ab tests: ringbuffer: avoid unaligned mem access
Casting the rb_data character array to a u32_t can result
in an unaligned u32_t * pointer being passed to
ring_buf_item_put(), since rb_data is only byte-aligned.

Our Altera Max10 CPU build is not configured to detect
unaligned memory access and throw an exception, it is
instead rounding down the memory address
of the data pointer to the nearest 4-byte value, causing
the wrong data to be copied into the ring buffer.

It appears that in the C standard this is considered
Undefined Behavior so the approach this patch takes is
to fix the test, by ensuring that rb_data is aligned to
u32_t.

Fixes: #14869

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-09 19:59:46 -04:00
Andrew Boie
7387b56c61 tests: add nsim special cases for two tests
The NSIM emulator has severe performance issues when
the MPU registers are reprogrammed on context switch.
Disable runtime reprogramming of the MPU for these
platforms on these two tests, which have a lot of context
switch thrashing. This is done by ensuring userspace
and hardware stack overflow detection via guard areas
is disabled.

I have assurances from the ARC team that the tests run fine
on real hardware and this is an emulation issue.

For 1.15, this will be completely resolved by optimizing
MPU region gap-filling to not take place during context
switch time, which will drastically reduce the number of
MPU registers poked during context switch on nsim_sem.

Meanwhile, for 1.14 we ensure that no runtime reprogramming
of the MPU is done for these tests.

Fixes: #14642

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-09 19:38:32 -04:00
Wayne Ren
5bc307e60f arch: arc: optimize the macros of thread stack
* clean up and optimzie the macros of thread stack

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-04-09 18:39:48 -04:00
Wayne Ren
290aa59ada arch: arc: fix the bug of mpu stack guard when no USERSPACE
* fix the stack allocation and initialization
  for mpu stack guard when USERSPACE is not configured
* fixes #15163

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-04-09 18:39:48 -04:00
Alexander Wachter
c204f70540 net: increase mgmt event stack size
Increase the default mgmt event stack size from 512 to 768 because of
stack overflows.

Signed-off-by: Alexander Wachter <alexander.wachter@student.tugraz.at>
2019-04-09 15:35:41 -04:00
Wayne Ren
1f0fc6d712 arch: arc: fix the bug of nest interrupt handling in int exit
* it's not reliable to use exc_nest_count to decide nest interrupt.
  A better option is to use IRQ_ACT

* ext_nest_count is just used to switch interrupt stack

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-04-09 15:35:17 -04:00
Adithya Baglody
d39e68d6b2 samples: code_relocation: Disable code coverage.
Currently coverage is enabled only in platforms which dont have
multiple memory regions. This sample was designed to emulate
different memory regions. This in conjunction with gcov which
might instrument data in different memory regions will not work
as expected. Therefore disabling gcov for this sample.

Fixes: GH-15107

Signed-off-by: Adithya Baglody <adithya.nagaraj.baglody@intel.com>
2019-04-09 12:46:24 -04:00
Andrew Boie
9f2188706c samples: remove mem_domain_apis_test
We have actual tests now under tests/kernel/mem_protect/userspace
and tests/kernel/mem_protect/mem_protect that exercise all the
memory domain APIs. This old test is superfluous.

Fixes: #15178

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-09 11:47:28 -04:00
Torsten Rasmussen
ad026c09b1 cmake: modules: using posix path for Kconfig generated file
Fixes: #15289

Kconfig requires posix style path when sourcing other files.
As abspath in python will use native host style, i.e. backslash '\' in
windows this will cause invalid paths in Kconfig generated file and
thus the file will never be loaded.

This commit uses PurePath to convert the path to posix style, ensuring
Kconfig can load the modules.

Signed-off-by: Torsten Rasmussen <torsten.rasmussen@nordicsemi.no>
2019-04-09 16:47:45 +02:00
Anas Nashif
ceca823b59 doc: remove references to IRC
Remove references to IRC and mention Slack instead.

Fixes #15266

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-09 07:53:31 -04:00
Jim Paris
38ecf5b41f shell: Consume all input data
A transport may receive multiple bytes of data between shell_thread
wakeups, but state_collect is only called once per wakeup.  So it must
process all data, and only return when all data from the transport has
been consumed.  This is mostly handled correctly, but there were two
places where state_collect would return early instead.

Signed-off-by: Jim Paris <jim@jtan.com>
2019-04-08 19:38:01 -04:00
Piotr Mienkowski
d38ffedd4d doc: add example of how to build MCUBoot app with west
This commit extends existing documentation by providing an example
of how to build Hello World sample application for MCUboot using
west.

Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
2019-04-08 19:37:39 -04:00
Anas Nashif
15ca53dbba doc: development process: feature tracking
Add section about adding features and feature tracking.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-08 19:00:12 -04:00
Anas Nashif
7946b88c2d doc: remove outdated and wrong merge-window description
This picture was wrong and outdated describing an old process we used to
have.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-08 19:00:12 -04:00
Henrik Brix Andersen
35afc873fe dts: rv32m1_ri5cy: fix comment
Fix a comment in the rv32m1_ri5cy.dtsi file.

Signed-off-by: Henrik Brix Andersen <henrik@brixandersen.dk>
2019-04-08 16:50:22 -04:00
Andrzej Puzdrowski
bfb7e4531c tests/subsys/settings/fcb: fix unaligned test
Unaligned test might filed in case fcb area was not clen before
run.
The patch insert clean operation before this test.

fixes #15063

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-04-08 10:50:10 -04:00
Anas Nashif
7f378d6ef8 benchmarks: sched: capture output and evaluate
We were running this as a test and not evluating the output. Now we
verify the output and stop treating this as a ztest item.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-08 10:46:55 -04:00
Cinly Ooi
f874ac72e4 doc: Remove prj_single.conf from README.rst
Removed documentation about prj_single.conf from README.rst
as it is no longer needed and was removed.

Signed-off-by: Cinly Ooi <cinly.ooi@intel.com>
2019-04-08 10:45:52 -04:00
Jim Paris
7cdfe7f26f Bluetooth: shell: fix build warning if !BT_CENTRAL
Fixes:
  .../zephyr/subsys/bluetooth/shell/bt.c:906:12:
     warning: 'cmd_chan_map' defined but not used [-Wunused-function]

Signed-off-by: Jim Paris <jim@jtan.com>
2019-04-08 12:36:15 +03:00
Anas Nashif
318a98a7fb doc: fix ztest code samples
Remove extra commas and close brackets in code samples.

Fixes #14098

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 12:22:00 -04:00
Anas Nashif
a520266e44 tests: remove unused defaults.tc
This file is not used and was originally added to support TCF hardware
testing. We use harness now.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 10:26:27 -04:00
Anas Nashif
f6a163fc5c ci: remove unused script merge_junit.py
This script is now part of ci-tools repo.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 10:26:27 -04:00
Anas Nashif
073e017c75 tests: use correct kconfig in help message
CONFIG_TEST_HAS_USERSPACE was removed, fix the help the text to reflect
that.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 10:26:27 -04:00
Anas Nashif
83ceb4953a net: telnet: remove obsolete code
Remove obsolote telnet console code. We now have a proper shell backend
for telnet.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 10:26:27 -04:00
Johan Hedberg
309b7ff3b4 Bluetooth: Mesh: Update TODO to match current situation
Persistent storage is done. So are the configuration and health
clients. We're also not actively looking to optimize the provisioning
protocol & mesh networking memory usage anymore.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-04-07 09:39:30 -04:00
Anas Nashif
b01f023d86 drivers: gpio: fix wrong rename of literal
_REG here is not a variable, it is a string in the macro. It should have
not been renamed.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 08:50:43 -04:00
Anas Nashif
3ae52624ff license: cleanup: add SPDX Apache-2.0 license identifier
Update the files which contain no license information with the
'Apache-2.0' SPDX license identifier.  Many source files in the tree are
missing licensing information, which makes it harder for compliance
tools to determine the correct license.

By default all files without license information are under the default
license of Zephyr, which is Apache version 2.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 08:45:22 -04:00
Anas Nashif
8287f7c855 scripts: remove old xtools config files
Those files are outdated. We now have them as part of the sdk-ng git
repo.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 08:45:22 -04:00
Anas Nashif
e81fdb83d6 drivers: adc: fix license
This is a leftover license header from when we used a third party
driver that had since been replaced.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 08:45:22 -04:00
Anas Nashif
cfc962bba0 net: kconfig: relicense kconfig file
The license in this file is a leftover from old IP stack. Relicense
it to Apache 2.0.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-07 08:45:22 -04:00
Rajavardhan Gundi
6c6217e8b3 boards: intel_s1000_crb: declare some variables as global
write_buf and flash_content should be defined as global inside
main. Otherwise Python treats them as local variables and ends
up throwing an error because it thinks they are being used
without being defined.

Signed-off-by: Rajavardhan Gundi <rajavardhan.gundi@intel.com>
2019-04-06 18:13:10 -04:00
Andrew Boie
9f04c7411d kernel: enforce usage of CONFIG_TEST_USERSPACE
If a test tries to create a user thread, and the platform
suppors user mode, and CONFIG_TEST_USERSPACE has not been
enabled, fail an assertion.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-06 14:30:42 -04:00
Andrew Boie
7b1ee5cf13 tests: CONFIG_TEST_USERSPACE now off by default
Unlike CONFIG_HW_STACK_PROTECTION, which greatly helps
expose stack overflows in test code, activating
userspace without putting threads in user mode is of
very limited value.

Now CONFIG_TEST_USERSPACE is off by default. Any test
which puts threads in user mode will need to set
CONFIG_TEST_USERSPACE.

This should greatly increase sanitycheck build times
as there is non-trivial build time overhead to
enabling this feature. This also allows some tests
which failed the build on RAM-constrained platforms
to compile properly.

tests/drivers/build_all is a special case; it doesn't
put threads in user mode, but we want to ensure all
the syscall handlers compile properly.

Fixes: #15103 (and probably others)

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-06 14:30:42 -04:00
Andrew Boie
3b53e69249 tests: bluetooth: tester: workaround build error
For mysterious reasons this test fails cmake if
CONFIG_TEST_USERSPACE=n.

Enable it for now, bug tracked in #15232

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-06 14:30:42 -04:00
Andrew Boie
027b6aaf89 tests: set userspace tag for all tests that use it
This lets us quickly filter tests that exercise userspace
when developing it.

Some tests had a whitelist with qemu_cortex_m3; change
this to mps2_an385, which is the QEMU target with an
MPU enabled.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-06 14:30:42 -04:00
Andrew Boie
ce6b80470d net: add missing syscall for gethostname()
We need all the socket APIs to work from user mode.
tests/net/socket/misc now runs in userspace.

Fixes: #15227

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-06 14:30:42 -04:00
Andrew Boie
1d0369f606 tests: net: getnameinfo: run in user mode
The test is designed to run in user mode, but was disabled
for some reason.

Re-enable, and add mps2_an385 to the whitelist as this is
the QEMU target that emulates an MPU.

Fixes: #15228

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-06 14:30:42 -04:00
Andrew Boie
ad71c2fc44 tests: poll: reduce memory usage
We can re-use thread/stack objects between cases, no
need to have separate ones.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-06 14:30:42 -04:00
Andrew Boie
49d2812f3e arc: fix invalid parameter check
The desired value is 0x24, not 24. Express all these as hex.

Fixes: #15221

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-06 14:30:10 -04:00
Anas Nashif
ed139948a5 license: add missing licences to source code
Add missing license to source code files.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-05 23:45:51 -04:00
Andrei Emeltchenko
8ed215e011 usb: usb_dc_stm32: Fix reading invalid EP
Fix crash when reading invalid endpoint found in harness test.

Fixes #13560

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-05 16:12:46 -04:00
Andrei Emeltchenko
06ef0ca0fc usb: usb_dc_stm32: Add placeholders for missing API
Fix build error when executing sanitycheck on stm32 devices.

Command to execute tests:
sanitycheck --device-testing --device-serial /dev/ttyACM0 -p <board>
    -t usb

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-05 16:12:46 -04:00
Ravi kumar Veeramally
06159d3bcf net: samples: ipv4_autoconf: Need more buffers for same_70
More buffers are need to build for sam_e70_xplained board
to work out of the box. Added board specific conf file.

Fixes #15096

Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2019-04-05 16:11:37 -04:00
Adithya Baglody
b33dd7ebde tests: benchmark: timing_info: Fixed incorrect results.
The results were incorrect because the timer was firing the
interrupts before the measurement was made.

Fixes: GH-14556

Signed-off-by: Adithya Baglody <adithya.nagaraj.baglody@intel.com>
2019-04-05 16:10:27 -04:00
Andrew Boie
4e5c093e66 kernel: demote K_THREAD_STACK_BUFFER() to private
This macro is slated for complete removal, as it's not possible
on arches with an MPU stack guard to know the true buffer bounds
without also knowing the runtime state of its associated thread.

As removing this completely would be invasive to where we are
in the 1.14 release, demote to a private kernel Z_ API instead.
The current way that the macro is being used internally will
not cause any undue harm, we just don't want any external code
depending on it.

The final work to remove this (and overhaul stack specification in
general) will take place in 1.15 in the context of #14269

Fixes: #14766

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-05 16:10:02 -04:00
David B. Kinder
b379030724 doc: tweak index and release notes index for 1.14
Update the release notes page to include the 1.14 release notes
(currently a draft in progress), and update the main index page to
clarify how to get to documentation for other Zephyr versions.

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2019-04-05 14:49:19 -04:00
Cinly Ooi
cf22c74405 tests: Removed legacy directory /compliance
Removed as it is no longer needed

Signed-off-by: Cinly Ooi <cinly.ooi@intel.com>
2019-04-05 09:52:59 -04:00
David B. Kinder
aebed7aada doc: fix misspellings in flashmap.h
Fix misspellings missed during regular reviews.

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2019-04-05 09:51:30 -04:00
Joakim Andersson
fa20ac3693 Bluetooth: controller: Fix assert in raising event during proc collision
The fix done in #14938 introduced a later assert when raising an HCI
event for the procedure that was terminated during the procedure
collision handling. This assert happens because the unknown rsp
has information that is needed when raising the event.
Solve this by copying the scratch packet into the node buffer so that
we keep the data.

Fixes #15183

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-04-05 09:31:22 -04:00
Cinly Ooi
8cce685bbc tests: bluetooth: Improve test case names
Improvement in test case name is needed to make it easier
to navigate from test case name to the actual test
folder.

This is useful as some tools that consume tests directory
will only output test case name without directory names

Signed-off-by: Cinly Ooi <cinly.ooi@intel.com>
2019-04-05 08:25:33 -04:00
Andrei Emeltchenko
0f03730882 usb: wpanusb: Simplify and cleanup sample
Remove old unused code blocks and simplify initialization.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-05 12:23:57 +02:00
Andrei Emeltchenko
ed97cb7601 usb: wpanusb: Use usb_transfer mechanism
Refactor wpanusb to use usb_transfer().

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-05 12:23:57 +02:00
Andrei Emeltchenko
08da6b261a usb: wpanusb: Fix crash in the sample
Patch 8af3df3519 changed logic and did not take into account 2 extra
bytes.

...
  Precise data bus error
  BFAR Address: 0x766e4900
***** Hardware exception *****
Current thread ID = 0x200004e8
Faulting instruction address = 0xddf4
Fatal fault in thread 0x200004e8! Aborting.
...

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-05 12:23:57 +02:00
Andrei Emeltchenko
721f3d1cd0 usb: Refactor USB status callback
Merge cb_usb_status_composite and cb_usb_status and use common
forward_status_cb for both composite and normal devices.

Fixes #14882

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-04-05 12:23:57 +02:00
Andy Ross
0c59471436 tests/drivers/ipm: Enable on (uniprocessor) x86_64
This test was having trouble earlier (at least with some toolchains),
but whatever was causing that seems to have been fixed.  The only
remaining issue is that neither the IPM console code nor the test are
SMP-safe.  There's a bug (#14639) tracking the need to get these
working, but for now the straightforward workaround is just to disable
SMP.

And even long term, IPM is an oddball interprocessor communication
mechanism designed for asymmetric multiprocessing devices like Quark
SE and doesn't seem like an obvious fit for a SMP machine.

Fixes #12478

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2019-04-04 22:32:39 -04:00
Andy Gross
122eb7b647 doc: release-notes: Add security vulnerabilities
This patch adds information about the security vulnerabilities being
fixed in the 1.14 release.

Add a intro statement that these issues were addressed,
and include x86 vulnerabilities addressed in this release.

Signed-off-by: Andy Gross <andy.gross@linaro.org>
2019-04-04 22:31:28 -04:00
Kumar Gala
bb292d799e debug: tracing: Fix build with renaming of reserved functions.
We renamed _sys_trace_thread_switched_in to
z_sys_trace_thread_switched_in, however we already had a function
named z_sys_trace_thread_switched_in.  So rename z_sys_trace... to
z__sys_trace...

Fixes: #15184

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-04-05 01:00:31 +08:00
Marti Bolivar
7eca2568bd doc: additional clarifications on west
Add a missing reference to how west is used to set ZEPHYR_MODULES in
without-west.rst, augmenting the application development guide a bit
to include this in the list of important variables, cleaning that up a
bit while we are here and adding some more west details.

Add a big fat warning in the getting started guide that using Zephyr
without west is not for the faint of heart.

Signed-off-by: Marti Bolivar <marti.bolivar@nordicsemi.no>
2019-04-04 08:32:15 -04:00
Wentong Wu
b991962a2e tests: adjust stack size for qemu_x86 and mps2_an385's coverage test
for SDK 0.10.0, it consumes more stack size when coverage enabled
on qemu_x86 and mps2_an385 platform, adjust stack size for most of
the test cases, otherwise there will be stack overflow.

Fixes: #14500.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-04-04 08:23:13 -04:00
Wentong Wu
1214736be5 tests: disable kernel.sched.preempt and kernel.poll on nrf52810_pca10040
on platform nrf52810_pca10040, the remaining sram space is not enough
to build test cases kernel.sched.preempt and kernel.poll, temporary
exclude nrf52810_pca10040 on that two cases, will open them when issue
is fixed.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-04-04 08:23:13 -04:00
Marc Herbert
46353438e8 zephyr_library_compile_options(): silently de-duplicate
PR #14776 / commit 915a353255 changed function
zephyr_library_compile_options() to use MD5 instead of RANDOM for build
reproduction reasons. As later predicted by Sebastian Bøe in the PR
(thx), the names generated for these pseudo-libraries won't be unique
anymore if the exact same flag gets added more than once.

To reproduce the issue, simply add the following two lines in some
CMakeLists.txt file like samples/hello_world/CMakeLists.txt:

zephyr_library_compile_options("-Dfubar=barfu")
zephyr_library_compile_options("-Dfubar=barfu")

cmake will then fail like this:

 CMake Error at zephyr/cmake/extensions.cmake:403 (add_library):
  add_library cannot create target
  "options_interface_lib_e689fdb7eb15d801c2f95dd61301fc5e" because
  another target with the same name already exists.  The existing
  target is an interface library created in source directory
  "zephyr/samples/hello_world".  See documentation for
  policy CMP0002 for more details.
 Call Stack (most recent call first):
  CMakeLists.txt:9 (zephyr_library_compile_options)

As requested by Sebastian, silently discard duplicate options just like
CMake does.

Fixes #15093

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2019-04-04 08:11:14 -04:00
Paul Sokolovsky
bd10c72bc4 net: sockets: Add docstrings for BSD Sockets API
The current idea is that we document zsock_* prefixed symbols, refer
to Open Group POSIX website
(http://pubs.opengroup.org/onlinepubs/9699919799/) for normative
descriptions, and explicitly mention bare POSIX name of a function
too (so e.g. users could find it via search).

Fixes: #13397

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2019-04-04 17:30:28 +08:00
Anas Nashif
9983710c44 boards: qemu_x86_nommu is a simulation platform
For some reason we dropped the simulation keyword and this platform is
not running any tests, we are just building the tests.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-03 21:33:19 -04:00
Patrik Flykt
4aa48833d8 subsystems: Rename reserved function names
Rename reserved function names in the subsys/ subdirectory except
for static _mod_pub_set and _mod_unbind functions in bluetooth mesh
cfg_srv.c which clash with the similarly named global functions.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-04-03 17:31:00 -04:00
Patrik Flykt
fd42bf7443 soc: Rename reserved function names
Rename reserved function names in the soc/ subdirectory.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-04-03 17:31:00 -04:00
Patrik Flykt
5aecf9db37 boards: Rename reserved function names
Rename reserved function names in the boards/ subdirectory.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-04-03 17:31:00 -04:00
Patrik Flykt
7c0a245d32 arch: Rename reserved function names
Rename reserved function names in arch/ subdirectory. The Python
script gen_priv_stacks.py was updated to follow the 'z_' prefix
naming.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-04-03 17:31:00 -04:00
Patrik Flykt
97b3bd11a7 drivers: Rename reserved function names
Rename reserved function names in drivers/ subdirectory. Update
function macros concatenatenating function names with '##'. As
there is a conflict between the existing gpio_sch_manage_callback()
and _gpio_sch_manage_callback() names, leave the latter unmodified.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-04-03 17:31:00 -04:00
Andrew Boie
14db4eedff tests: userspace: check stack buffer access
The stack information stored in the thread->stack_info
fields need to represent the actual writable area for
its associated thread. Perform various tests to ensure
that the various reported and specified values are in
agreement.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:48:20 -04:00
Andrew Boie
00a8818da2 arc: fix Z_ARCH_THREAD_STACK_MEMBER()
Unlike the others, this macro was not taking into
account minimum MPU region sizes by filtering through
STACK_SIZE_ALIGN().

Fixes: #15130

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:48:20 -04:00
Andrew Boie
29095ac135 arc: fix off-by-one in _is_in_region()
Similar issue to what was fixed earlier in the MPUv3
code. start + size should be <= r_addr_end. Fixes
a problem where the last byte of an MPU region is
incorrectly reported as out-of-bounds.

Fixes: #15131

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:48:20 -04:00
Andrew Boie
4ea404d9bf CODEOWNERS: add lib/os
Part of the core kernel, Andy and I will watch over it.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:47:45 -04:00
Andrew Boie
c8aee7b413 sys_mem_pool: use sys_mutex
Permission management no longer necessary, the former
parameter for the mutex is now simply ignored.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:47:45 -04:00
Andrew Boie
0ccaa5d908 tests: mqtt_packet: run in user mode
Various globals for the test cases have been moved to
the ztest memory domain data section via ZTEST_DMEM tags
so that user mode can access them.

Some anonymous arrays whose address was being placed in
the msg_subackX structs have been split out so they
are in ztest memory domain.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:47:45 -04:00
Andrew Boie
7e3a34f84f mqtt: use sys_mutex instead of k_mutex
Allows the mqtt_client data structure to exist in user memory.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:47:45 -04:00
Andrew Boie
f8b6276780 tests: repurpose one of the mutex tests
We have two redundant mutex tests. Repurpose one
of them to excerise sys_mutex instead.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:47:45 -04:00
Andrew Boie
f0835674a3 lib: os: add sys_mutex data type
For systems without userspace enabled, these work the same
as a k_mutex.

For systems with userspace, the sys_mutex may exist in user
memory. It is still tracked as a kernel object, but has an
underlying k_mutex that is looked up in the kernel object
table.

Future enhancements will optimize sys_mutex to not require
syscalls for uncontended sys_mutexes, using atomic ops
instead.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:47:45 -04:00
Andrew Boie
1dc6612d50 userspace: do not track net_context as a kobject
The socket APIs no longer deal with direct net context
pointers.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:47:45 -04:00
Andrew Boie
a00eff731c gen_kobject_list: allow object data to be C code
The data value in a kernel object structure is specific
to that type of object. Allow this to be a reference to
another C symbol or other compiled code by populating as
a string.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:47:45 -04:00
Andrew Boie
c235e167fa elf_helper: support for objects in user memory
Some forthcoming kernel object types like futexes need to
be tracked, but do not contain data that is private to
the kernel.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:47:45 -04:00
Andrew Boie
ce6210e479 gen_priv_stacks.py: fix kobject list
k_stack are orthogonal to thread stacks.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-03 13:47:45 -04:00
Pawel Dunaj
2189d9b56d lib: mempool: Alloc and break must happen atomically
This fixes a regression caused by 41e90630d.

Signed-off-by: Pawel Dunaj <pawel.dunaj@nordicsemi.no>
2019-04-03 12:36:36 -04:00
Flavio Ceolin
b80c3d9c77 arch: x86: Remove not used fp struct
The legacy struct s_coopFloatReg was never being used, though it was
an empty struct (not wasting space), some symbols were being generate
for it.

Nevertheless, neither C99 nor C11 allow empty structs, so this
was also a violation to the C standards.

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-03 12:06:31 -04:00
Piotr Mienkowski
7a9c1f101d logging: Add support for new 'in place' mode to SWO backend
Extended SWO backend to support new backend API for 'in place'
mode.

Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
2019-04-03 10:46:57 -04:00
Ravi kumar Veeramally
ecdef39223 drivers: sam_gmac: Fix compilation warning
Line continuation was missing for #error macro.

Fixes  #15096

Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2019-04-03 09:32:55 -04:00
Tomasz Bursztyka
16dd53b5a5 net/core: Initialize network services only after the stack
DNS is not part of L3, but as dhcpv4 or the net shell, it is a services
on top of the network stack. So let's gather all in a dedicated
function.

This also rework the order when starting the DNS service. There was an
issue for offload device: these would be fully initialized in
init_rx_queues() which was called after l3_init. l3_init had already
started dns: which would not be able to bind correctly, proving to be
fully dead afterwards. Instead, starting the dns at the very end
ensures that all is initialized properly from devices to stack.

Fixes #15124

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-04-03 09:32:39 -04:00
Tomasz Bursztyka
eea0f6f8f0 net/dhcpv4: Avoid ifdefs when using net_dhcpv4_init()
Just provide a macro of value 0 in case CONFIG_NET_DHCPV4 is unset.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-04-03 09:32:39 -04:00
Maureen Helm
417d349727 dts: nxp: Disable kw40/41 gpiob interrupts
Ports B and C share a common interrupt vector on kw40 and kw41z socs,
but we don't currently have a way to express this in device tree. A
check was added in commit 77cb942a97 that
correctly causes build errors on kw40/41 boards when both ports are
enabled.

Disable the port b interrupt for now until we have a better way to
handle this.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-04-03 08:32:56 -04:00
Wentong Wu
94615a4f98 ext: lib: crypto: unify the API of CCM alogrith
unify the API of CCM alogrithm's implemation for TinyCrypt,
mbedTLS and cc2520 crypto device to make users easy to use.

Fixes #8339.

Signed-off-by: Wentong Wu <wentong.wu@intel.com>
2019-04-02 21:02:00 -04:00
Andrew Boie
468c47bb83 tests: thread_apis: fix failure on ARC
This test is only trying to prove that k_thread_foreach() works,
it has nothing to do with stacks. Remove the stack checks
completely.

Fixes: #15044

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-02 20:11:19 -04:00
Andrew Boie
3f2d2f1d54 tests: cmsis_rtos_v2: fix thread checks
It's really not possible to design a test where we can
enforce expectations on real vs. expected stack size:

- Some platforms may increase stack size over what is expected
  due to rounding up the stack buffer area to the next power
  of two.

- Some configuration options like CONFIG_STACK_RANDOM
  carve out space in the stack buffer, resulting in a stack
  size less than what is expected.

Best we can do is just assert that the amount of space
available should be less than the total size reported.

Fixes: #14640

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-02 20:11:06 -04:00
Wayne Ren
0734b4fcaa board: nsim_em: fix the bug in nsim host timer
* the nsim host timer does not work as expected,
  disable it, use cycle count to simulate timer tick

* optmize the freq definition of nsim_em

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-04-02 17:39:25 -04:00
Andrew Boie
7ed687d7da adc: amend adc_read_async comment
This is no longer necessary since the sequence is copied.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-02 14:17:37 -04:00
Andrew Boie
b942efda58 tests: adc_api: run adc_read_async() from user
We define a system heap and assign our resource pool
from it as k_poll() requires an implicit allocation.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-02 14:17:37 -04:00
Andrew Boie
e53e1728c1 adc: doc: clarify callback pointer from user mode
They are forbidden since they run in supervisor mode.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-02 14:17:37 -04:00
Andrew Boie
3ba8b6cd6e adc: add syscall for adc_read_async()
Same restriction as adc_read(), callback must be NULL.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-02 14:17:37 -04:00
Andrew Boie
1efaae5949 drivers: adc: make a copy of sequence struct
We should not be storing the sequence pointer, as
adc_read_async() returns immediately. The memory could
be heap allocated, or on a call stack. Make a copy of
it instead.

Fixes: #15039

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-02 14:17:37 -04:00
Tomasz Bursztyka
26a335c2e8 net/ipv6: Fix IPv6 fragment nexthdr field in case of no option headers
With or without options headers it has to work. Currently it was
setting always hop-by-hop next header which is obviously wrong but
worked on ipv6_fragment test since that one has only packets with
optional headers (hop-by-hop in that case has to be the first optional
header).

Fixes #14622

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-04-02 13:18:46 -04:00
Luiz Augusto von Dentz
593d8561c9 Bluetooth: PPCP: Fix not being able to disable configurations
The spec allows to set to no specific value with use of 0xffff.

As this still enables entering values in the invalid range, 3200-65535
for min/max interval, this adds the necessary build checks to prevent
values within this range to be used and at same time check if min
interval is not bigger that max interval.

Fixes #15017

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-04-02 12:13:22 -04:00
Ioannis Glaropoulos
e9d726c400 arch: arm: initialize mode variable upon user space enter
This commit initializes the thread.mode variable, right before
dropping thread privilege level to user mode. This is required,
as we need to know the privilege level of the thread, in case
we need to context-switch it -out and -in again (e.g. in case
an interrupt triggers a context-switch).

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-02 12:05:55 -04:00
Flavio Ceolin
96659ac83b tests: fp_sharing: Fix build error
k_disable_float is only available in X86 when LAZY_FP_SHARING is
set. Adding this condition before using this function.

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-04-02 11:31:22 -04:00
Paweł Zadrożniak
e01662d387 drivers: usb: nordic: Fix for startup with USB cable attached.
Fixes bug introduced in #14875.
USBDETECTED event is be generated on cable attachment and
when cable is already attached during reset, but not when
the peripheral is re-initialized. When USB-enabled bootloader
is used, target application will not receive this event
and it needs to be generated again. This commit implements
a check against driver being enabled multiple times in case
of application without bootlader starting with cable attached
(both "fake" and "real" events are generated). Such dirty
trick allows bootloader to leave the peripheral in any state
before jumping to target application.

Fixes #15073

Signed-off-by: Paweł Zadrożniak <pawel.zadrozniak@nordicsemi.no>
2019-04-02 11:16:27 -04:00
Erwan Gouriou
4fd9d89d51 doc/guides/debugging: Add node for openocd support on windows
Add a note to mention how to get openocd working on windows.
This is taken from stlink-v21.rst file before its reformatting.

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
2019-04-02 11:09:22 -04:00
Erwan Gouriou
09482207b7 doc/guides: debugging: Add ST-Link to probes
Add ST-Link chapter in probes page and reference in host-tool
openocd section.

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
2019-04-02 11:09:22 -04:00
Ioannis Glaropoulos
ba0eeedf3e arch: arm: userspace: remove mode setting in swap()
The arch.mode status flag is always inline with the actual
thread execution privilege leve. Therefore, we do not need
to be saving-off the thread's mode every time we intend to
context switch-out the thread.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-02 11:07:46 -04:00
Ioannis Glaropoulos
4a58fa1186 arch: arm: update arch.mode in user thread system calls
This commit updates the thread.mode variable, in system
calls, whenever we modify the execution privilege level.
We need to do this, in order to be able to properly handle
context-switching triggered by ISRs, while doing the system
calls. The commit ensures that a context-switch, triggered
by an ISR during or after,a system call will preserve the
right privilege level.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-04-02 11:07:46 -04:00
Daniel Leung
84b1bba8ee codecov: keep "inline" for ALWAYS_INLINE
Previous commit c31e659165 changed
the ALWAYS_INLINE macros to avoid functions being inlined for
the purpose of code coverage. This has a side effect of causing
the text sections of kobject_hash.c and priv_stacks_hash.c
to ballon more than 10 times in size. This is caused by
attaching the unused attribute, which results in all those
functions being in the text sections though they are never
used. So just keep the "inline" there.

This also removes -fno-inline from NO_COVERAGE_FLAGS so these
two files are not compiled with flags related to code coverage.

Fixes #15009

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-04-02 09:39:44 -04:00
Daniel Leung
3926710f64 ethernet/smsc911x: mark static to function smsc_enable_xmit()
When building with -fno-inline, the compiler complains about
undefined reference to this function. This happens when
building for code coverage. Since this function is only called
within the file, mark it static also.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-04-02 09:39:44 -04:00
Daniel Leung
5136d819a4 subsys/testsuite/coverage: add empty function __gcov_exit()
This is to fix build errors complaining about undefined reference
to __gcov_exit(). There is no special processing required here
so leave the function empty.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-04-02 09:39:44 -04:00
Andrew Boie
9a8f7451fe samples: remove mpu_stack_guard_test
This old "test" has been superseded by test cases in
tests/kernel/mem_protect.

Fixes: #14870

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-02 09:00:25 -04:00
Joakim Andersson
710adac50d Bluetooth: host: Add RPA in directed advertisement support
In order to advertise directed to a privacy enabled central the
initiator field of the directed adv packet needs to set to an RPA.
To instruct the controller to use an RPA in the initiator field own
address type should be set to either 0x02 or 0x03.
Since it is not certain that a remote device supports address resolution
of the initiator address we add an option to turn this on and give the
application the responsibility to check if peer supports this.

Fixes #14743

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-04-02 13:19:00 +02:00
Anas Nashif
193fb971c2 ci: do not report coverage on pull requests
The code coverage reports on pull requests has been inconsistent and
confusing. Disable them for pull-requests.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-01 18:39:17 -04:00
Jacob Siverskog
50c2a735e2 doc: Fix typos in MQTT sample documentation
Fix typos and file reference.

Signed-off-by: Jacob Siverskog <jacob@teenage.engineering>
2019-04-01 18:38:42 -04:00
Andrew Boie
ac3dcc1106 doc: clarify k_queue_alloc_append and related APIs
The data isn't copied, there's just an additional implicit
allocation.

Fixes: #15090

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-04-01 18:27:57 -04:00
Maureen Helm
3854f23acf doc: boards: Edit nxp board and debug probe docs
Incorporates minor documentation edits recommended by David Kinder after
PR #14000 was merged.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-04-02 05:36:45 +08:00
Jukka Rissanen
1eead93a48 net: tcp: Do not mark TCP segment not sent in net_if
If the TCP segment is not sent properly by L2, then do not mark
it "not sent" in net_if.c:net_if_tx(). That "not sent" marking
confused TCP ref counting in tcp.c:tcp_retry_expired() and caused
the packet to be freed too early which then caused free net_buf
access issue during packet resend. This free memory access was
seen with zperf sample application.

From TCP point of view, the packet can be considered sent when
it is given to L2. The TCP timer will resend the packet if needed.

Fixes #15050

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-04-01 12:39:32 -04:00
Jukka Rissanen
30d31936a0 Revert "net: tcp: Fix ref counting for the net_pkt"
This reverts commit 9cd547f53b.

The commit we are reverting, fixed originally the issue that was
seen with zperf. There we freed the net_pkt too early while it was
still waiting for a TCP ACK. The commit 9cd547f5 seemd to fix that
issue but it was causing issues in dump_http_server sample app which
then started to leak memory. No issues were seen with echo-server
with or without the commit 9cd547f5.

So the lessons learned here is that one needs to test with multiple
network sample apps like dump_http_server, echo_server and zperf
before considering TCP fixes valid, especially fixes that touch
ref counting issues.

Fixes #15031

The next commit will fix the zperf free memory access patch.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-04-01 12:39:32 -04:00
Anas Nashif
366ed11bfa sanitycheck: deal with special charachters in xml
Some logging text and colors were not escaped correctly, make sure we
generate well formed XML reports.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-01 12:23:09 -04:00
Anas Nashif
f16e92c000 sanitycheck: count samples in reports
We have not been counting samples in reports. This change lists tests
associated with sample code which in many cases is just verifying output
from the sample and counts as 1 test.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-01 12:23:09 -04:00
Anas Nashif
6e6f13c18a samples: fix identifiers for samples
Fix identifiers for tests in samples.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-04-01 12:23:09 -04:00
Luiz Augusto von Dentz
c581163dcf Bluetooth: Fix not accepting string equal to CONFIG_BT_DEVICE_NAME_MAX
In order to accept string of the same size entered in
CONFIG_BT_DEVICE_NAME_MAX an extra byte must be allocated to guarantee
it will always be NULL terminated.

Fixes #15067

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-04-01 17:51:41 +03:00
Robert Lubos
77546a0e5a drivers: console: Remove TELNET driver
telnet_console is based on deprecated line_fifo module, and is no longer
used in Zephyr.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2019-04-01 10:26:13 -04:00
Robert Lubos
16d2b11041 samples: net: Update TELNET sample to use shell TELNET backend
telnet_console driver is not compatible with new shell module, hence is
not working. Switch the telnet sample to use new TELNET shell backend.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2019-04-01 10:26:13 -04:00
Robert Lubos
658a08a4cb shell: Add TELNET backend
Add TELNET backed for shell module. The TELNET implementation is based
on the telnet_console driver.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2019-04-01 10:26:13 -04:00
Carles Cufi
766edd449d cmake: modules: Enclose name and path in quotes
Due to the fact that CMake only supports greedy regexes,
the ':' in a Windows path ('C:\...') was being matched leading
to an invalid split of the line. Quote both the name and the path
to avoid this issue.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-04-01 07:27:23 +08:00
Alberto Escolar Piedras
52f6f6b960 doc: API lifecycle: Require creating a issue to track removal
As discussed in the TSC meeting of 2019/03/27:
To ensure that we do not forget to remove an API 2 releases later
and to provide a bit better visibility about when the removal
is planned, require that a GH issue be created, and that this
issue be added to the roadmap for the apropriate release.

As a free bonus:
Removed a redundant line in the list and added one missing article.

Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
2019-03-31 17:14:56 -04:00
Marc Herbert
c240b69956 zephyr_module.cmake: restore ability to build without modules
Kconfig.modules used to be an empty file when no modules. PR #14667 /
commit bd7569f272 "cmake: Extracted Zephyr module processing into
python script" unintentionally changed that to no Kconfig.modules file
at all when no west and no modules. kconfig.py doesn't like that and
crashes. Restore the empty file.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2019-04-01 03:10:26 +08:00
Geoffroy Van Cutsem
5900a6fef3 boards/x86: scripts: unset CFLAGS when running build_grub.sh
On Clear Linux, the CFLAGS is set and defines a number of aggressive
checks and optimizations. This causes a build failure when generating a
GRUB2 boot loader image using the 'build_grub.sh' script.

Unsetting it within the script allows it to proceed and successfully
build a functional GRUB2 boot loader image to be used with Zephyr.

Fixes: #14289
Signed-off-by: Geoffroy Van Cutsem <geoffroy.vancutsem@intel.com>
2019-03-31 11:12:19 -04:00
Carles Cufi
c6249aca18 doc: Enable undef warnings in Kconfig
When generating the Kconfig reference documentation, enable the warnings
for undefined Kconfig options in order to make sure all references are
met.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-03-29 23:10:59 -04:00
Carles Cufi
1aa4d8d09c doc: Process zephyr modules to parse all of Kconfig
In order to parse all the Kconfig files that make up the whole Kconfig
tree we need to process the modules, since this can optionally provide
Kconfig files. In order to do so, include the modules CMake file so that
they are listed and a Kconfig.modules is generated.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-03-29 23:10:59 -04:00
Torsten Rasmussen
bd7569f272 cmake: Extracted Zephyr module processing into python script
Fixes: #14513

This commit move the functionality of extracting zephyr modules into
generated CMake and Kconfig include files from CMake into python.

This allows other tools, especially CI to re-use the zephyr module
functionality.

Signed-off-by: Torsten Rasmussen <torsten.rasmussen@nordicsemi.no>
2019-03-29 23:10:59 -04:00
Maureen Helm
dfd779c380 doc: tools: Remove opensda page
This page has been replaced by doc/guides/debugging/probes.rst and
doc/guides/debugging/host-tools.rst

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Maureen Helm
8ab7782703 boards: 96b_nitrogen: Update link to pyocd host tools
Updates the 96b_nitrogen board document to link to the new debugging
guide instead of the opensda page.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Maureen Helm
3d17b72993 boards: usb_kw24d512: Rework programming and debugging doc
Reworks the programming and debugging section in the usb_kw24d512 board
document to leverage the new debugging guide covering debug probes and
host tools.

This board does not have an OpenSDA microcontroller, therefore the only
debug probe currently supported is the external J-Link.

Updates the flashing section to reflect that the ``flash`` build system
target is now supported.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Maureen Helm
80059fc6c4 boards: lpcxpresso54114: Rework programming and debugging doc
Reworks the programming and debugging section in the lpcxpresso54114
board document to leverage the new debugging guide covering debug probes
and host tools.

This board supports the LPC-Link2 J-Link onboard debug probe.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Maureen Helm
3468fd91b9 boards: hexiwear_{k64, kw40z}: Rework programming and debugging doc
Reworks the programming and debugging section in the hexiwear board
documents to leverage the new debugging guide covering debug probes and
host tools.

Recommends the OpenSDA J-Link debug probe because the k64 and kw40z
share the same OpenSDA microcontroller, and the kw40z requires Segger
RTT for a console. It is possible to use daplink firmware for the k64,
however it is not recommended because it requires switching the firmware
back to jlink to access the kw40z.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Maureen Helm
703d067c1e boards: hexiwear_k64f: Default to jlink firmware and jlink runner
The hexiwear_k64f and hexiwear_kw40z share the same OpenSDA
microcontroller on the hexiwear docking station, so make the jlink the
default firmware on both for consistency. We use jlink instead of
daplink by default because hexiwear_kw40z can only use Segger RTT for
the console (there is no UART available).

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Maureen Helm
64f96bcf75 boards: frdm_kw41z: Default to daplink firmware and pyocd runner
The frdm_kw41z board was originally configured in zephyr to use the
jlink runner by default because pyocd didn't yet support the kw41z soc.
Support for kw41z was added in pyocd v0.9.0, so we can now default to
daplink firmware and pyocd.

Now all freedom boards in zephyr consistently use daplink and pyocd.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Maureen Helm
201a5a27e3 boards: frdm_{kl25z, k64f, kw41z}: Rework programming and debugging doc
Reworks the programming and debugging section in the freedom board
documents to leverage the new debugging guide covering debug probes and
host tools.

These boards support OpenSDA DAPLink and OpenSDA J-Link onboard debug
probes. They can also support an external J-Link probe, but this
requires board modifications (cutting traces) and is therefore not
documented.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Maureen Helm
c4c31fcdb1 boards: mimxrt10{60,64}_evk: Rework programming and debugging doc
Reworks the programming and debugging section in the mimxrt1060_evk and
mimxrt1064_evk board documents to leverage the new debugging guide
covering debug probes and host tools.

Neither of these boards have OpenSDA J-Link board-specific firmware,
therefore the only debug probe currently supported is the external
J-Link.

Updates the flashing section to reflect that the ``flash`` build system
target is now supported.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Maureen Helm
09e5acbe54 boards: mimxrt10{20,50}_evk: Rework programming and debugging doc
Reworks the programming and debugging section in the mimxrt1020_evk and
mimxrt1050_evk board documents to leverage the new debugging guide
covering debug probes and host tools.

These boards support both the OpenSDA J-Link onboard debug probe and the
J-Link external debug probe.

Corrects an error linking to the wrong OpenSDA J-Link firmware.

Updates the flashing section to reflect that the ``flash`` build system
target is now supported.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Maureen Helm
97448fe22f doc: debugging: Introduce guide covering debug probes and host tools
Zephyr boards use a wide range of debug probes and debug host tools that
can often be confusing to users. Introduce a new debugging guide that
documents all the different variations of debug probes and host tools in
one place, including which combinations are valid.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-29 22:50:44 -04:00
Andrew Boie
02be448cc4 drivers: adc: add some missing system calls
Setting callbacks is forbidden from user mode.

Some heavier code changes will be needed to support
adc_read_async(), this patch just exposes the config
and read functions for now.

Test case updated to run partially in user mode.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-29 22:21:16 -04:00
Andrew Boie
606e607a77 userspace: set default priv stack size to 1024
The original value of 256 was selected more or less randomly
and special cases keep proliferating. Until we have a formal
method of proving maximum syscall stack depth, set to 1024.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-29 22:21:16 -04:00
Andrew Boie
526807c33b userspace: add const qualifiers to user copy fns
The source data is never modified.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-29 22:21:16 -04:00
Andrzej Puzdrowski
4a8e4de0f1 doc: documentation of flash_area and flash_map
Initial documentation.

fixes #14789

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-03-29 22:20:43 -04:00
Andrew Boie
dea4394ef4 tests: fatal: fix sentinel timer IRQ checking
Tickless kernel is now always disabled, ensuring that when
the kernel's tick count changes, we really did get a timer
interrupt.

The test now awaits a change in tick count instead of busy
waiting for an arbitrary time period.

Fixes: #15013

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-29 22:13:40 -04:00
Andrew Boie
ae0d1b2b79 kernel: sched: move stack sentinel check earlier
Checking the stack sentinel may abort the current thread,
make this check before we determine what the next thread
to run is.

Fixes: #15037

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-29 22:13:40 -04:00
Andrew Boie
b4987a2c57 arc: fix build failure missing arc_exc_saved_sp
Instantiate this in C domain instead.

Fixes: #15035

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-29 18:41:46 -04:00
Cinly Ooi
9bfc1eb8a6 sample: nffs_fs_api: basic: Increase time for testing
Increase test timeout to 500s because it was noticed
that the default of 60s has truncated the test
suite run for nrf52840_pca10056

Signed-off-by: Cinly Ooi <cinly.ooi@intel.com>
2019-03-29 18:24:48 -04:00
Anas Nashif
15cdeb9352 tests: fix various test identifiers
Fix various test identifiers.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-03-29 17:44:11 -04:00
Anas Nashif
3b58681426 tests: fix identifier for scheduler benchmark
Prefix identifier with benchmarks.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-03-29 17:44:11 -04:00
Anas Nashif
8f474020b6 samples: move mbedtls benchmark under benchmarks
This should be alongside other benchmarks under tests/benchmarks

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-03-29 17:44:11 -04:00
Anas Nashif
da5f185e06 samples: add test identifier
Add unique identifier instead of just 'test' for samples.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-03-29 17:44:11 -04:00
Wayne Ren
eba78548da arch: arc: add the handling of mpu stack guard exception
* mpu stack guard exception is a kind of mpu violation exception
* use SW way to distingusih it from other mpu vioation exception

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-29 16:15:10 -04:00
Wayne Ren
950b5c1a7a board: nsim: add new configuration to cover mpu stack guard
* the original configurations are configured with stack checking
* the new configurations are configured with mpu stack guard

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-29 16:15:10 -04:00
Wayne Ren
48e05710f4 arch: arc: fix the bug in HW_STACK_PROTECTION
* HW_STACK_PROTECTION can be done by STACK_
  CHECKING or MPU stack guard. ARC STACK_CHECKING is prioritized
  over MPU-based stack guard

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-29 16:15:10 -04:00
Wayne Ren
3c4fc3d494 arch: arc: fix compile error
caused by typos

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-29 16:15:10 -04:00
Ramakrishna Pallala
5049694a20 doc: Add documentation for file system subsystem
Add documentation for file system subsystem.

Signed-off-by: Ramakrishna Pallala <ramakrishna.pallala@intel.com>
2019-03-29 09:38:33 -04:00
Wayne Ren
d6870e408a board: emsk: fix the ddr related definitons
* add ddr fixup in dts_fixup.h
* use DT_DDR_XXX in linker.ld

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-29 09:37:43 -04:00
Marc Herbert
195195a4fc file2hex.py: switch from gzip.compress() to GzipFile()
Zero functional change, this is pure refactoring and preparation for
using the mtime= parameter which the gzip.compress() shortcut does not
make available.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2019-03-29 08:12:53 -04:00
Marti Bolivar
d3bb3cfd7a doc: west: add missing parts for zephyr v1.14
- add glossary terms for important concepts we have to explain often,
  like "west installation"

- add autodoc directives for pulling in west API docs

- add missing documentation for built-in features like west's
  configuration, extension commands, etc.

- add missing documentation for "west sign" extension

- describe the manifest in a self-contained way rather than linking to
  the relevant pykwalify schema, also adding a missing reference to
  "west manifest" in the miscellaneous multi-repo commands list

- move various details regarding history and motivation to why.rst
  among other changes to repo-tool.rst, leaving it closer to a "tell
  me what I really need to know" style overview

- update planned features

Fixes: #14992
Signed-off-by: Marti Bolivar <marti@foundries.io>
2019-03-29 11:24:32 +01:00
Marti Bolivar
cd795195d5 doc: fix parallel builds
Several of our extensions don't declare they are parallel read or
write safe. Upon inspection, they are.

Not declaring parallel read safety defeats a lot of the speed ups that
are possible when using SPHINXOPTS="-j=auto", so mark the extensions
safe and get the performance back.

Signed-off-by: Marti Bolivar <marti@foundries.io>
2019-03-29 11:24:32 +01:00
Marti Bolivar
74a2d2bfe7 west: move to version v0.5.7
This fixes some high priority issues, including syntax errors in
docstrings which prevent us from including API docs in our Sphinx
tree.

Signed-off-by: Marti Bolivar <marti@foundries.io>
2019-03-29 11:24:32 +01:00
Erwan Gouriou
45962cbe33 doc: dts: Remove orphan section
'orphan:' appears before Flash Partitions section on
https://docs.zephyrproject.org/latest/guides/dts/index.html page.
Fix this

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
2019-03-29 04:56:21 -05:00
Luiz Augusto von Dentz
58baad7c5e Bluetooth: ipsp: Fix not checking return of build_reply
net_pkt_sendto uses size_t as parameter for len so the value would be
treat as unsigned which may cause and invalid memory to be read.

Fixes #14950 #14955

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-03-29 10:39:53 +01:00
Kumar Gala
c6cce7a42e doc: Update release_process to clarify about GitHub tagging
Add a note in the tagging section of the release process that explains
why using GitHub release process for tags should NOT be done.

Fixes #14985

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-03-29 10:36:01 +01:00
Kumar Gala
9e81cbea7d release: Zephyr 1.14-rc3
Bump to 1.14-rc3.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-03-28 18:02:26 -05:00
Patrik Flykt
21358baa72 all: Update unsigend 'U' suffix due to multiplication
As the multiplication rule is updated, new unsigned suffixes
are added in the code.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-03-28 17:15:58 -05:00
Patrik Flykt
2fb87b9dd2 scripts/coccinelle: Update unsigned suffix script
Update unsigned suffix script to properly match multiplication.
Fix provided by Himanshu Jha.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-03-28 17:15:58 -05:00
Patrik Flykt
24d71431e9 all: Add 'U' suffix when using unsigned variables
Add a 'U' suffix to values when computing and comparing against
unsigned variables.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-03-28 17:15:58 -05:00
Patrik Flykt
caebf204c6 scripts/coccinelle: Update Coccinelle script for unsigned values
Update the script to detect and update more instances of unsigned
variable assignments when using all four simple rules of arithmetics.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-03-28 17:15:58 -05:00
Aaron Tsui
f7e7f0f55e tests: watchdog: Debug for boards enabled TEST_WDT_CALLBACK_2
The original code cannot go to the next step on those boards enabled
TEST_WDT_CALLBACK_2 macro, because of the flow control issue. So the
test function cannot finish, and the board keeps restart. As a result,
failure on the test.

Fixes #13468

Signed-off-by: Aaron Tsui <aaron.tsui@outlook.com>
2019-03-28 16:47:06 -05:00
Andrzej Głąbek
ebfd8533d8 boards: nrf52840_pca10090: Force GPIO to be always enabled
The GPIO driver is required by this board's initialization code, hence
it is forced to be enabled always, not only enabled by default like on
other boards equipped with an nRF SoC.

Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
2019-03-28 16:46:39 -05:00
Andrzej Głąbek
32223bd2ae boards: Enable GPIO by default on boards with nRF SoCs
This patch enables the GPIO driver by default on all boards equipped
with an nRF SoC (all boards having `CONFIG_SOC_FAMILY_NRF=y` in their
`_defconfig` file).
In vast majority of cases the driver is needed, so it is more
convenient to enable it at board level than in particular
applications.
And if the driver is undesired for some reason, it can be still
disabled in the application config.

Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
2019-03-28 16:46:39 -05:00
Piotr Zięcik
bd24b31139 Revert "soc: arm: nordic: provide custom busy_wait implementations"
This reverts commit d4b4b99272 as it
introduced unwanted side effect: It moved the k_busy_wait() to other
clock that the one driving system timer and k_cycle_get_32(). As result,
delays created using these interfaces not matched each other.

Signed-off-by: Piotr Zięcik <piotr.ziecik@nordicsemi.no>
2019-03-28 15:09:32 -05:00
Ulf Magnusson
a449c98db2 scripts: Fix risky uses of non-raw regex strings in Python scripts
Fixes pylint warnings like this one:

    doc/conf.py:325:0: W1401: Anomalous backslash in string: '\s'.
    String constant might be missing an r prefix.
    (anomalous-backslash-in-string)

The reason for this warning is that backslash escapes are interpreted in
non-raw (non-r-prefixed) strings. For example, '\a' and r'\a' are not
the same string (first one has a single ASCII bell character, second one
has two characters).

It just happens that there's no \s (or \., or \/) escape for example,
and '\s' turns into two characters (as needed for a regex). It's risky
to rely on stuff like that regexes though. Best to make them raw strings
unless they're super trivial.

Also note that '\s' and '\\s' turn into the same string.

Another tip: A literal ' can be put into a string with "blah'blah"
instead of 'blah\'blah'.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 14:41:32 -05:00
Aaron Tsui
3c45eb45d6 samples: sensor: fix hardware fault when no sensor connected
There are two sensor samples be modified for a more explicit log when
no sensor connected or not connected correctly. Rather than a horrible
hardware fault, which may misleading beginner.

1. bme280
2. sx9500

Signed-off-by: Aaron Tsui <aaron.tsui@outlook.com>
2019-03-28 14:32:17 -05:00
Marc Herbert
915a353255 extensions.cmake: need unique strings, not random ones
1. To support being called multiple times, the function
zephyr_library_compile_options() uses unique
options_interface_lib_${random} names. These only need to be unique, not
random. So replace them with a simple MD5 hash of the ${item} argument.

To reproduce quickly run:
  sanitycheck -b -p qemu_xtensa --tag shell
... a few times and compare the output directories.

This bug sits for now at the top of the list of build reproducibility
issues the most bizarre and difficult to root cause. When running
sanitycheck over a large sample of configurations it was affecting
only qemu_xtensa/**/zephyr/arch/arch/xtensa/core/startup/Makefile
files (and their corresponding CMakeFiles/TargetDirectories.txt),
randomly ordering the following three Make targets and only these
three: rebuild_cache, edit_cache, arch__xtensa__core__startup.

The key to root causing was cmake --trace-expand which prints the random
string.

2. generate_unique_target_name_from_filename() also generated a random
string for the same uniqueness reason. This one was easier to root cause
and reproduce with: sanitycheck --tag gen_inc_file

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2019-03-28 14:27:47 -05:00
Emanuele Di Santo
500fa722fb boards: arm: nrf52840_pca10059: correctly set FLASH_LOAD_OFFSET
Set FLASH_LOAD_OFFSET correctly (accounting for Nordic MBR) when
BOARD_HAS_NRF5_BOOTLOADER is defined and we're not compiling MCUboot.
MCUboot will select USE_CODE_PARTITION, which will make it link
correctly regardless of which board DTS is used (stock/debugger).

Signed-off-by: Emanuele Di Santo <emdi@nordicsemi.no>
2019-03-28 17:54:25 +01:00
Ulf Magnusson
0e8e92cd87 scripts/dts: Fix bug in dead /memreserve/ code
The /memreserve/ code would crash if it ever ran, because 'name' isn't
defined (seems to be some copy-paste here). There are no /memreserve/s
in Zephyr though, so it works out.

'name' seems to be the node name. Not sure what to put for a
/memreserve/, but make it '<memreserve>' to make it stand out.

Fixes a pylint warning.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 11:11:13 -05:00
Ulf Magnusson
7ffd628dac scripts: elf_helper: Remove undefined var ref. in ArrayType.__repr__()
self.num_members doesn't exist. This commit just removes the reference,
because I didn't want to guess a proper fix.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 11:07:42 -05:00
Ulf Magnusson
425998bd79 scripts: elf_helper: Tidy up get_symbols() to eliminate pylint warning
Using a member variable in the dict comprehension was probably a typo
(can't see 'sym' referenced elsewhere). Use a local variable instead.

Made pylint spit out these warnings (which might be spurious though):

    scripts/elf_helper.py:535:24: E0203: Access to member 'sym' before
    its definition line 536 (access-member-before-definition)

    scripts/elf_helper.py:535:39: E0203: Access to member 'sym' before
    its definition line 536 (access-member-before-definition)

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 11:06:33 -05:00
Ulf Magnusson
d5b0bd14e3 scripts: Remove unused imports in all Python scripts
Discovered with pylint3.

Upstream open-amp PR: https://github.com/OpenAMP/open-amp/pull/168

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 11:06:20 -05:00
Ulf Magnusson
12ba9dfa52 scripts: Remove unused variables in all Python scripts
Discovered with pylint3.

Use the placeholder name '_' for unproblematic unused variables. It's
what I'm used to, and pylint knows not to flag it.

Python tip:

    for i in range(n):
        some_list.append(0)

can be replaced with

    some_list += n*[0]

Similarly, 3*'\t' gives '\t\t\t'.

(Relevant here because pylint flagged the loop index as unused.)

To do integer division in Python 3, use // instead of /.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 11:06:20 -05:00
Ulf Magnusson
399c04ce5a scripts/dts: Remove unused variables and imports
Discovered with pylint3.

Use the placeholder name '_' for unproblematic unused variables. It's
what I'm used to, and pylint knows not to flag it.

Also improve the naming a bit in devicetree.py. If a key/value is known
to be a specific thing (like a node), then it's helpful to call it that
instead of something generic like "value".

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 11:06:01 -05:00
Ulf Magnusson
95650fdefa ext: open-amp: Fix broken typo'd sys.exit()
s/exist/exit/

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 11:05:38 -05:00
Song Qiang
cb26591fc7 sensor: fxos8700: add forgot int2 defines to dts_fixup.h
The last commit changes FXOS8700 to use new DT defines in its
dts_fixup.h, and the build was also succeeded after it. But
DT_NXP_FXOS8700_0_INT2_GPIOS_CONTROLLER and
DT_NXP_FXOS8700_0_INT2_GPIOS_PIN were missed so the build_all project
is still failing.

Signed-off-by: Song Qiang <songqiang1304521@gmail.com>
2019-03-28 10:54:31 -05:00
Yannis Damigos
5f83759c1b i2c_ll_stm32_v2: Disable ReloadMode, if needed, when error occurs
Disable ReloadMode, if needed, when error occurs in polling mode.

Fixes #14568

Signed-off-by: Yannis Damigos <giannis.damigos@gmail.com>
2019-03-28 09:42:35 -05:00
Johan Hedberg
49a34244be Bluetooth: Mesh: Remove redundant LOCAL_PUB_KEY flag
There's no need to track this info in prov.c since hci_core.c is
already doing it. Just query hci_core.c always using the
bt_pub_key_get() API.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:39:59 +01:00
Johan Hedberg
c6fa295e6a Bluetooth: Mesh: Fix disconnecting existing provisioning bearers
If PB-GATT is disabled while there are connected clients, those
clients must be disconnected. Add a 'disconnect` parameter to
bt_mesh_proxy_prov_disable() to handle scenarios when we don't want to
disconnect (e.g. right after successfully finishing provisioning) and
tose where we do want to disconnect (e.g. user requesting to disable
the provisioning bearer).

Also make sure that we always update advertising, so that a stale
advertising set isn't left in the controller.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:39:59 +01:00
Johan Hedberg
7d3b627e19 Bluetooth: Mesh: Fix re-initializing provisioning state upon reset
If both PB-ADV and PB-GATT are supported, we need to properly
re-initialize variables such as link.rx.prev_id and (particularly
importantly) link.rx.buf. If we don't do this it may lead to the
following fault when trying to reprovision again:

***** USAGE FAULT *****
  Illegal use of the EPSR
***** Hardware exception *****
Current thread ID = 0x20001f10
Faulting instruction address = 0x0
Fatal fault in thread 0x20001f10! Aborting.

Fixes #14928

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:39:59 +01:00
Johan Hedberg
87fe134e65 Bluetooth: Mesh: Fix gen_prov struct definition
Remove unnecessary const keywords (the entire struct is const) and use
bool instead of u8_t for the require_link member.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:39:59 +01:00
Cinly Ooi
097a71cbfe samples: watchdog: Confirm that reset occured
Updated test harness to check for a second instance of
"Watchdog sample application". This is to confirm the
board did reset itself.

Signed-off-by: Cinly Ooi <cinly.ooi@intel.com>
2019-03-28 09:35:30 -05:00
Johan Hedberg
672607c68a samples: reel_board/mesh_badge: Fix IV Index type
The IV Index is always a 32-bit value, so using u16_t for it was
confusing. Create a define for it, similar to other constant values,
to get rid of this confusion.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:29:54 +01:00
Anas Nashif
0b9dda321e CODEOWNERS: add owner for /dts/bindings/
@galak is now the proud owner of /dts/bindings/.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-03-28 10:25:02 -04:00
Johan Hedberg
b40235b3e0 Bluetooth: Mesh: Take advantage of settings_delete() when possible
Using settings_delete() makes it much easier to understand what the
code is doing, and actually also reduces the amount of code.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:23:46 +01:00
Johan Hedberg
35ebacbe06 Bluetooth: Clean up settings related code
Add error checking, remove redundant code, and improve the logging for
settings related functionality.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:23:46 +01:00
Johan Hedberg
f9450f072f Bluetooth: Remove unused ID_SIZE_MAX macro
There are no more user for this macro - just remove it.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:23:46 +01:00
Johan Hedberg
bcc2d8f0a9 Bluetooth: GATT: Fix attribute read return parameter type
The read() callback of attributes returns ssize_t and not size_t. Fix
this, which also fixes a Coverity warning.

Fixes Coverity CID 197457
Fixes #14958

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:22:22 +01:00
Johan Hedberg
12bf7e6ead Bluetooth: Use bt_addr_le_copy() instead of direct assignment
The convention in the code is to use the appropriate address copying
functions instead of direct assignments. Even when a specific copying
function doesn't exist the convention is to use memcpy.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 09:02:00 -05:00
Takumi Ando
bdde5fd984 driver: usb: nordic: Enable USB DC when VBUS is Hi
We want to enable USB DC at not only VBUS detection event
but also it has been already high.

Signed-off-by: Takumi Ando <takumi.ando@atmark-techno.com>
2019-03-28 14:59:01 +01:00
Daniel Leung
416d94cd30 kernel/mutex: remove object monitoring empty loop macros
There are some remaining code from object monitoring which simply
expands to empty loop macros. Remove them as they are not
functional anyway.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-03-28 08:55:12 -05:00
David Brown
22029275d3 kernel: Clarify warning about no multithreading
Clarify the warning in the help for CONFIG_MULTITHREADING to make it
clear that many things will break if this is set to 'n'.

Signed-off-by: David Brown <david.brown@linaro.org>
2019-03-28 09:49:59 -04:00
Krzysztof Chruscinski
bc3891ef03 CODEOWNERS: Add @nordic-krch and @jarz-nordic to shell, logging samples
They are already owners of modules itself but not the samples.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-03-28 08:41:28 -05:00
Krzysztof Chruscinski
fdc1ee59d8 sample: subsys: logging: Ensure that logger RTT backend is tested
Logger RTT backend should be compiled on the boards that have RTT.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-03-28 08:41:28 -05:00
Krzysztof Chruscinski
8dd015f49e sample: subsys: shell: Ensure that shell RTT backend is tested
Shell RTT backend should be compiled on the boards that have RTT.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-03-28 08:41:28 -05:00
Krzysztof Chruscinski
46936416ee boards: Remove enabling RTT by default on pca10040 and pca10056
nrf52840_pca10056 and nrf52_pca10040 was enabling RTT by default
for all samples. It has some implications like forwarding printk
to logger and that, as a default behavior, may not be welcomed.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-03-28 08:41:28 -05:00
Joakim Andersson
273796e1bb Bluetooth: controller: Fix unknown rsp received during enc procedure
The master is using unknown rsp to terminate slave side initiated
procedures that has collided with the encryption procedure initiated by
the master.
We need to handle an unknown response that is sent in unencrypted during
the encryption procedure, even though we have already set up to receive
encrypted packets.

Fixes #14044

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-03-28 14:41:10 +01:00
Vinayak Kariappa Chettimada
3353c9f3c8 Bluetooth: Fix scan failed to start due to RPA timeout
Updating the Resolvable Private Address when advertising and
active scanning in progress fails and clears the RPA_VALID
flag; making the next bt_le_scan_start while continuing to
advertise to fail.

This is fixed by keeping the RPA_VALID flag remain set.
Stopping and starting active scanning to update RPA can be
implemented in a separate commit.

Fixes #9463.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-03-28 14:37:58 +01:00
Andrzej Głąbek
436c4262da boards: nrf9160_pca10090: Fix LEDs active state
The nRF91 DK User Guide clearly says "the LEDs are active high,
meaning that writing a logical one ('1') to the output pin will
illuminate the LED".

Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
2019-03-28 08:32:23 -05:00
Mieszko Mierunski
0b2946f4f3 drivers: nrf: Add power management to uarte shim
Adds power management to uarte shim.

Fixes 12501

Signed-off-by: Mieszko Mierunski <mieszko.mierunski@nordicsemi.no>
2019-03-28 09:30:57 -04:00
Mieszko Mierunski
cbf4e54ead tests: uart: Add nrf9160_pca10090 to UART async test
Add nrf9160_pca10090 to UART async test.
Add myself as codeowner to uart_async_api tests.

Signed-off-by: Mieszko Mierunski <mieszko.mierunski@nordicsemi.no>
2019-03-28 09:30:57 -04:00
Mieszko Mierunski
48f005707e tests: uart: Add chained write test case for UART async API
Add new test case

Signed-off-by: Mieszko Mierunski <mieszko.mierunski@nordicsemi.no>
2019-03-28 09:30:57 -04:00
Mieszko Mierunski
b121660a8f drivers: nrf: Enable usage of Async UART API for UARTE on nrf91
Modify driver to use PPI or DPPI depending on soc.

Signed-off-by: Mieszko Mierunski <mieszko.mierunski@nordicsemi.no>
2019-03-28 09:30:57 -04:00
Mieszko Mierunski
7a0f921517 boards: nrf: Enable TIMER1 by default in nrf9160_pca10090
Enable TIMER1 by default in nrf9160_pca10090 so it can be selected
by user for hardware byte counting in UARTE or other purpose.

Signed-off-by: Mieszko Mierunski <mieszko.mierunski@nordicsemi.no>
2019-03-28 09:30:57 -04:00
Mieszko Mierunski
7700322961 dts: nrf: Add DPPIC to device tree.
Add DPPIC to dts. Add HAS_HW_NRF_DPPIC to nrf91 soc.

Signed-off-by: Mieszko Mierunski <mieszko.mierunski@nordicsemi.no>
2019-03-28 09:30:57 -04:00
Mieszko Mierunski
35aedfa532 drivers: nrf: Rework UARTE shim for uart ASYNC API.
Rework uart_nrfx_uarte shim to work with asynchronous API.

Signed-off-by: Mieszko Mierunski <mieszko.mierunski@nordicsemi.no>
2019-03-28 09:30:57 -04:00
Ulf Magnusson
7ccc7889fa logging: Remove SYS_LOG implementation
Replaced by the new CONFIG_LOG system.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 09:30:29 -04:00
Ulf Magnusson
eebce9d0e5 logging: doc: Remove SYS_LOG-related documentation
Replaced by the new CONFIG_LOG system.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 09:30:29 -04:00
Ulf Magnusson
0eb6ffa3e9 logging: kconfig: Remove legacy SYS_LOG symbols
Replaced by the new CONFIG_LOG system.

Also remove the "Logging Options" menu and turn the LOG symbol into a
'menuconfig', with prompt "Logging", which appears in the top menu. LOG
and its dependent symbols make up all of the logging Kconfig symbols
now.

Piggyback some minor cleanup.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-28 09:30:29 -04:00
Marc Herbert
682961a382 sanitycheck: document that --save-tests appends to existing file
Fix --help message. Also rename run_report() to save_tests() as it's
used only once by --save-tests and nowhere else. Maybe the code was
shared with some --other-report feature in the past but not any more.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2019-03-28 09:30:00 -04:00
Sebastian Bøe
7061c035cd kconfig: Move Kconfig.modules to the root build directory
Currently, the Kconfig.modules file is placed in the build directory
relative to the CMake "project". But technically, the file is not
project-specific, but global, or build-directory specific.

So we move it up one level to the CMAKE_BINARY_DIR instead. Currently,
there is only one project, so this change has no effect, but this
enables us to have multiple projects in the future, which again
enables multi-image builds.

Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
Signed-off-by: Håkon Øye Amundsen <haakon.amundsen@nordicsemi.no>
2019-03-28 09:23:02 -04:00
Aaron Tsui
51fafa7302 boards: nucleo_f746zg: Remove repetitive yaml line
repetitive line

Signed-off-by: Aaron Tsui <aaron.tsui@outlook.com>
2019-03-28 09:09:28 -04:00
Jakub Rzeszutko
6e861e1947 dts: update mermory regions for nrf chips
According to nrf51 and nrf52 specifaction every peripheral is
assigned a fixed block of 0x1000 bytes. Due to that dts for
nrf51 and nrf52 chips have been updated.
The only exception is gpio for nrf52840 where gpio0 and gpio1
share the same memory regions. For this reason, the definition
of gpio for nrf52840 is different from the others.

Signed-off-by: Jakub Rzeszutko <jakub.rzeszutko@nordicsemi.no>
2019-03-28 11:50:43 +01:00
Matias Karhumaa
933acfef43 usb: Fix ACL data tx stalling
This patch increases size of acl_tx_pool and makes sure that acl_read_cb
waits for available buffers.

Size of acl_tx_pool is now configurable with CONFIG_BT_CTLR_TX_BUFFERS.

Previously it was possible to run out of buffers and in that case
acl_read_cb returned. This caused ACL data TX to stall because device
did not read data from HCI out endpoint.

Fixes #14899

Signed-off-by: Matias Karhumaa <matias.karhumaa@gmail.com>
2019-03-28 10:48:26 +01:00
Andrew Boie
cf91f8cf90 elf_helper: fix debug_die call
debug_die() is not implemented in this class, and indeed we
don't even have a reference to the DWARF DIE object.

This is a fatal error anyway, just raise an exception.

Fixes #14762

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-27 16:37:49 -05:00
David B. Kinder
5d8e367efe doc: fix misspelling in docs and API comments
Fix misspellings missed during regular reviews.

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2019-03-27 15:59:09 -04:00
Jukka Rissanen
c3cf543452 net: ethernet: lldp: Use short types for ints
Instead of uint16_t and uint8_t, use u16_t and u8_t types.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-27 10:13:16 -05:00
Jukka Rissanen
0888b9f85c doc: net: Fix LLDP documentation
The LLDP documentation was missing descriptions for enums
and structs.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-27 10:13:16 -05:00
Jukka Rissanen
5378672d8a doc: net: Fix networking overview document
Add references to external documents like RFCs.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-27 09:59:48 -05:00
Jukka Rissanen
1564e205e0 doc: net: Minor fixes to BSD socket documentation
Some clarifications to BSD socket descriptions. Also added
rendering hints for some strings.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-27 08:37:39 -04:00
Andrzej Głąbek
2c3445b933 CODEOWNERS: Set @nordic-krch as the codeowner of the counter driver
As the author of the latest rework of the counter driver API,
@nordic-krch is a more appropriate person than me to be the codeowner
of this driver.

Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
2019-03-27 11:56:22 +01:00
Carles Cufi
082cf7ac64 logging: Clarify contract of log_output_func_t
The log_output_func_t backend function is supposed to either process or
drop bytes and return the amount of those to the caller. Clarify this in
the documentation.

Fixes #12241

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-03-27 09:50:12 +01:00
Marc Herbert
6f011c95c4 sanitycheck: don't generate the top-level Makefile in random order
Also add a "generated by sanitycheck" header to indicate origin and a
warning about the dependency required to actually run the test.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2019-03-26 22:23:56 -04:00
Thomas Ebert Hansen
d83f926c38 doc: security: Change link to development model.
The development model docs are now part of the technical docs.

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2019-03-26 22:21:59 -04:00
Thomas Ebert Hansen
2203489f6d doc: security: Update embargo period
The embargo period is 60 days.

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2019-03-26 22:21:59 -04:00
Thomas Ebert Hansen
eb34b86fe5 doc: security: Correct indentation
Use similar indentation as the other bullet points above.

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2019-03-26 22:21:59 -04:00
Thomas Ebert Hansen
bb881d2d9d doc: security: Update Security Group definition
Rewrite who the members of the Security Group are
and move the 'ability' of the members to an outer
bullet point.

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2019-03-26 22:21:59 -04:00
Thomas Ebert Hansen
f1ad50f85a doc: security: Reword unintelligible sentences
The sentence "To process process documentation." does not make
any sense at all.

Add missing "the" to the sentence "in form of".

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2019-03-26 22:21:59 -04:00
Thomas Ebert Hansen
7166e35487 doc: security: Correct statement about Coverity
Remove statement that static code analysis is planned for the future.

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2019-03-26 22:21:59 -04:00
Thomas Ebert Hansen
0f0103e0b1 doc: security: Unify citations
Use similar style for citations.
Add online references where applicable.

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2019-03-26 22:21:59 -04:00
Thomas Ebert Hansen
c9fec3ca7d doc: security: Fix section reference
Replace reference to Chapter 4 with Secure Design section.

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2019-03-26 22:21:59 -04:00
Thomas Ebert Hansen
33d1067d25 doc: security: Unify name of security subcommittee
Use the term 'Zephyr Security Subcommittee' where applicable.

Signed-off-by: Thomas Ebert Hansen <thoh@oticon.com>
2019-03-26 22:21:59 -04:00
Maksim Masalski
d1f3bba705 can: fix unchecked return from clock_control_get_rate
Inside can_stm32_runtime_configure() result of
clock_control_get_rate() is not checked which might result that
function can return error and that error can not be handled

Coverity-CID: 190926
Fixes: #13886
Signed-off-by: Maksim Masalski <maxxliferobot@gmail.com>
2019-03-26 22:18:15 -04:00
Maureen Helm
5cdbd39e33 soc: nxp_imx: Configure NUM_IRQS independently for each rt soc
Not all i.mx rt socs have the same number of irqs, so move the default
configuration from the soc series level to the individual socs. The
rt1020 hardware reference manual (IMXRT1020RM Rev.1 12/2018) incorrectly
documents 160 irqs (#142-159 reserved), but the soc actually has 142
irqs.

Fixes tests/kernel/gen_isr_table for the mimxrt1020_evk board.

Signed-off-by: Maureen Helm <maureen.helm@nxp.com>
2019-03-26 22:16:47 -04:00
Flavio Ceolin
2f26ace116 include: i2c: Add U to unsigned constants
Add U to unsigned integer constants to avoid implict cast

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 22:06:45 -04:00
Flavio Ceolin
5f5377f225 include: Add missing U for unsigned constants
MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 22:06:45 -04:00
Flavio Ceolin
c2b25151cb lib: printk: Make if/iterations evaluate boolean operands
MISRA-C rule 14.4

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 22:06:45 -04:00
Flavio Ceolin
2df02cc8db kernel: Make if/iteration evaluate boolean operands
Controlling expression of if and iteration statements must have a
boolean type.

MISRA-C rule 14.4

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 22:06:45 -04:00
Flavio Ceolin
3306a5862f arch: x86: Add missing U for unsigned constants
Add U for integer constants to avoid an implicit cast.

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 22:06:45 -04:00
Flavio Ceolin
44fc55e209 lib: crc16_sw: Add missing U to unsigned constants
Add U to unsigned integer constants to avoid implicit cast.

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 22:06:45 -04:00
Flavio Ceolin
000a256bb3 include: Make statements evaluate boolean expressions
MISRA-C requires that if/while statements have essentially a boolean
operand.

MISRA-C rule 14.4

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 22:06:45 -04:00
Flavio Ceolin
625ac2e79f spinlock: Change function signature to return bool
Functions z_spin_lock_valid and z_spin_unlock_valid are essentially
boolean functions, just change their signature to return a bool instead
of an integer.

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 22:06:45 -04:00
Flavio Ceolin
ce696e9aa2 lib: rb: Make operands have an appropriate essential type
MISRA-C 8.10.2 defines essential operand types and how to handle them
through rules 10.1 .. 10.5. This commit adds an U to unsigned constants
to avoid implicit casts and make if/while statements evaluate a boolean
to avoid other types being casted to boolean.

MISRA-C rules 10.1, 10.2 and 10.3

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 22:06:45 -04:00
Flavio Ceolin
fdfb2109a2 arch: Use macro BIT for shift operations
BIT macro uses an unsigned int avoiding implementation-defined behavior
when shifting signed types.

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 22:06:45 -04:00
Anas Nashif
006b97de13 tests: no-multithreading: do not report success twice
We are reporting success twice, once by calling macro directly, and once
by using ztest test_main().

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-03-26 20:09:07 -04:00
Anas Nashif
42f4538e40 kernel: do not use k_busy_wait when on single thread
k_busy_wait() does not work when multithreading is disabled, so do not
try to wait during boot.

Fixes #14454

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-03-26 20:09:07 -04:00
Charles E. Youse
eaf1c3b8a6 drivers/pci: stop using LOG_DBG()
When the console UART is a PCI device, and PCI debug logging is enabled,
the system crashes because the UART is initialized before logging, but
the UART initialization invokes the PCI subsystem which invokes logging.
Reordering the initialization sequence will not fix this chicken/egg.

Luckily, the LOG_DBG() calls in the PCI subsystem appear to be bitrot
leftovers from early development, so they are simply removed.

Also mark myself as the owner of the PCI subsystem.

Fixes: #14763

Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-03-26 23:56:02 +01:00
Jakub Rzeszutko
20e4ca48c7 shell: fix coverity issue in uart backend
Fixed coverity issue CID 196642

Fixes #14814

Signed-off-by: Jakub Rzeszutko <jakub.rzeszutko@nordicsemi.no>
2019-03-26 21:48:25 +01:00
Ravi kumar Veeramally
65d100e7f0 tests: net: Add more tests to ipv6 fragmentation
IPv6 fragmentation test case without any extra header (HBHO)
added.

Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2019-03-26 15:55:15 -04:00
Tedd Ho-Jeong An
b43ef2f4d9 samples: net: nats: Check null before dereferrencing the variable
This patch checks null before deferencing the variable.

Fix Bug: #14815
Coverity CID: 196641

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-03-26 14:13:24 -05:00
Krzysztof Chruscinski
aa0c417e38 logging: defines clean up
RTT backend supports two modes blocking and drop. Apparently,
defines used lead to warning while clang compilation. Define
that caused warning has been changed together with clean up
which removed #ifdefs for definitions.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-03-26 13:55:59 -05:00
Wayne Ren
6b5bed6aa9 arch: arc: fix the handling of stack check exception
stack check exception may come out with other protection
vilation, e.g. MPU read/write. So the possible paramter
will be 0x02 | [0x4 | 0x8].

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-26 14:34:39 -04:00
Flavio Ceolin
b2b4f09bed include: Add U for unsigned constants
Add U for integer constants to avoid an implicit cast.

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 14:31:29 -04:00
Flavio Ceolin
db990fc4e2 arch: arm: Use proper essential types in operands
MISRA defines a serie of essential types, boolean, signed/unsigned
integers, float, ... and operations must respect these  essential types.

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 14:31:29 -04:00
Flavio Ceolin
abf27d57a3 kernel: Make statements evaluate boolean expressions
MISRA-C requires that the if statement has essentially Boolean type.

MISRA-C rule 14.4

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 14:31:29 -04:00
Flavio Ceolin
063a9ce8c3 include: Make statements evaluate boolean expressions
MISRA-C requires that the if statement has essentially Boolean type.

MISRA-C rule 14.4

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 14:31:29 -04:00
Flavio Ceolin
2ecc7cfa55 kernel: Make _is_thread_prevented_from_running return a bool
This function was returning an essentially boolean value. Just changing
the signature to return a bool.

MISRA-C rule 14.4

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 14:31:29 -04:00
Flavio Ceolin
39a50f6392 arch: x86: Use proper essential types in operands
MISRA defines a serie of essential types, boolean, signed/unsigned
integers, float, ... and operations must respect these essential types.

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 14:31:29 -04:00
Flavio Ceolin
95eb2b4fed include: Use macro BIT for shift operations
Use a macro BIT when dealing with bit shift operations.

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 14:31:29 -04:00
Flavio Ceolin
a996203739 kernel: Use macro BIT for shift operations
BIT macro uses an unsigned int avoiding implementation-defiend behavior
when shifting signed types.

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 14:31:29 -04:00
Flavio Ceolin
d410611180 arch: Use macro BIT for shift operations
BIT macro uses an unsigned int avoiding implementation-defined behavior
when shifting signed types.

MISRA-C rule 10.1

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 14:31:29 -04:00
Paul Sokolovsky
85e64097e3 net: socket: Define flags for getaddrinfo()
Add various AI_* flags, similar to previously added flags for
getnameinfo(). All flags specified by POSIX are defined (with
values compatible with Linux), to allow to build existing
software which may refer to them. They can be implemented
gradually, as usecases arrive.

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2019-03-26 14:29:48 -04:00
Vincent Wan
11739f72df samples: net: mqtt_publisher: Add section on connecting with TLS
Adding a section to the sample's documentation to give some specific
instructions on how to try it with TLS enabled. This should be helpful
for users who are not knowledgeable with regards to creating/setting up
TLS certificates.

Signed-off-by: Vincent Wan <vincent.wan@linaro.org>
2019-03-26 14:22:57 -04:00
Piotr Mienkowski
371aea8735 console: deprecate console_register_line_input()
console_register_line_input() is a legacy function which forces console
subsystem to keep dependency on drivers/console. The two console
implementations are meant to be independent.

Console subsystem provides console_getline() function, which should be
used instead.

Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
2019-03-26 12:48:38 -05:00
Daniel Leung
c31e659165 codecov: avoid inlining functions for correct execution counts
This adds a compiler option -fno-inline for code coverage on
architectures which supports doing code coverage. This also
modifies the ALWAYS_INLINE macro to not do any inlining. This
needs to be done so code coverage can count the number of
executions to the correct lines.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-03-26 13:28:30 -04:00
Piotr Mienkowski
1b66d900a8 doc: update power management subystem documentation
This commit brings power management subystem documentation up to date
with the implementation. The main changes since the last time the
documentation was updated include introduction of power managment
policies.

Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
2019-03-26 13:27:55 -04:00
Piotr Mienkowski
155e11ca2d power: rename residency policy Kconfig options
Rename power managment subsystem Kconfig options describing minimum
residency to make them easier to identify with respective policy.

Following is a detailed list of string replacements used:
s/SYS_PM_SLEEP_(\d)_MIN_RES/SYS_PM_MIN_RESIDENCY_SLEEP_$1/
s/SYS_PM_DEEP_SLEEP_(\d)_MIN_RES/SYS_PM_MIN_RESIDENCY_DEEP_SLEEP_$1/

Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
2019-03-26 13:27:55 -04:00
Piotr Mienkowski
a3082e49a1 power: modify HAS_STATE_SLEEP_ Kconfig options
Add SYS_POWER_ prefix to HAS_STATE_SLEEP_, HAS_STATE_DEEP_SLEEP_
options to align them with names of power states they control.
Following is a detailed list of string replacements used:
s/HAS_STATE_SLEEP_(\d)/HAS_SYS_POWER_STATE_SLEEP_$1/
s/HAS_STATE_DEEP_SLEEP_(\d)/HAS_SYS_POWER_STATE_DEEP_SLEEP_$1/

Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
2019-03-26 13:27:55 -04:00
Piotr Mienkowski
17b08ceca5 power: clean up system power managment function names
This commit cleans up names of system power management functions by
assuring that:
- all functions start with 'sys_pm_' prefix
- API functions which should not be exposed to the user start with '_'
- name of the function hints at its purpose

Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
2019-03-26 13:27:55 -04:00
Piotr Mienkowski
204311d004 power: rename Low Power States to Sleep States
There exists SoCs, e.g. STM32L4, where one of the low power modes
reduces CPU frequency and supply voltage but does not stop the CPU. Such
power modes are currently not supported by Zephyr.

To facilitate adding support for such class of power modes in the future
and to ensure the naming convention makes it clear that the currently
supported power modes stop the CPU this commit renames Low Power States
to Slep States and updates the documentation.

Signed-off-by: Piotr Mienkowski <piotr.mienkowski@gmail.com>
2019-03-26 13:27:55 -04:00
Tedd Ho-Jeong An
f5c4e369ea net: sockets: Update setsockopt to handle IPV6_V6ONLY
This patch adds a routine that handles IPV6_V6ONLY option in setsockopt
function.

Fixes #14657

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-03-26 13:23:49 -04:00
Ulf Magnusson
e9c1d6d0ed scripts: gen_app_partition: Fix broken typo'd sys.exit()
os.exit() doesn't exist.

Also use the nifty sys.exit(msg) feature, which prints 'msg' to stderr
and exits with status 1.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 10:19:26 -05:00
Carles Cufi
42fcaf2df4 Bluetooth: shell: Add missing include path
When building ticker.c from the shell, it requires include access to the
Nordic HAL, so add the relevant folder to the include path.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-03-26 10:18:59 -05:00
Aaron Tsui
38dadb5fc5 samples: basic: disco_led without gpio driver
This sample did not enable gpio driver, so nothing happens after flash
firmware into a board.
By enabling gpio driver to fix it.

Signed-off-by: Aaron Tsui <aaron.tsui@outlook.com>
2019-03-26 09:00:44 -05:00
Anas Nashif
21de8733c6 doc: move usermode under references
Move usermode documentation to be under api reference and not under
kernel.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-03-26 09:50:16 -04:00
Alberto Escolar Piedras
46d9d3f6e9 arch: POSIX: Add Kconfig option to stop on all faults
Added an option to stop the execution of the posix arch based
executable on the first fault, even if the fault stemmed from a
non essential thread.
Having it fail faster, in the first fault, will ease debugging
in many cases.
The option is disabled by default to preserve the old behavior.

Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
2019-03-26 08:03:15 -05:00
Ulf Magnusson
ba312fe844 scripts: Remove unnecessary () around if/while conditions in Python
Not needed in Python. Detected by check C0325 in pylint3.

Also replace an

  if len(tag):

with just

  if tag:

Empty strings, byte strings, lists, etc., are falsy in Python.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:59:59 -05:00
Ulf Magnusson
0eee1f699b doc: conf.py: Fix spacing typos
These are probably not deliberate. Fixes some pylint warnings.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:59:33 -05:00
Ulf Magnusson
d83141535c scripts: Remove accidental semicolons in Python scripts
Making a clean slate for some pylint CI tests. Only enabling relatively
uncontroversial stuff.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:57:52 -05:00
Ulf Magnusson
781e554cbd power: Fix reference to CONFIG_SYS_PM_LOG_LEVEL
CONFIG_PM_LOG_LEVEL was renamed to CONFIG_SYS_PM_LOG_LEVEL in commit
c45961daae ("power: Rework OS <-> Application interface"), but the old
name is still used here. Fix the name.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:57:00 -05:00
Ulf Magnusson
735de5fc38 soc: kconfig: Simplify SOC_*_LD deps. with an 'if'
'if FOO' is equivalent to adding 'depends on FOO' to each item within
the 'if'.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:56:39 -05:00
Ulf Magnusson
056199d5a1 kconfig: Remove blank line at end of Kconfig file
This one got away in
https://github.com/zephyrproject-rtos/zephyr/pull/14452. Didn't spot
there were two blank lines.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:56:09 -05:00
Ulf Magnusson
19626892b5 kconfig: Replace two leftover 'gsource' with 'source'
Plain 'source' is globbing. 'gsource' is a leftover from an older
design, and works as a synonym for 'source'.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:55:35 -05:00
Ulf Magnusson
5c8fd84d12 scripts: Remove extra trailing newlines from Python scripts
Fixing all instances so that it can be flagged in a pylint CI check
later.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:53:08 -05:00
Jun Li
48ee3ee837 board: nucleo_f429zi: fix wrong comment
the clock is 168MHz instead of 180MHz.

Signed-off-by: Jun Li <jun.r.li@intel.com>
2019-03-26 07:51:20 -05:00
Ulf Magnusson
7da0053a0c scripts: gitlint: Fix broken module docstring
Needs to be at the beginning of the file. Fixes a pylint warning:

    scripts/process_gperf.py:26:-1: W0105: String statement has no
    effect (pointless-string-statement)

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:50:06 -05:00
Ulf Magnusson
9822b1dd1b doc: application.py: Remove unused _mkdir() 'compact' parameter
Found with pylint.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:49:35 -05:00
Flavio Ceolin
a1bfaa907c drivers: counter: stm32: Fix possible overflow
Cast ts to u32_t could cause an overflow in that multiplication, since
time_t is 8 bytes it is not necessary to cast the multiplication's
result too.

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-26 07:48:43 -05:00
Ulf Magnusson
1a27de0d31 scripts: gen_priv_stacks: Remove unused static kernel object stuff
Might've been a copy-paste from scripts/gen_kobject_list.py.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:47:36 -05:00
Ulf Magnusson
0aeba398fb doc: fix_tex: Remove redundant 'return'
Making a clean slate for some pylint CI tests.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:47:20 -05:00
Ulf Magnusson
2ce55e9e88 scripts: Fix bad indentation in Python scripts
Making a clean slate for some pylint CI tests.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:46:35 -05:00
Ulf Magnusson
605423f9b1 scripts: process_gperf: Fix broken module docstring
Needs to be at the beginning of the file. Fixes a pylint warning:

    scripts/process_gperf.py:26:-1: W0105: String statement has no
    effect (pointless-string-statement)

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:46:11 -05:00
Ulf Magnusson
047868f84a log: net: Fix CONFIG_LOG_IMMEDIATE typo in comment
CONFIG_LOG_IMMEDIATE_MODE doesn't exist, only CONFIG_LOG_IMMEDIATE.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-26 07:45:20 -05:00
Loic Poulain
d9be3f21f4 ext: hal: nxp: mcux: csi: Fix double buffering capture
In case of double buffering (two capture buffers), the CSI is
frequently starved because of a lack of buffer in the active pool.

You can find below an example of double buffering scenario:

                FREE_BUF  ACTIVE_BUF
start:              0          2
frame0_complete:    0          1  (no buffer to load in active)
resubmit_frame0:    1          1
frame1_complete:    1          0  (CSI stopped, active buf = 0)
resubmit_frame1:    2          0
                    0    ->    2  (CSI restarted)

This patch solves this issue by loading buffer to active at submit
time.

                FREE_BUF  ACTIVE_BUF
start:              0          2
frame0_complete:    0          1
resubmit_frame0:    1          1
                    0    ->    2  (Direct load to active)
frame1_complete:    0          1
resubmit_frame1:    1          1
                    0    ->    2
...

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2019-03-26 07:44:55 -05:00
Loic Poulain
27fe618076 api: counter: Fix build issue with C++
When compiling with CPP, compiler complains about multiple implicit
type convertion:

error: invalid conversion from ‘const void*’ to ‘const counter_config_info*’
...

Let's fix that using explicit casting.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2019-03-26 07:44:01 -05:00
Robert Lubos
1e0c7e4811 net: tls: Add credential type documentation
Add a brief description of available credential types.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2019-03-26 07:30:57 -05:00
Paul Sokolovsky
946836577b samples: sockets: Add e1000 and stellaris ethernet drivers overlays
Add qemu ethernet driver overlays for big_http_download and
dumb_http_server samples, which are default integration samples/
tests for TCP stack. This change follows up after similar addition
of such overlays to other samples (and smsc911x overlay addition
to these samples).

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2019-03-26 07:29:40 -05:00
Jukka Rissanen
079a2919cb tests: socket: tcp: Increase the buf count
With default buf count, we ran out of bufs in connect() in
test_v6_sendto_recvfrom().

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-26 07:29:26 -05:00
Jukka Rissanen
9cd547f53b net: tcp: Fix ref counting for the net_pkt
The network packet ref count was not properly increased when
the TCP was retried. This meant that the second time the packet
was sent, the device driver managed to release the TCP frame even
if we had not got ACK to it.

Somewhat long debug log follows:

The net_pkt 0x08072d5c is created, we write 1K data into it, initial ref
count is 1.

net_pkt_write: pkt 0x08072d5c data 0x08075d40 length 1024
net_tcp_queue_data: Queue 0x08072d5c len 1024
net_tcp_trace: pkt 0x08072d5c src 5001 dst 5001
net_tcp_trace:    seq 0x15d2aa09 (366127625) ack 0x7f67d918
net_tcp_trace:    flags uAPrsf
net_tcp_trace:    win 1280 chk 0x0bea
net_tcp_queue_pkt: pkt 0x08072d5c new ref 2 (net_tcp_queue_pkt:850)

At this point, the ref is 2. Then the packet is sent as you see below.

net_pkt_ref_debug: TX [13] pkt 0x08072d5c ref 2 net_tcp_queue_pkt():850
net_tcp_send_data: Sending pkt 0x08072d5c (1084 bytes)
net_pkt_unref_debug: TX [13] pkt 0x08072d5c ref 1 (ethernet_send():597)

Ref is still correct, packet is still alive. We have not received ACK,
so the packet is resent.

tcp_retry_expired: ref pkt 0x08072d5c new ref 2 (tcp_retry_expired:233)
net_pkt_ref_debug: TX [10] pkt 0x08072d5c ref 2 tcp_retry_expired():233
net_pkt_unref_debug: TX [10] pkt 0x08072d5c ref 1 ... (net_if_tx():173)
net_pkt_unref_debug: TX [10] pkt 0x08072d5c ref 0 ... (net_if_tx():173)

Reference count is now wrong, it should have been 1. This is because we
did not increase the ref count when packet was placed first time into
sent list in tcp.c:tcp_retry_expired().

The fix is quite simple as you can see from this commit.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-26 07:29:26 -05:00
Erwan Gouriou
25d04049ce samples/drivers/counter: alarm: fix printk usage
When displaying int and u32_t, use %u instead of %d.


Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
2019-03-26 07:29:08 -05:00
Erwan Gouriou
a5cb920227 driver/counter: rtc_stm32: Incorrect time_t offset
When converted to time_t, RTC init date was missing 100 years
offset, as time_t starts in 1900 while RTC starts in 2000.
Besides, tm_mon calculation was wrong by 1 month as allowed range
is 0-11 and provided in range 1-12.

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
2019-03-26 07:29:08 -05:00
Benjamin Valentin
c9907b438a drivers: spi: sam/sam0: Don't access uninitialized data
Set data->ctx.config before calling a function that operates on it.

Signed-off-by: Benjamin Valentin <benjamin.valentin@ml-pa.com>
2019-03-26 07:28:52 -05:00
Benjamin Valentin
388e9a6223 drivers: spi: sam/sam0: Don't claim support for async transfers
Asyc transceive is currently not implemented for this driver,
so don't claim support.

spi_context_lock() is already being called in spi_sam_transceive()
so calling it in the wrapper function will cause a deadlock.

This reverts eae05d928e

Signed-off-by: Benjamin Valentin <benjamin.valentin@ml-pa.com>
2019-03-26 07:28:52 -05:00
Filip Kubicz
521d046fdc USB: Fix warning in DFU class
Move unused variable to scope where it is used.

Signed-off-by: Filip Kubicz <filip.kubicz@nordicsemi.no>
2019-03-26 11:21:23 +01:00
Erwan Gouriou
7d81a099e6 Bluetooth: Mesh: Increase advertising thread stack size
With BT_HOST_CRYPTO, advertising stack size could be overflowed,
increase size to 1024 when BT_HOST_CRYPTO is enabled.

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
2019-03-25 22:51:18 -04:00
Ravi kumar Veeramally
2f941d2630 tests: net: ipv6: Add one more test case
Test case added for IPv6 neighbors. This will add more than
CONFIG_NET_IPV6_MAX_NEIGHBORS neighbors. Network stack should
remove oldest neighbor which is in STALE state and it should
add new neighbor. So call to net_ipv6_nbr_add() should succeed.

Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2019-03-25 22:49:52 -04:00
Ravi kumar Veeramally
f361859fde net: ipv6: Fix IPv6 neighbor table
This patch fixes following issues.

  * If IPv6 neighbor table is full, stack can not add any new
    neighbors. So stale counter is introduced. Whenever neighbor
    enters into STALE state, stale counter will be incremented
    by one. When table is full and if stack wants to add new
    neighbor, oldest neighbor in STALE state will be removed
    and new neighbor will be added.

  * When neighbor is in PROBE state and when it exceeds max
    number of PROBEs, only neighbor with router is removed.
    As per RFC 4861 Appendix C, entry can be discarded. Now
    neighbor will be removed from the table.

  * Reachability timer has an issue. e.g. if a first entry timer
    is 10 seconds, after 3 seconds, a new entry added with
    only 3 seconds. But current implementation does not check
    whether remaining time of current left over timeout is more
    than new entry timeout or not. In this example, when new entry
    timeout is 3 seconds, left over timeout from first etnry is
    still 7 seconds. If k_delayed_work_remaining_get() returns
    some value then new entry time out was not considered.
    Which is bad. It fixed now.

  * nbr_free is used sometimes to remove the neighbor. Which does
    not remove route if that particulat neighbor is route to some
    other neighbor. net_ipv6_nbr_rm() should be used in such places.

  * Trivial changes which does not affect functionality.

Fixes #14063

Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
2019-03-25 22:49:52 -04:00
Jukka Rissanen
059a14e166 samples: net: zperf: Update the README file
Clarify what iPerf version was used when testing this sample
application. It was iPerf 2.0.9 which worked ok, for example
iPerf 2.0.13 did not work properly with UDP uploader (client)
mode.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-25 22:48:32 -04:00
Jukka Rissanen
24de2f7e01 samples: net: zperf: Fix TCP uploader
Try to construct a proper iperf client header to the payload
as the server expects that. It is not sure if this is needed
or correct as there is no proper documentation for the iPerf2
protocol.

Fixes #14665

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-25 22:48:32 -04:00
Jukka Rissanen
cbeeb510c0 samples: net: zperf: Fix UDP uploader
Try to construct a proper iperf client header to the payload
as the server expects that. It is not sure if this is proper
way to do the iperf header as there is no documentation about
iPerf protocol anyway (except the iPerf source code).

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-25 22:48:32 -04:00
Marti Bolivar
2785bee30e west: require version 0.5.6
Set the revision to the v0.5.6 tag in west.yml and update the minimum
version. Barring any (more) major undiscovered issues, this will be the
version used with Zephyr v1.14.

Signed-off-by: Marti Bolivar <marti@foundries.io>
2019-03-25 22:46:56 -04:00
Krzysztof Chruscinski
e2de07b2f1 shell: Fix compile error when shell enabled and log disabled
Shell was selecting logger option which lead to define
CONFIG_LOG_RUNTIME_FILTERING generation even though log
was disabled. That messed up logger and lead to compilation
failure.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-03-25 22:45:08 -04:00
Krzysztof Chruscinski
808cc7c436 logging: Fix LOG_LEVEL_SET() not compiling when log disabled
When log is disabled then input parameter to LOG_LEVEL_SET(level)
is not defined. It was still used, leading to compilation failure.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-03-25 22:45:08 -04:00
Jukka Rissanen
a8b1dadac5 net: connection: Allow same port number for dest and source
Fix regression and allow incoming packet when source and
destination port numbers are the same.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-25 22:44:43 -04:00
Anas Nashif
cb8fb2d705 modules: remove tinycbor from ext/ and use west module feature
Use tinycbor from the tinycbor repo directly and drop the library from
ext/.

Add entry to west.yml and update SHA.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-03-25 22:41:01 -04:00
Tomasz Bursztyka
c0de64fc59 net/ipv6: Take iface's MTU into account to decide fragmenting or not
In case of Ethernet for instance, the MTU is larger than the minimal
IPv6 MTU, so it is not required to fragment a packet that fits in
Ethernet MTU.

Fixes #14659

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-25 22:33:41 -04:00
Ioannis Glaropoulos
3bc0f88653 doc: kernel: float: fix ARM-specific content
This commit updates the documentation as follows:
- stresses that the lazy stacking preservation is disabled
  by default and not supported in ARM Cortex-M builds,
- corrects the figure of extra stack requirement when
  floating point services are enabled in ARM builds.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-03-25 22:32:00 -04:00
Ioannis Glaropoulos
fd3c26a9f9 doc: kernel: float: several content fixes
This commit provides the following fixes:
- Corrects the note regarding which ARM MCUs may support
  floating point services
- Rewords the text stressing the undefined behavior when
  multiple threads access the floating point registers.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-03-25 22:32:00 -04:00
Erwan Gouriou
87cd5e7050 boards: stm32: Enable CCM and update yaml
Following fix SRAM size to take into account CCM,
enable CCM and update yaml files in boards including fixed soc
dtsi definitions.

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
2019-03-25 22:31:08 -04:00
Erwan Gouriou
d098c6005a dts: stm32: Fix erroneous RAM sizes when CCM is available
On various stm32 soc packages CCM is available and SRAM size
mentionned in datasheet include CCM.
Though, actual SRAM size defined in dtsi files should not
include CCM sizes.
Fix this on impacted dtsi files.

Fixes #14779

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
2019-03-25 22:31:08 -04:00
Ioannis Glaropoulos
2d43d181bf arch: arm: no special case for MPUs with power-of-2-align requirement
Field stack_info.size is supposed to hold the actual writable
thread stack area, above what is pointed to by stack_info.start.
Therefore, in all MPU architectures we can program the Thread
Stack MPU region as starting from thread->stack_obj and with
size equal to stack_info.size plus the (possible) difference
between stack_obj and stack_info.start.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-03-25 15:58:42 -04:00
Andrew Boie
6a764c1879 ARM: fix wrong stack bounds stored in thread
Consider a stack buffer at address 0x10000 with size 1024.
If a thread is created with this stack object, the resulting
fields in thread.stack_info ended up being a base address of
0x10020 with size 1024. The guard size needed to be subtracted
from the size in order for the bounds to be correct.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-25 15:58:42 -04:00
Aurelien Jarno
bf59fcb78c drivers: hwinfo: add driver support for Atmel SAM device ID
Add driver support for Atmel SAM device ID, which is 16-bytes long. On
this SoC family, the device ID is part of the flash controller and
complex to read. Therefore the driver reads it once at boot time and
then just returned the copy saved in RAM.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
2019-03-25 15:55:48 -04:00
Tedd Ho-Jeong An
2d8ac0cf5e tests: net: mld: Check return after updating packet
This patch checks the return value after updating the packet.

Fix Bugs: #14821
Coverity CID: 196635

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-03-25 15:53:13 -04:00
Anas Nashif
54ffd7cf18 doc: remove note about calling recheck in CI
The command `recheck` was always experimental and should not be part of
the contribution guidelines and flow. It is not working now, so remove
it from the docs.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2019-03-25 15:46:49 -04:00
Jukka Rissanen
295dc41c61 net: gptp: Rename z_gptp_pow2() to gptp_pow2()
The earlier removal of _ prefix went and renamed this func
and added z_ prefix. This is useless as the relevant macro
is called GPTP_POW2() so call the helper function as gptp_pow2().

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-25 14:43:23 -04:00
Jakub Rzeszutko
41ad9b716c shell: fix command bt scan
Command scan fixed in the way that it can take one mandatory parameter
and one optional. Previously it accepted only 2 mandatory parameters.

Signed-off-by: Jakub Rzeszutko <jakub.rzeszutko@nordicsemi.no>
2019-03-25 20:38:35 +02:00
Jakub Rzeszutko
4557b6b2d1 shell: removed dead code in bt command
Removed automatic argument count checking in bt command. Now
it is possible to print a message that extra argument is not
recognized.

Signed-off-by: Jakub Rzeszutko <jakub.rzeszutko@nordicsemi.no>
2019-03-25 20:38:35 +02:00
Jakub Rzeszutko
b6fc1af6ba shell: unify bt commands return value
Repleaced magic number 1 with define SHELL_CMD_HELP_PRINTED

Signed-off-by: Jakub Rzeszutko <jakub.rzeszutko@nordicsemi.no>
2019-03-25 20:38:35 +02:00
Tomasz Bursztyka
a10df124ba doc/networking: Add documentation on struct net_pkt and its API
Memory managment and operations.

Fixes #13114

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-25 13:50:55 -04:00
Tomasz Bursztyka
a96d066038 net/pkt: Switch function internal notes to doxygen details
Replace "Note:" to actual @details so it appears properly formated in
generated documentation.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-25 13:50:55 -04:00
Tomasz Bursztyka
632e3fb1ae net/pkt: Improve net_pkt_skip documentation.
Its behavior varies whether overwrite bit is set or not, so detailing
this more carefully.

Fixes #14093

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-25 13:50:55 -04:00
Tomasz Bursztyka
874b164df5 net/context: Fix net_context_send_cb documentation
status parameter documentation was outdated.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-25 13:50:55 -04:00
Jukka Rissanen
ac4db1b329 net: gptp: Fix bit shifting in time interval
It is invalid to try to bit shift the same amount of bits as
what is the number of bits in the left expression’s type.

Coverity-CID: 187079
Fixes #8988

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-25 13:38:38 -04:00
Andrei Emeltchenko
972221423c samples: usb: console: Select console device name
Instead of relying on overlays which requires to write overlay for
every board (100+) define console device name.

Fixes #14698

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-25 12:03:15 +01:00
Andrei Emeltchenko
de17b27886 usb: cdc_acm: Make ring buffer size configurable
Add new configuration parameter USB_CDC_ACM_RINGBUF_SIZE, default to
1024.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-25 12:03:15 +01:00
Andrei Emeltchenko
7ecd8d2ff3 samples: usb: cdc_acm_composite: Fix missing irq handling
If there are several queued interrupts we can miss some of them. Use
while() loop to catch them all.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-25 12:03:15 +01:00
Andrei Emeltchenko
cd95560cce usb: cdc_acm: Use ringbuf for RX path
Use ringbuf library for handling RX CDC ACM path. Remove old code
artifacts handling specific hardware.

Fixes #14288

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-25 12:03:15 +01:00
Andrei Emeltchenko
57b92e90fe usb: cdc_acm: Make parameters boolean
Remove 'U' after every assignment and make code more logical.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-25 12:03:15 +01:00
Alberto Escolar Piedras
6dce703c37 doc: Bluetooth: Correct how to run native_posix
1. The build paragraph was listed with the run option.
   But, we need to pass an argument to the native_posix board,
   so "ninja run" alone is not good enough.
   Plus, it was not coherent with the rest of the text, as
   the paragraph intended to tell people how to build.
2. Added "sudo" to the run line, as the user needs extra
   permissions to connect to a host BT controller.

Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
2019-03-25 09:21:08 +01:00
Johan Hedberg
f811e5446a Bluetooth: Fix missing checks for the BT_DEV_READY flag
Several public APIs were not checking the BT_DEV_READY flag, which
could lead to hard-to-debug behavior, particularly when the stack
lacks an identity address. Add the appropriate checks to these APIs.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-25 10:04:45 +02:00
Johan Hedberg
12a413779d Bluetooth: Fix init procedure handling with BT_SETTINGS
The treatment of the BT_DEV_READY flag was broken when used together
with BT_SETTINGS. The flag would get set even though the stack was
still in a partially initialized state. Even worse, for central role
the stack would potentially try to initiate passive scanning without
having an identity address.

Refactor the code that sets the BT_DEV_READY flag (among other
initialization) into a separate bt_finalize_init() helper function and
call it when the settings have been loaded. Also clarify the warning
message given to the user in case settings_load() needs to be called.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-25 10:04:45 +02:00
Tedd Ho-Jeong An
5d35b66327 Samples: net: can: initialize the variables
Initialize the variables.

Fix Bug: #14819
Coverity CID: 196637

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-03-24 10:55:06 -05:00
Flavio Ceolin
f1741dab6c tests: mbox: Check k_mbox_get return
Coverity was complaining that this function was not being checked only
in a specific case.

Coverity CID: 183066

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-23 20:13:12 -04:00
Ulf Magnusson
c8687915ce x86: gen_mmu_x86: Fix error-reporting code for non-page-aligned region
%z isn't available in Python, and makes the code raise a ValueError. Use
%d instead. Integers in Python 3 are not sized/signed (though it's
probably a typo from C).

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-23 19:53:16 -04:00
Andy Ross
61065b3235 tests: samples: Re-enable SMP on a few tests
The 14 individual cases that use these four config files are now
passing reliably when SMP is enabled, after the "Mark sleeping threads
suspended" scheduler fix.  Turn it back on.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2019-03-23 19:28:15 -04:00
Andy Ross
09fdd814df tests/kernel/smp: Give time for a wakeup to take effect
For obvious performance reasons, scheduler state changes (other than
aborting a thread) do not cause synchronous interrupts on the other
CPU.  Doing a k_thread_wakeup() means that the current CPU will run it
synchronously if it's high priority, but if you want to see it run on
the other cores you need to wait for them to reach a scheduling point
on their own.

The test was written to assume that k_thread_wakeup() is synchronous,
but that's not right, and it needs to spin a bit.  This bug was always
present in the test, but masked by a bug in the way that k_sleep() was
handled on SMP.  See #9506.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2019-03-23 19:28:15 -04:00
Andy Ross
4521e0c111 kernel/sched: Mark sleeping threads suspended
On SMP, there was a bug where the logic that re-adds _current to the
run queue at swap time would accidentally reschedule threads that had
just gone to sleep, because the is_thread_prevented_from_running()
predicate only tests for threads that are "suspended" or "pending" and
not sleeping.

Overload _THREAD_SUSPENDED to indicate "sleeping" also.  Simple fix
for an immediate bug, though long term we really want to unify all the
blocked conditions to prevent this kind of state bug.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2019-03-23 19:28:15 -04:00
David B. Kinder
223bbecf45 doc: fix ACRN board list format
One of the bullet list items didn't get rendered properly because
continuation line wasn't indented.

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2019-03-23 19:26:27 -04:00
Johan Hedberg
7c4a229b0e settings: Fix check for duplicate when new value is smaller
The code for checking duplicates in the existing settings store was
incorrectly identifying a new value with the same initial content but
shorter length as a duplicate. Fix this by doing an early check on a
new vs old length mismatch, and immediately flag this as not a
duplicate.

Fixes #14840

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-23 22:47:00 +02:00
Johan Hedberg
58b17ed0e5 settings: Enforce value & length consistency in settings_save_one()
Enforce that NULL value is never given with a non-zero length. This
way we don't need to check this over and over again further down the
call path.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-23 22:47:00 +02:00
Andy Ross
e59d19628d kernel/sched: Rework prio validity assertion
This is throwing errors in static analysis, complaining that comparing
that a prior is higher and lower is impossible.  That is wrong per my
eyes (I swear I think it might be cueing off the names of the
functions, which invert "higher" and "lower" to match our reversed
priority numbers).

But frankly this was never a very readable macro to begin with.
Refactor to put the bounds into the term, so the static analyzer can
prove it locally, and add a build assertion to catch any errors (there
are none currently) where the low<->high priority range is invalid.

Long term, we should probably remove this macro, it doesn't provide
much value.  But removing it in response to a static analysis failure
is... not very responsible as a development practice.

Fixes #14816
Fixes #14820

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2019-03-23 09:53:55 -05:00
Flavio Ceolin
9d5936c04f lib: posix: fs: Fix access invalid memory
fs_dirent.name is MAX_FILE_NAME + 1 bytes long, not PATH_MAX. Just
fixing it to avoid access invalid memory.

Coverity CID: 186037

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-23 09:52:51 -05:00
Flavio Ceolin
8945426026 samples: 96_argonkey: sensors: Check function return
Checking the return of sensor_trigger_set and if it fails log the
problem and exits.

Coverity CID: 186196

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-23 09:52:51 -05:00
Flavio Ceolin
ef0417fa6d samples: ipc: openamp: Avoid dead code
Checking the return of metal_init to avoid having dead code.

Coverity CID: 190932

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2019-03-23 09:52:51 -05:00
Andrei Gansari
22cf6d98ee arch: arm: fix thread's FPU initialization
FPU's control and status register (FPCSR) for a thread is not
initialized. Random values are written to this register and this leads
to failure on fp_sharing test.
FPCSR register is set to 0 according to the value of FPDSCR.

Signed-off-by: Andrei Gansari <andrei.gansari@nxp.com>
2019-03-22 11:17:44 -05:00
Wayne Ren
62da238571 board: emsk: fix the wrong info about DDR
DDR's info should come from DT_MMIO_SRAM_0

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-22 08:35:26 -05:00
Wayne Ren
b962789b9e board: emsk: fix the bug in dts
As em7d is configured with HARVARD, CCM will be used not DDR,
SRAM should point to DCCM.

This bug will cause the wrong caculation of heap area,

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-22 08:35:26 -05:00
Joakim Andersson
66d339a7c9 Bluetooth: controller: Fix scanner memory corruption
Fix a bug where the controller would use the length
field of the advertisement packet before checking
if the length field was valid.
It is possible that the controller has received a packet
that passes CRC check but has a length field that is invalid.
This would cause the scanner to overwrite the scan report
buffer

Fixes: #14741
Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-03-22 13:58:24 +01:00
Wayne Ren
bcdfc9f1ac arch: arc: fix the unaligned declaration of saved_value
the original declaration is not aligned to 4 bytes.

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-22 07:21:11 -05:00
Erwan Gouriou
2a605ea226 boards: stm32f4_disco: Update openocd config
When using V0.10.0 SDK, flashing is not working anymore on
stm32f4_disco.
Using st_nucleo_f4.cfg instead of stm32f4discovery.cfg solves
the issue.

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
2019-03-22 07:19:32 -05:00
Luiz Augusto von Dentz
ef9c7a4b5d Bluetooth: samples: IPSP: Fix not checking return of net_pkt_read
net_pkt_read may fail in which case the error shall be reported back
instead of always assuming the whole packet was read.

Fixes #14817

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-03-22 12:13:42 +02:00
Carles Cufi
cb44b7e768 doc: Bluetooth: Document the debug monitor and btmon in general
Move the original documentation in the arduino_101 board to a common
section in the Bluetooth documentation and document the use of `btmon`
in general.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-03-21 17:23:08 +02:00
Carles Cufi
c616f215b0 boards: nrf: Add bt-mon-uart to all nRF-based boards
Add the bt-mon-uart chosen node to all the nRF-based boards so that they
can all use CONFIG_BT_DEBUG_MONITOR without additional changes.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2019-03-21 17:23:08 +02:00
Arun Joshi
373a42b861 host-tools.cmake: Corrected sdk download url
Corrected sdk download url for 0.10.0

Signed-off-by: Arun Joshi <arun1.joshi@intel.com>
2019-03-21 09:07:53 -05:00
Jukka Rissanen
cda61d2a63 samples: net: dhcpv4: Add net-shell and e1000 driver support
The dhcpv4-client is more usable if it has net-shell. For testing
with qemu_x86, the e1000 overlay config is very useful.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-21 09:03:26 -05:00
Andrei Emeltchenko
5a7fd0ebc9 usb: netusb: ecm: Print packet hexdump only for VERBOSE_DEBUG
Use VERBOSE_DEBUG to enable net_pkt_hexdump().

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-21 09:01:36 -05:00
Andrei Emeltchenko
4496e99869 usb: netusb: rndis: Remove old unused code
Remove old unused code sending media status, sending this packet
causes Windows problems although Linux works with it. Removing this
code does not affect RNDIS functionality.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-21 09:01:36 -05:00
Andrei Emeltchenko
276f50a623 usb: netusb: rndis: Fix maximum RNDIS frame size
Use standard NET_ETH_MAX_FRAME_SIZE in calculation adding space for
ethernet header.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-21 09:01:36 -05:00
Andrei Emeltchenko
48be0443b7 usb: netusb: eem: Add check for large packets
Make sure we do not overwrite tx_buf.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-21 09:01:36 -05:00
Andrei Emeltchenko
f4bfca6e44 usb: netusb: eem: Use NET_ETH_MAX_FRAME_SIZE as frame size
Use standard NET_ETH_MAX_FRAME_SIZE for frame size calculation. This
changes buffer from 1522 to 1514 + 2 + 4. Remove also magic numbers.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-21 09:01:36 -05:00
Andrei Emeltchenko
57041dd9c0 usb: netusb: ecm: Add check for large packets
Make sure we do not overwrite tx_buf.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-21 09:01:36 -05:00
Andrei Emeltchenko
7ee481aad7 usb: netusb: ecm: Use NET_ETH_MAX_FRAME_SIZE as frame size
Use standard defined frame size for buffer and wMaxSegmentSize
parameter. Changes frame size from 1522 to 1514.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-21 09:01:36 -05:00
Andrei Emeltchenko
00c58f770b usb: netusb: rndis: Add check for large packets
Drop packets larger then tx_buf.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-21 09:01:36 -05:00
Andrei Emeltchenko
742c177977 usb: netusb: Cleanup USB Ethernet networking
Cleanup ECM, EEM and RNDIS networking functions, removing unneeded
headers and unused definitions.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2019-03-21 09:01:36 -05:00
Kumar Gala
7aa98f7196 ci: Bump to image 0.6.4 for west
Move to using CI image to 0.6.4 for west version 0.5.6

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-03-21 09:00:57 -05:00
Johan Hedberg
3ebd9b4a09 Bluetooth: Mesh: Fix clearing model binding and subscriptions
The code for clearing model bindings and subscriptions was flawed in
that proper "cleared" entries were never stored in settings. The code
must pass 0 and NULL to settings_save_one() in case the entry is
desired to be cleared.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-21 10:10:52 +02:00
Johan Hedberg
dac335c238 Bluetooth: Mesh: Fix clearing model subscription list
The code was storing a "cleared" entry in storage for every model,
regardless of them having any subscriptions or not. Update hte
mod_sub_list_clear() function to return a "cleared entries" count so
that the calling code can decide whether any action is needed or not.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-21 10:10:52 +02:00
Johan Hedberg
a0d762999d Bluetooth: Mesh: Clean up logging related to settings storage
Remove redundant "val (null)" logs and add a few missing BT_DBG()
calls to make the tracing of storage handling easier.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-21 10:10:52 +02:00
Johan Hedberg
4cac39e14a Bluetooth: Fix missing return statement in le_conn_param_req()
The le_conn_param_req() function was missing a return statement in
case of a failed connection lookup. This could lead to replying to the
connection parameter request twice as well as passing NULL to
bt_conn_unref(). The latter issue also triggered a Coverity warning.

Fixes CID 196638

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-21 10:05:47 +02:00
Marc Herbert
7d3fbfccd1 host-gcc/target.cmake: stop discarding CMAKE_<tool>_FLAGS for x86
Prepend -m32 to existing flags as opposed to silently override and
discard them:

- set(CMAKE_<tool>_FLAGS                -m32 )
+ string(PREPEND CMAKE_<tool>_FLAGS   " -m32")

This stops discarding additional flags passed with either cmake
-DCMAKE_<tool>_FLAGS="-fu -bar" or cmake -C params.cmake.

Note this bug was affecting only the combination of x86 and
CMAKE_<tool>_FLAGS. x86_64 wasn't affected and other, non-empty
CMAKE_<tool>_FLAGS_[DEBUG/RELEASE/etc.] weren't affected either.

Also convert flags string to list when invoking --print-libgcc-file-name
to support more than one CMAKE_C_FLAGS.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2019-03-21 00:21:27 -07:00
Andrew Boie
1f6ab221f2 arc: fix off-by-one in mpu_buffer_validate()
The code was probing the byte immediately after the last byte
of the buffer, instead of the last byte of the buffer.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-20 18:33:08 -07:00
Daniel Leung
71b4137d30 adc: overhaul adc_dw and rename it to adc_intel_quark_se_c1000_ss
Since commit 0906a51dac, the driver
fails the test: tests/drivers/adc/adc_api. Some of the workflow
turns out to be incorrect (e.g. not doing dummy conversion after
getting out of deep power down, and not clearing interrupt status
bits). So take some time to overhaul the driver. Also rename
the driver to adc_intel_quark_se_c1000_ss because the inner
working of this driver is tied to Quark SE C1000 SoC.

Fixes: #12632

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-03-20 18:11:33 -07:00
Daniel Leung
86e473832a adc: quark_d2000: fix sampling conversion
The logic in sampling is incorrect. The code sets up the hardware
to do multiple conversions, but in reality, each call is simply
one conversion. So fix it.

Fixes #12632

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-03-20 18:11:33 -07:00
Charles E. Youse
8e85d7d6c0 net/ip: fix input packet filtering criteria
The "is this packet for us?" filter in net_ipv4_input() has a minor
logic error which fails to discard many packets which are.. not for us.

Fixes: #14647

Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-03-20 16:37:12 -05:00
Andrzej Puzdrowski
6b62e5e44e settings: remove dead code
Patch removes dead, replaced code which was accidentally not
removed within the stream-codec PR #9521.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-03-20 16:35:19 -05:00
Jukka Rissanen
bf8d391ad4 net: context: Check if we run out of mem
The context_alloc_pkt() might run out of memory, and if that
happens we must not try to set the context pointer in it.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-20 16:32:16 -05:00
Paul Sokolovsky
69afd80a3d net: ip: connection: Typo fixes in comment
Fix typos and reword code comment on module dependencies a bit.

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2019-03-20 16:24:05 -05:00
Andrew Boie
f4631d5b43 kernel: amend comment in k_thread_create handler
This behavior is expected and not of any concern.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-20 13:59:26 -07:00
Andrew Boie
d0035f9779 kernel: fix stack size check in k_thread_create
The pointer arithmetic used didn't account for ARC
supervisor mode stacks, which are allocated at the
end of the stack object. Use the new macro to know
exactly how much space is reserved.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-20 13:59:26 -07:00
Andrew Boie
575abc0150 kernel: add K_THREAD_STACK_RESERVED
This is used to have each arch canonically state how much
room in the stack object is reserved for non-thread use.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-20 13:59:26 -07:00
Andrew Boie
02f64c6846 arm: remove duplicate stack macro docs
These intefaces are already documented in kernel.h.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-20 13:59:26 -07:00
Kumar Gala
d6eaf5f7e9 cmake: Bump min SDK version to 0.10.0
We need the 0.10.0 release for new support for the ARM-v8m SoCs and
RISC-V.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-03-20 15:26:49 -05:00
Kumar Gala
c6662826b7 net/pkt: Fix a few left over cases of net_pkt_read_new
In the conversion of net_pkt_read_new to net_pkt_read, we missed
changing the function in the eth_smsc911x and eswifi_offload.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-03-20 15:26:30 -05:00
Jukka Rissanen
3f34fead60 log: net: Fix the immediate logging mode in network backend
If CONFIG_LOG_IMMEDIATE is enabled, then we need to handle
the output strings using a different output function.
The issue was noticed with native_posix board where no syslog
output strings were sent to network.

Fixes #14661

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-20 11:38:29 -05:00
Vincent Wan
111dab4a25 samples: sockets: echo_async: Add support for cc3220sf_launchxl
Adding support for cc3220sf_launchxl by introducing a board-specific
Kconfig file.

Signed-off-by: Vincent Wan <vincent.wan@linaro.org>
2019-03-20 11:36:18 -05:00
Vincent Wan
734e247d02 samples: sockets: echo_async: Make IPV6 optional
Changing the example to not use IPv6 when it is not configured,
given IPv6 is not enabled on some platforms such as cc3220sf_launchxl.

Signed-off-by: Vincent Wan <vincent.wan@linaro.org>
2019-03-20 11:36:18 -05:00
Vincent Wan
a69955701d drivers: wifi: simplelink: Implement fcntl to set/get non-blocking mode
This commit implements fcntl() in the SimpleLink Wifi driver to set and
get the non-blocking mode on a socket.

Fixes #11891.

Signed-off-by: Vincent Wan <vincent.wan@linaro.org>
2019-03-20 11:36:18 -05:00
Vincent Wan
ec33d24017 ext: simplelink: add workarounds when using POSIX headers
Adding additional workarounds to cc_pal.h that are necessary due to the
fact that the POSIX subsys does not integrate well with other parts of
Zephyr, as per discussion in #13444. These workarounds are needed when
fcntl.h is included, to avoid symbols from being redefined in POSIX
headers. They disable some POSIX headers and define what is necessary
for the code to compile.

We should aim to remove these when the integration story has improved.

Signed-off-by: Vincent Wan <vincent.wan@linaro.org>
2019-03-20 11:36:18 -05:00
Vincent Wan
3609e261bb net: sockets: move fcntl back to socket_offload.c
We are reverting the changes in commit
55b3f05932 given build errors are seen
when fcntl.h is included, as it declares fcntl() as a non-static
function. The same function cannot be declared as both static and
non-static.

Instead, we avoid redefining fcntl() in lib/os/fdtable.c specifically
for case of the SimpleLink family, til we have support for the new
socket_op_vtable.

Signed-off-by: Vincent Wan <vincent.wan@linaro.org>
2019-03-20 11:36:18 -05:00
Tomasz Bursztyka
1a98d4d1fe net: Move the chksum offload verification to relevant places
Since the new packet flow came in, payload comes at the end so udp
length for instance is known only when we "finalize" the packet.
However such finalization was still under the condition of chksum
offload, like it used to be in the former flow (udp headers were
inserted). This is obviously wrong but that was not caught with
existing driver in master as none of these drivers offloading
chksum calculation.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 11:34:14 -05:00
Andy Ross
4f04f6486d tests: More SMP disablement
A few more test cases that are measurably unreliable when run in SMP.
For the most part these work most of the time (though the semaphore
one was pretty borderline -- I measured about 25% failures), but are
measurably unstable against the backdrop of known qemu instability.
Something is clearly going on and we need to come back to these to fix
threadsafety issues.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2019-03-20 11:33:29 -05:00
Robert Lubos
e39aed53a2 samples: net: Update overlay-bt.conf in various samples
`CONFIG_NET_L2_BT` no longer forces required BT configuration, but
depends on a user to set a valid configuration instead. Hence, we
need to select a proper configuration in the overlay config file.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2019-03-20 11:32:40 -05:00
Tedd Ho-Jeong An
980cf393f0 Samples: echo-client: Add overlay when echo-server is running on Linux
This patch adds the overlay when the echo-server is running on Linux and
echo-client is running on Qemu.

Fix: #14654

Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
2019-03-20 11:31:57 -05:00
Thomas Stenersen
db90e24326 drivers: nrf: add support for forcing driver implementation
An external project extending the Zephyr RTOS and its drivers may have
subsystems that must use its own specific driver(s) when active. One
example is the nRF5x NVMC that must be scheduled in between radio
operations. A subsystem may also be dependent on its own drivers for
security, real-time and/or because of hardware constrains.

In order to not introduce non-Zephyr specific code into the Zephyr tree,
an option is added to disable the in-tree drivers in Zephyr. Because
Kconfig does not support a good way of de-selecting other symbols, a
variable on the form `<DRIVER>_FORCE_ALT` is added as a
dependency for each `<DRIVER>`. For example, the out-of-tree subsystem
will select `FLASH_NRF_FORCE_ALT` to disable the in-tree driver. A
solution for issue #8181 would open up for a more general solution,
however #8181 requires significant effort.

Support for out-of-tree drivers is added to Nordic drivers for
clock_control, entropy and flash.

A generic solution for this is desired. Issue #14527 is tracking that
progress.

Signed-off-by: Thomas Stenersen <thomas.stenersen@nordicsemi.no>
2019-03-20 10:27:28 -05:00
Michael Scott
4f707ae896 net/context: Relocate offload handling in net_context_connect()
Commit fc27a81ed2 ("net: context: Select proper network interface
when binding") moved the bind_default() call to after the remote
address was set for the net_context.

This and a later net_pkt API refactor broke net_offload() handling
so that context->iface wasn't set and context->flags didn't have
NET_CONTEXT_REMOTE_ADDR_SET correctly.

Let's fix this by relocating the net_offload handling to after
these have happened.

Signed-off-by: Michael Scott <mike@foundries.io>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
ebb3ca9430 net/pkt: Remove now useless attribute data_len
This reduces net_pkt structure size.
Moving sent_list attribute for better alignment.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
84909970a0 net/pkt: Remove unused legacy net_pkt allocator
Now, only net_pkt_alloc and variants are used.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
cf322c44db net: Switch usage of net_pkt_get_reserve to net_pkt_alloc
Some places were still using the old allocator. Using the new one does
not change any behavior. This will help to remove the useless data_len
attribute in net_pkt which legacy allocator was still setting.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
89c4a4a26f net/context: Re-enable offloaded send/sendto
net_offload API is left untouched, so it still takes a net_pkt as input
for the buffer. This is under-optimized since offload drivers will copy
the data from that net_pkt back into contiguous buffer again.
Let's tackle this issue another time.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
a57e218965 net/offload: Remove useless token parameter
This parameter was removed from net_context already thus applying the
change also on net_offload API.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
730b5de6d9 net/pkt: Remove superfluous total_pkt_len attribute
This attribute, in case CONFIG_NET_STATISTICS is enabled, made sense
when L2's send() function did not return the length of the sent packet.
But now, it's a superflous optimization as is it used only to set the
stats on recv or send, where net_pkt_get_len() can be used directly.

This helps to save 2 bytes from struct net_pkt.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
03bfc5dd0f net/context: Remove token parameter from net_context_send/sendto
And also to the relevant callbacks.

That parameter is not used anywhere so it is useless.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
7d97a1871a net/pkt: Remove unused token attribute
Seems like a useless attribute. Since net_context is not being used by
the user directly (socket is the unique interface now) and since no core
parts uses the token parameter of net_context API: let's remove the
attribute.

This helps to save 4 bytes from struct net_pkt.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
39504c2560 net/pkt: Remove legacy net_frag_linear_copy function
This function is now superseded by net_pkt_read() and is no longer
used.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
ec3fe5560b net/pkt: Remove legacy net_pkt_append functions
These were based on the former allocation scheme and are no longer used.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
23b753feed net/pkt: Remove legacy net_frag_read/skip/get_pos functions
These were based on the former allocation scheme and are no longer used.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
d6d52ce9e5 net/pkt: Remove _new suffix to net_pkt_write functions
Suffix is now useless, as these functions are now the only ones.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
a15654980e net/pkt: Remove legacy net_pkt_insert functions
These were based on the former allocation scheme and are no longer used.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
ea518af5dd net/pkt: Remove legacy net_pkt_write functions
These were based on the former allocation scheme and are no longer used.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
a25f054cbd net/pkt: Remove _new suffix to net_pkt_read functions
Suffix is now useless, as these functions are now the only ones.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
f8a091104e net/pkt: Remove _new suffix to net_pkt_get_data_new function
Now that legacy - and unrelated - function named net_pkt_get_data has
been removed, we can rename net_pkt_get_data_new relevantly.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
2022aa3484 net/pkt: Remove now useless net_pkt_get_data()
That function was responsible for allocating new buffer element, but it
is now unused and can be removed safely. Buffer allocation is now done
via net_pkt_alloc_buffer().

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
7e4f03aabe net/icmpv4: Remove unused net_icmpv4_set_checksum function
Checksum is now set via net_icmpv4_finalize() function.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
820f3ad006 net/ipv6: Replace legacy net_ipv6_create by the new one
Thus removing the legacy one, and renaming the new one to legacy name.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
ca58b4c761 net/ipv4: Replace legacy net_ipv4_create by the new one
Thus removing the legacy one, and renaming the new one to legacy name.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
172fe5a87b net/context: Remove _new suffix on net_context_send/sendto functions
Now that legacy functions are removew, let's rename the new functions by
removing the _new suffix.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
62ab954251 net/pkt: Remove appdata/appdatalen attributes and related functions
There is no need for these anymore: all is dictated by the position of
the net_pkt's cursor now

- actual cursor position is like the former appdata attribute
- net_pkt_remaining_data() is like the former appdatalen attribute

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
54ac7a43e9 net/udp: Remove net_udp_insert legacy function
It is unused anywhere now.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Tomasz Bursztyka
0b173e3b77 net/context: Remove legacy API
Former net_context_send/sendto and net_context_create_ipv4/ipv6 are now
unused and can be removed.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-20 10:27:14 -05:00
Filip Kubicz
d9e212d4f8 settings: logging: Add log_strdup to error messages
In case of corrupted key in settings, error message is shown. However,
the key name is lost by logger if it is not explicitly copied.

Signed-off-by: Filip Kubicz <filip.kubicz@nordicsemi.no>
2019-03-20 12:22:35 +01:00
Andrew Boie
d1f420697c arc: fix build error when MPU guards are enabled
Incorrect member name of struct k_thread.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-20 00:36:01 -07:00
Wayne Ren
0f702eba74 board: nsim: optimize the timer accuracy of timer
* use 10 Mhz of host timer as timer source

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-20 00:35:43 -07:00
Wayne Ren
c632ddaea3 cmake: add debugserver target for nsim
add debugserver target to run  "make debugserver" for nsim

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-20 00:35:43 -07:00
Andy Ross
3dea408405 kernel/sched: Flag DEAD on correct thread in cross-CPU abort
Daniel Leung caught a good one: In the (SMP) case where we were
aborting a thread that was not currently scheduled, we were flagging
the DEAD state on _current and not the thread we were aborting!  This
wasn't as fatal as it seems, as the thread that called z_sched_abort()
would effectively go on living (as a zombie?) in a state where it
would always be preempted, but would otherwise remain scheduleable.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2019-03-19 13:39:24 -05:00
Pawel Dunaj
41e90630d7 lib: mempool: Synchronize level checks
Do not perform early level usage check. This can lead to situation
where block is seen as available on level when it was taken from
the other context.

Fixes: #14504

Signed-off-by: Pawel Dunaj <pawel.dunaj@nordicsemi.no>
2019-03-19 13:38:46 -05:00
Pawel Dunaj
2c7d68009a lib: mempool: Return error if no block found
Return -ENOMEM if no block is available on any level.

Fixes: #14504

Signed-off-by: Pawel Dunaj <pawel.dunaj@nordicsemi.no>
2019-03-19 13:38:46 -05:00
Krzysztof Chruscinski
94ae61f765 logging: Force LOG_PRINTK option if RTT backend is used
Log RTT backed is using mutex for locking access to RTT data.
RTT console (which by default is used by printk) writes to
RTT data directly and it cannot use mutex because it can be
called from any context (including interrupt). If both
modules access RTT buffer 0, data can be corrupted.

This patch forces LOG_PRINTK option if RTT backend is used to
ensure single point of access to RTT buffer 0 data.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-03-19 12:15:50 -05:00
Yannis Damigos
75be0cc8d9 i2c_ll_stm32: Remove length < 255 restriction
Allow STM32 I2C driver to handle messages with
length > 255.

Signed-off-by: Yannis Damigos <giannis.damigos@gmail.com>
2019-03-19 11:54:38 -05:00
Johan Hedberg
4882849f18 Bluetooth: controller: Convert benign BT_WARN() messages to BT_DBG()
BT_WARN() should only be used for log messages that may indicate a
problem. However, the controller HCI code was using it for messages
that were of a pure debugging/informational nature. Convert these to
BT_DBG() instead - this should hopefully also help avoid unnecessary
user questions of seemingly alarming log messages.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-19 18:17:41 +02:00
Andrzej Puzdrowski
3fe98838c9 storage/flash_map: API for get driver belongs to the flash_area.
Introduce API for get driver structure belongs to the flash_area.

Some more complex operation on flash areas might want to be done using
driver directly. It not make sense to wrap every possible flash related
operation by flash_map API.

For instance mcuboot will require this patch.

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-03-19 17:11:52 +01:00
Florian Vaussard
2320973fea flash: stm32l4: disable dcache before writting
Disable the data cache before writing to Flash, in order to workaround
silicon errata 2.2.3: "Data cache might be corrupted during Flash memory
read-while-write operation". The data cache is conditionally re-enabled
once the write is completed.

This silicon bug has been encountered while stress testing the
implementation. Here are the events leading to the fault:
- Code is executing from Flash bank 1
- A write to Flash bank 2 is initiated
- The Cortex SysTick interrupt fires while waiting for Flash write
  completion

In that case, the Flash controller will perform a read-while-write
operation in order to execute the ISR code. As the data cache is enabled
by default after reset, a corruption occurs due to the silicon bug,
leading to bizarre data bus faults or unaligned access faults inside
_timer_int_handler() or one of the functions called by the ISR.

Applying the workaround devised by ST fixes the problem.

Signed-off-by: Florian Vaussard <florian.vaussard@gmail.com>
2019-03-19 09:56:01 -05:00
Michael Scott
29cc3b5aed drivers: modem: wnc14a2a: dont stop RSSI processing on error
Instead of aborting on RSSI poll error, let's continue on and
reschedule the next RSSI poll.

This fixes an issue where RSSI polling would stop if for any reason
the modem doesn't fulfill an RSSI poll on time.

Signed-off-by: Michael Scott <mike@foundries.io>
2019-03-19 09:47:17 -05:00
Michael Scott
197757f4dd drivers: modem: wnc14a2a: correct IPv6 SRC and DST
Changes in commit 854045c14d ("drivers/modem: Switch wncm14a2a
driver to new net_pkt API") moved WNC-M14A2A modem driver to new
net_pkt APIs.  As part of these changes, the values for source and
destination passed into net_ipv6_create() were reversed.

Let's correct them.

Signed-off-by: Michael Scott <mike@foundries.io>
2019-03-19 09:47:17 -05:00
Ioannis Glaropoulos
8960cf4c1a arch: arm: mpu: fix variable type
Fix the type of struct field index to int, to avoid
loss of precision, in case the variable holds the value
-EINVAL (in the case of errors in MPU configuration).

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-03-19 09:39:25 -05:00
Ioannis Glaropoulos
cf7ba235ce arch: arm: mpu: fix a loop index start value
In arm_core_mpu_mem_partition_config_update() we must fix the
index value of the start of the for loop, to address the case
when dynamic MPU regions are programmed in index values lower
than static_regions_num. (This might occur in ARMv8-M MPU,
depending on the order of programming the map of the
dynamic regions in run-time). We introduce function
_get_dyn_region_min_index(), and provide the implementation in
arm_mpu_v8_internal.h and arm_mpu_v7_internal.h (trivial).

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-03-19 09:39:25 -05:00
Joakim Andersson
319a1239aa Bluetooth: controller: Fix PHY bits sets with PHY disabled
The 2M and Coded PHY bit should not be set when the
PHY update procedure is not supported.

Fixes #14658

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-03-19 16:34:55 +02:00
Tomasz Bursztyka
7ba52eae93 net/ipv6: Set the right protocol when finalizing MLD packet
IPv6 next header might be something else (here NET_IPV6_NEXTHDR_HBHO)
but when finalizing it is mandatory to give the actual last header
protocol type. In this case IPPROTO_ICMPV6, so the checksum can be
computed properly then by net_icmpv6_finalize() called from
net_ipv6_finalize().

Fixes #14663

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
2019-03-19 09:45:01 -04:00
Johan Hedberg
8c294995e0 samples: bluetooth/mesh: Fix configuration
This sample is often the first one used as reference for Bluetooth
Mesh, so it should have a good configuration as a starting point.
Comment out the LPN options to eliminate Kconfig warnings, since the
LOW_POWER option they depend on is not enabled. Also disable
INIT_STACKS since that's only needed for fine-tuning the app
configuration, and otherwise only causes unnecessary spam in the
console.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-19 15:24:09 +02:00
Wayne Ren
7051eecaed arch: arc: make the boot time more accurate
* start timer0 when cpu runs at __start
* add an offset to cycle_count

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-19 08:46:30 -04:00
Andrzej Puzdrowski
2b1227f155 zephyr: fix mcuboot can't link into boot-partition
Objective of the path is to allow to select by the application
to link into the chosen code-partition.
Introduced USE_CODE_PARTITION will be set by bootloader project.

fixes #14566

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
2019-03-19 11:12:47 +01:00
Joakim Andersson
f4c8e3ff31 Bluetooth: controller: Fix transaction collision
Peer side will disconnect if controller initiates
Encryption procedure before PHY update procedure
has finished.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-03-19 09:55:41 +01:00
Marc Herbert
932a33ad75 sanitycheck: fix, expand and clarify test case selection --help
- Fix wrong --test help message
- Provide more examples to clarify naming hierarchy
- Document that --sub-test runs its entire --test
- Point out that save/load options use their own format
- Document that --list-tests is flattened

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2019-03-18 22:07:25 -07:00
Mariusz Skamra
56ec1d876d Bluetooth: tester: Fix possible NULL pointer dereference
Fix calling NULL attribute read function pointer.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-03-19 06:55:16 +02:00
Mariusz Skamra
3ab275f3e1 Bluetooth: mesh: Fix net_id net_buf_pull in secure_beacon_recv
This fixes usage of net_buf_simple_pull_mem to pull the net_id
from network buffer.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-03-19 06:54:26 +02:00
Vincent Wan
3a8767c1f2 doc: boards: cc3220sf_launchxl: Document limitations
Adding a section on some features that have yet to be implemented in
the SimpleLink WiFi driver.

Signed-off-by: Vincent Wan <vincent.wan@linaro.org>
2019-03-18 20:17:47 -05:00
Charles E. Youse
6d01f67f8a kernel/msg_q: reorder _K_MSGQ_INITIALIZER() initializers
This is a trivial change to satisfy C++, which requires that designated
initializers appear in the same order as the members they initialize.

Fixes: #14540

Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-03-18 17:00:04 -07:00
Charles E. Youse
27a56ad75c boards/x86: add ACRN UOS sample board configuration
Based on prior work by @dcpleung. It's suboptimal, but it provides a
working starting point for ACRN work. The x86 board/SoC abstractions
really need to be refactored to make this "board" (and other x86-based
"boards", both extant and future) cleaner and easier to maintain. Punt.

Signed-off-by: Charles E. Youse <charles.youse@intel.com>
2019-03-18 19:28:41 -04:00
Daniel Leung
91eb147452 tests: kernel/smp: whitelist qemu_x86_64 for testing
Add qemu_x86_64 to the platform whitelist so that this will actually
be built and tested with sanitycheck.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-03-18 17:57:54 -04:00
Daniel Leung
96ccb913e4 tests: kernel/smp: fixed missing 'z_' renaming
There was a missing 'z_' renaming to
z_is_thread_prevented_from_running which would have caused
sanitycheck to fail but it is not being built at the moment.
Fix this first.

Signed-off-by: Daniel Leung <daniel.leung@intel.com>
2019-03-18 17:57:54 -04:00
Ioannis Glaropoulos
87b7bee52c arch: arm: mpu: fix _mpu_buffer_validate() implementation
In this commit we fix the implementation of internal function
_mpu_buffer_validate(), so it can work in the presence of a
security attribution unit (SAU, or IDAU). The fast validation
based on the CMSE address range check intrinsic is performed
first: if it fails, then a second, MPU-only check is performed
for ARMV8-M platforms that have TEE capabilities (i.e. SAU/IDAU
units).

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-03-18 11:40:09 -05:00
Ioannis Glaropoulos
4ffc37c324 arch: arm: mpu: improve documentation of ARMv8-M _mpu_buffer_validate
Enhance the documentation for internal ARMv8-M MPU
function _mpu_buffer_validate().

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-03-18 11:40:09 -05:00
Ioannis Glaropoulos
eb82bdd419 CODEOWNERS: add code-owner for cortex-m/cmse module
Code-owner for the ARM/Cortex-M/CMSE module (source
and include directories).

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-03-18 11:40:09 -05:00
Jukka Rissanen
20ea069d81 net: if: Init cursor for promiscuous mode after L2
As the L2 layer might have modified the cursor, reset it here
before giving the packet to promiscuous mode API. This way
the application will get a fresh copy of the buffer.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-18 11:39:33 -05:00
Ioannis Glaropoulos
c6b462a30c arch: arm: add explanatory comment in __swap()
This commit adds an explanatory comment in ARM __swap()
function, stressing when, exactly, context-switch is
expected to occur, when we pend the PendSV exception.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-03-18 11:38:19 -05:00
Ioannis Glaropoulos
a0851c47aa arch: arm: introduce barriers when disabling interrupts
The ARM Cortex-M 321 application note is stressing that if
we disable interrupts by executing CPSID i(f), or by MSR
instructions (on PRIMASK, FAULTMASK registers), there is no
requirement to add barrier instructions after disabling
interupts. However, in ARMv7-M (and ARMv8-M Mainline) we use
BASEPRI, instead. Therefore, if we need the effect of disabling
interrupts to be recongnized immediately we should add barrier
instructions. This commit adds DSB and ISB barriers when
disabling interrupt using BASEPRI in the generic
arm _irq_lock() function as well as in the PendSV handler,
where we need to access kernel globals right after the interrups
are disabled.

Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
2019-03-18 11:38:19 -05:00
Marcio Montenegro
69613cad6a samples: net: sockets: echo_client : Fix tcp_stop() error
Check for an open socket, 0 is a valid file descriptor.

Signed-off-by: Marcio Montenegro <msam@cesar.org.br>
2019-03-18 11:34:47 -05:00
Jukka Rissanen
ebce5601c0 samples: net: promisc: Fix compile error
The sample was bitrotted because sample.yaml was missing and no
build checks were done, so we missed the case when TCP header
API function was removed. This is now fixed by using still available
UDP header API (to get the port numbers). Also fixing debug print
as it were giving compile warnings.

Fixes #14608

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-18 11:31:01 -05:00
Jukka Rissanen
c5d3cfa93a samples: net: promisc: Add sample.yaml file for build time checks
The sanitychecker needs sample.yaml in order to compile test
the promiscuous mode sample application.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
2019-03-18 11:31:01 -05:00
Alberto Escolar Piedras
7f3431da0e doc: application: Correct note about external modules
A note in the Modules (External projects) section indicated
that in the future it would be possible to do something that
can be already done.
So, let's clarify the note with how it can be done.

Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
2019-03-18 11:30:29 -05:00
Krzysztof Chruscinski
d915fa0c35 logging: rtt: Fix backend behavior when LOG_IMMEDIATE enabled
Backend was not initialized to work in synchronous mode if LOG_IMMEDIATE
was enabled. That causes use of rtt_lock which uses mutex. That lead to
assert in application.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-03-18 11:28:50 -05:00
Krzysztof Chruscinski
0e72962a77 logging: replace assert calls with __ASSERT_NO_MSG
File was using not recommended assert call.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-03-18 11:28:50 -05:00
Paul Sokolovsky
f79965f77b net: pkt: Clarify docstring of the new API
Make descriptions a bit more clear, emphasizing the primary
operation, and de-emphsizing (but still describing) prerequisites
and side effects.

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2019-03-18 11:23:23 -05:00
Andrew Boie
7ea211256e userspace: properly namespace handler functions
Now prefixed with z_hdlr_ instead of just hdlr_.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-18 09:23:11 -07:00
Andrew Boie
50be938be5 userspace: renamespace some internal macros
These private macros are now all prefixed with Z_.

Fixes: #14447

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-18 09:23:11 -07:00
Andrew Boie
435c1a3fe2 samples: bmg169: don't enable CONFIG_LOG
It's not necessary for this sample to output to the user
(it uses printf) and saves over 5K of ROM size, eliminating
some build failures on Quark D2000.

Fixes: #14476

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-18 09:22:50 -07:00
Armando Visconti
455829248f drivers/i2s_ll_stm32.c: (FIX) use dma_reload() to re-start the DMA
Fix issue #14618.
The I2S controller may generate an underrun/overrun error whenever
the current sample in the Data Register (DR) has not been read/written
yet when a new one needs to be sent/received. When the DMA operation
is completed there is no much time to re-enable it for a new
transfer. For example, in the case of a PDM microphone clocked at
2MHz we only have 8us to re-program the DMA to receive the new 16-bit
sample.

Doing a complete DMA configuration using the dma_config() API is an
operation that is consuming too much time and driver is close to the
limit. Instead, the dma_reload() routine only programs the minimum
needed information (src, dst, len) for the  new transfer in order
to restart the DMA.

Signed-off-by: Armando Visconti <armando.visconti@st.com>
2019-03-18 11:22:19 -05:00
Armando Visconti
c0ffa6f2b7 dma: stm32f4: Add support for dma_reload API specific implementation
The dma_reload() is useful when there's the need to immediately
and quickly restart the DMA for a new transfer when the current
one is completed. If the operation is not done quickly there
might be underrun or overrun errors and the data flow is broken.

The dma_reload() just does the minimum operations required, i.e.
programming the new src/dst addresses and transfer size.

Signed-off-by: Armando Visconti <armando.visconti@st.com>
2019-03-18 11:22:19 -05:00
Paul Sokolovsky
4e097b4d54 net: sockets: recv_stream: Check that the underlying net_context active
It may be closed by the stack behind our back (something which needs
to be fixed).

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2019-03-18 10:49:25 -05:00
Paul Sokolovsky
bce27220a1 net: context: put: Update for shared TCP context ownership
TCP context is now created with refcount of 2, signifying that it's
jointly owned by an app and stack. Thus, net_context_put()
unconditionally calls net_context_unref() to decrement refcount on
app's behalf, and leaves stack's refcount to internal routines
which handle sending/receiving/timing out FINs, etc.

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2019-03-18 10:49:25 -05:00
Paul Sokolovsky
5499f38e7a net: socket: Increment TCP context refcount on socket(), accept()
TCP context is effectively owned by both application and the stack:
stack may detect that peer closed/aborted connection, but it must
not dispose of the context behind the application back. Likewise,
when application "closes" context, it's not disposed of immediately,
there's yet closing handshake for stack to perform.

This effectively means that TCP contexts have refcount of 2 when
they're created. Without this change, following situation is
possible: peer opens connection, an app get a context (or socket)
via accept, peer sends data, closes connection. An app still holds
a reference to connection, but stack may dispose of context, and
even reuse it for a new connection. Then application holds a reference
to either free, or completely different context.

This situation was very clearly and 100% reproducible when making
Zephyr port of open62541 library, which works in async manner using
select().

Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2019-03-18 10:49:25 -05:00
Andrew Boie
b3eb510f5c kernel: fix atomic ops in user mode on some arches
Most CPUs have instructions like LOCK, LDREX/STREX, etc which
allows for atomic operations without locking interrupts that
can be invoked from user mode without complication. They typically
use compiler builtin atomic operations, or custom assembly
to implement them.

However, some CPUs may lack these kinds of instructions, such
as Cortex-M0 or some ARC. They use these C-based atomic
operation implementations instead. Unfortunately these require
grabbing a spinlock to ensure proper concurrency with other
threads and ISRs. Hence, they will trigger an exception when
called from user mode.

For these platforms, which support user mode but not atomic
operation instructions, the atomic API has been exposed as
system calls.

Some of the implementations in atomic_c.c which can be instead
expressed in terms of other atomic operations have been removed.

The kernel test of atomic operations now runs in user mode to
prove that this works.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
2019-03-18 09:18:00 -04:00
Wayne Ren
959abdf1c9 arch: arc: move the call of read_timer_start_xx to _isr_demux
It's simpler and cleaner to move read_timer_start_of_isr to

_isr_demux. But the interrupt latency may be not accurate.

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-18 08:14:59 -04:00
Wayne Ren
2c28ff0978 arch: arc: fixes the hanlding of CONFIG_EXECUTION_BENCHMARKING
when firq is enabled and there are multiple register banks,
it requires different handling

Signed-off-by: Wayne Ren <wei.ren@synopsys.com>
2019-03-18 08:14:59 -04:00
Johan Hedberg
8aba2d51e7 doc: networking: buf: Add mentions of net_buf_add_mem & net_buf_pull_mem
These are APIs that were added after this part of the documentation
was originally created.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-18 10:12:13 +02:00
Alberto Escolar Piedras
63b349f1e0 doc: Bluetooth: Expand BabbleSim section
Added some more content to the section about how to simulate
with BabbleSim and a couple of extra links.

Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
2019-03-17 21:39:21 -04:00
Joakim Andersson
100287d77b Bluetooth: controller: Fix bug in LL encryption.
Fix bug in LL encryption procedure, controller was
using the wrong pointer to connection state.
Function event_enc_prep is called from
slave_event_prepare, where _radio.curr_conn has not
been assigned yet.
The connection ended up sending LL_START_ENC_RSP
unencrypted, resulting in disconnect on the peer
side with reason MIC failure.

Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
2019-03-15 20:56:16 +01:00
Johan Hedberg
dffe78b332 samples: bluetooth/mesh_demo: Fix using internal API
Use K_SEM_DEFINE() instead of the internal _K_SEM_INITIALIZER() API.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-15 20:40:51 +01:00
Andy Ross
5a56ee5605 tests/kernel/fifo/fifo_usage: Disable SMP
This test isn't SMP-safe and won't pass reliably on x86_64 by default
(though it does pass often enough to get CI passes on most things, it
fails spuriously in ways that aren't timing related).  Turn off the
second CPU.  Fixes #14501

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2019-03-15 19:42:59 +01:00
Sebastian Bøe
efc6d0a882 kconfig: Increase the size of KOBJECT_TEXT_AREA when NO_OPTIMIZATION
Since #14545 was merged building with USERSPACE and NO_OPTIMIZATIONS
has been broken due to #5226.

To fix #5226 we increase the size of KOBJECT_TEXT_AREA when
NO_OPTIMIZATIONS.

Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
2019-03-15 11:08:00 -07:00
3185 changed files with 55471 additions and 44789 deletions

View File

@@ -7,7 +7,7 @@ root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = false
insert_final_newline = true
trim_trailing_whitespace = true
# C
@@ -53,4 +53,4 @@ indent_size = 2
# Makefile
[Makefile]
indent_style = tab
indent_style = tab

16
.github/license_config.yml vendored Normal file
View File

@@ -0,0 +1,16 @@
license:
main: apache-2.0
report_missing: true
category: Permissive
copyright:
check: true
exclude:
extensions:
- yml
- yaml
- html
- rst
- conf
- cfg
langs:
- HTML

65
.github/workflows/doc-build.yml vendored Normal file
View File

@@ -0,0 +1,65 @@
# Copyright (c) 2020 Linaro Limited.
# SPDX-License-Identifier: Apache-2.0
name: Documentation GitHub Workflow
on: [pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Update PATH for west
run: |
echo "::add-path::$HOME/.local/bin"
- name: checkout
uses: actions/checkout@v2
- name: install-pkgs
run: |
sudo apt-get install -y ninja-build doxygen
- name: cache-pip
uses: actions/cache@v1
with:
path: ~/.cache/pip
key: ${{ runner.os }}-doc-pip
- name: install-pip
run: |
pip3 install setuptools
pip3 install 'breathe>=4.9.1,<4.15.0' 'docutils>=0.14' \
'sphinx>=1.7.5,<3.0' sphinx_rtd_theme sphinx-tabs \
sphinxcontrib-svg2pdfconverter 'west>=0.6.2'
pip3 install pyelftools
- name: west setup
run: |
west init -l . || true
- name: build-docs
run: |
source zephyr-env.sh
make htmldocs
tar cvf htmldocs.tar --directory=./doc/_build html
- name: upload-build
uses: actions/upload-artifact@master
continue-on-error: True
with:
name: htmldocs.tar
path: htmldocs.tar
- name: check-warns
run: |
if [ -s doc/_build/doc.warnings ]; then
docwarn=$(cat doc/_build/doc.warnings)
docwarn="${docwarn//'%'/'%25'}"
docwarn="${docwarn//$'\n'/'%0A'}"
docwarn="${docwarn//$'\r'/'%0D'}"
# We treat doc warnings as errors
echo "::error file=doc.warnings::$docwarn"
exit 1
fi

32
.github/workflows/license_check.yml vendored Normal file
View File

@@ -0,0 +1,32 @@
name: Scancode
on: [pull_request]
jobs:
scancode_job:
runs-on: ubuntu-latest
name: Scan code for licenses
steps:
- name: Checkout the code
uses: actions/checkout@v1
- name: Scan the code
id: scancode
uses: zephyrproject-rtos/action_scancode@v3
with:
directory-to-scan: 'scan/'
- name: Artifact Upload
uses: actions/upload-artifact@v1
with:
name: scancode
path: ./artifacts
- name: Verify
run: |
if [ -s ./artifacts/report.txt ]; then
report=$(cat ./artifacts/report.txt)
report="${report//'%'/'%25'}"
report="${report//$'\n'/'%0A'}"
report="${report//$'\r'/'%0D'}"
echo "::error file=./artifacts/report.txt::$report"
exit 1
fi

View File

@@ -48,3 +48,21 @@
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]
^.*bt_mesh_model.__unnamed__.*
^[- \t]*\^
#
# Bluetooth mesh pub struct definition
#
^(?P<filename>([\-:\\/\w\.])+[/\\]doc[/\\]reference[/\\]bluetooth[/\\]mesh[/\\]access.rst):(?P<lineno>[0-9]+): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]
^.*bt_mesh_model_pub.*
^[- \t]*\^
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]
^.*bt_mesh_model_pub.*
^[- \t]*\^
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]
^.*bt_mesh_model_pub.*
^[- \t]*\^
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]
^.*bt_mesh_model_pub.*
^[- \t]*\^
^(?P=filename):(?P=lineno): WARNING: Invalid definition: Expected end of definition. \[error at [0-9]+]
^.*bt_mesh_model_pub.*
^[- \t]*\^

View File

@@ -1,6 +1,6 @@
#
^(?P<filename>([\-:\\/\w\.])+[/\\]doc[/\\]reference[/\\]file_system[/\\]index.rst):(?P<lineno>[0-9]+): WARNING: Duplicate declaration.
^(?P<filename>([\-:\\/\w\.])+[/\\]doc[/\\]reference[/\\]file_system[/\\]index.rst):(?P<lineno>[0-9]+): WARNING: Duplicate declaration(.*)
#
^(?P<filename>([\-:\\/\w\.])+[/\\]doc[/\\]reference[/\\]peripherals[/\\]dma.rst):(?P<lineno>[0-9]+): WARNING: Duplicate declaration.
^(?P<filename>([\-:\\/\w\.])+[/\\]doc[/\\]reference[/\\]peripherals[/\\]dma.rst):(?P<lineno>[0-9]+): WARNING: Duplicate declaration(.*)
#
^(?P<filename>([\-:\\/\w\.])+[/\\]doc[/\\]reference[/\\]peripherals[/\\]sensor.rst):(?P<lineno>[0-9]+): WARNING: Duplicate declaration.
^(?P<filename>([\-:\\/\w\.])+[/\\]doc[/\\]reference[/\\]peripherals[/\\]sensor.rst):(?P<lineno>[0-9]+): WARNING: Duplicate declaration(.*)

View File

@@ -67,4 +67,4 @@
#
# stray duplicate definition warnings
#
^(?P<filename>([\-:\\/\w\.])+[/\\]doc[/\\]reference[/\\]networking[/\\]net_if.rst):(?P<lineno>[0-9]+): WARNING: Duplicate declaration.
^(?P<filename>([\-:\\/\w\.])+[/\\]doc[/\\]reference[/\\]networking[/\\]net_if.rst):(?P<lineno>[0-9]+): WARNING: Duplicate declaration(.*)

View File

@@ -4,8 +4,8 @@ compiler: gcc
env:
global:
- SDK=0.10.0
- ZEPHYR_SDK_INSTALL_DIR=/opt/sdk/zephyr-sdk-0.10.0
- SDK=0.10.3
- ZEPHYR_SDK_INSTALL_DIR=/opt/sdk/zephyr-sdk-0.10.3
- ZEPHYR_TOOLCHAIN_VARIANT=zephyr
- MATRIX_BUILDS="5"
matrix:
@@ -21,7 +21,7 @@ build:
- ${SHIPPABLE_BUILD_DIR}/ccache
pre_ci_boot:
image_name: zephyrprojectrtos/ci
image_tag: v0.6.3
image_tag: v0.8.2
pull: true
options: "-e HOME=/home/buildslave --privileged=true --tty --net=bridge --user buildslave"
@@ -48,7 +48,11 @@ build:
else
./scripts/ci/run_ci.sh -s -b ${BRANCH} -r origin -m ${MATRIX_BUILD} -M ${MATRIX_BUILDS};
fi;
branches:
only:
- master
- v*-branch
- topic-*
integrations:
notifications:
- integrationName: slack_integration
@@ -70,5 +74,6 @@ integrations:
- net
- bluetooth
- arm
- v1.14-branch
on_success: never
on_failure: never

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# *DOCUMENTATION*
#
# Note that this is *NOT* the top-level CMakeLists.txt. That's in the
@@ -575,16 +577,20 @@ add_subdirectory(ext)
add_subdirectory(subsys)
add_subdirectory(drivers)
# Add all zephyr modules subdirectories.
if(ZEPHYR_MODULES_NAME)
message("Including module(s): ${ZEPHYR_MODULES_NAME}")
# Include zephyr modules generated CMake file.
if(EXISTS ${CMAKE_BINARY_DIR}/zephyr_modules.txt)
file(STRINGS ${CMAKE_BINARY_DIR}/zephyr_modules.txt ZEPHYR_MODULES_TXT)
foreach(module ${ZEPHYR_MODULES_TXT})
# Match "<name>":"<path>" for each line of file, each corresponding to
# one module. The use of quotes is required due to CMake not supporting
# lazy regexes (it supports greedy only).
string(REGEX REPLACE "\"(.*)\":\".*\"" "\\1" module_name ${module})
string(REGEX REPLACE "\".*\":\"(.*)\"" "\\1" module_path ${module})
message("Including module: ${module_name} in path: ${module_path}")
add_subdirectory(${module_path} ${CMAKE_BINARY_DIR}/${module_name})
endforeach()
endif()
set(index 0)
foreach(module_name ${ZEPHYR_MODULES_NAME})
list(GET ZEPHYR_MODULES_DIR ${index} module_dir)
math(EXPR index "${index} + 1")
add_subdirectory(${module_dir} ${CMAKE_BINARY_DIR}/${module_name})
endforeach()
set(syscall_macros_h ${ZEPHYR_BINARY_DIR}/include/generated/syscall_macros.h)
@@ -713,6 +719,7 @@ add_custom_command(
${ZEPHYR_BASE}/scripts/gen_kobject_list.py
--validation-output ${DRV_VALIDATION}
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
DEPENDS ${ZEPHYR_BASE}/scripts/gen_kobject_list.py
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
add_custom_target(${DRIVER_VALIDATION_H_TARGET} DEPENDS ${DRV_VALIDATION})
@@ -846,6 +853,10 @@ endif()
if(CONFIG_CODE_DATA_RELOCATION)
set(MEM_RELOCATAION_LD "${PROJECT_BINARY_DIR}/include/generated/linker_relocate.ld")
set(MEM_RELOCATAION_SRAM_DATA_LD
"${PROJECT_BINARY_DIR}/include/generated/linker_sram_data_relocate.ld")
set(MEM_RELOCATAION_SRAM_BSS_LD
"${PROJECT_BINARY_DIR}/include/generated/linker_sram_bss_relocate.ld")
set(MEM_RELOCATAION_CODE "${PROJECT_BINARY_DIR}/code_relocation.c")
add_custom_command(
@@ -857,6 +868,8 @@ if(CONFIG_CODE_DATA_RELOCATION)
-d ${APPLICATION_BINARY_DIR}
-i '$<TARGET_PROPERTY:code_data_relocation_target,COMPILE_DEFINITIONS>'
-o ${MEM_RELOCATAION_LD}
-s ${MEM_RELOCATAION_SRAM_DATA_LD}
-b ${MEM_RELOCATAION_SRAM_BSS_LD}
-c ${MEM_RELOCATAION_CODE}
DEPENDS app kernel ${ZEPHYR_LIBS_PROPERTY}
)
@@ -870,6 +883,7 @@ if(CONFIG_USERSPACE)
zephyr_get_compile_options_for_lang_as_string(C compiler_flags_priv)
string(REPLACE "-ftest-coverage" "" NO_COVERAGE_FLAGS "${compiler_flags_priv}")
string(REPLACE "-fprofile-arcs" "" NO_COVERAGE_FLAGS "${NO_COVERAGE_FLAGS}")
string(REPLACE "-fno-inline" "" NO_COVERAGE_FLAGS "${NO_COVERAGE_FLAGS}")
get_property(include_dir_in_interface TARGET zephyr_interface
PROPERTY INTERFACE_INCLUDE_DIRECTORIES)

View File

@@ -6,9 +6,12 @@
# Do not use wildcard on all source yet
# * @galak @nashif
/.github/ @nashif @galak
/.known-issues/ @inakypg @nashif
/arch/arc/ @vonhust @ruuddw
/arch/arm/ @MaureenHelm @galak
/arch/arm/core/cortex_m/cmse/ @ioannisg
arch/arm/include/cortex_m/cmse.h @ioannisg
/soc/arm/ @MaureenHelm @galak
/soc/arm/arm/mps2/ @fvincenzo
/soc/arm/atmel_sam/sam4s/ @fallrisk
@@ -103,7 +106,7 @@
/drivers/bluetooth/ @sjanc @jhedberg @Vudentz
/drivers/can/ @alexanderwachter
/drivers/clock_control/*stm32f4* @rsalveti @idlethread
/drivers/counter/ @anangl
/drivers/counter/ @nordic-krch
/drivers/display/ @vanwinkeljan
/drivers/ethernet/ @jukkar @tbursztyka @pfalcon
/drivers/flash/ @nashif
@@ -116,6 +119,7 @@
/drivers/led/ @Mani-Sadhasivam
/drivers/led_strip/ @mbolivar
/drivers/modem/ @mike-scott
/drivers/pci/ @gnuless
/drivers/pinmux/stm32/ @rsalveti @idlethread
/drivers/sensor/ @bogdan-davidoaia @MaureenHelm
/drivers/sensor/hts*/ @avisconti
@@ -126,16 +130,19 @@
/drivers/net/slip.c @jukkar @tbursztyka
/drivers/spi/ @tbursztyka
/drivers/spi/spi_ll_stm32.* @superna9999
/drivers/timer/cortex_m_systick.c @ioannisg
/drivers/timer/altera_avalon_timer_hal.c @ramakrishnapallala
/drivers/timer/riscv_machine_timer.c @nategraff-sifive @kgugala @pgielda
/drivers/usb/ @jfischer-phytec-iot @finikorg
/drivers/usb/device/usb_dc_stm32.c @ydamigos @loicpoulain
/drivers/i2c/i2c_ll_stm32* @ldts @ydamigos
/drivers/watchdog/wdt_handlers.c @andrewboie
/drivers/wifi/ @jukkar @tbursztyka @pfalcon
/drivers/wifi/eswifi/ @loicpoulain
/dts/arm/st/ @erwango
/dts/arm/nordic/ @ioannisg @carlescufi
/dts/arm/nxp/ @MaureenHelm
/dts/bindings/ @galak
/dts/bindings/can/ @alexanderwachter
/dts/bindings/*/nordic* @anangl
/dts/bindings/*/nxp* @MaureenHelm
@@ -167,7 +174,7 @@
/include/bluetooth/ @sjanc @jhedberg @Vudentz
/include/cache.h @andrewboie @andyross
/include/can.h @alexanderwachter
/include/counter.h @anangl
/include/counter.h @nordic-krch
/include/device.h @ramakrishnapallala @nashif
/include/display.h @vanwinkeljan
/include/display/ @vanwinkeljan
@@ -210,7 +217,9 @@
/include/zephyr.h @andrewboie @andyross
/kernel/ @andrewboie @andyross
/lib/gui/ @vanwinkeljan
/lib/os/ @andrewboie @andyross
/lib/posix/ @pfalcon
/lib/libc/ @nashif @andrewboie
/kernel/device.c @andrewboie @andyross @nashif
/kernel/idle.c @andrewboie @andyross @nashif
/samples/basic/servo_motor/*microbit* @jhe
@@ -227,6 +236,8 @@
/samples/net/sockets/coap_server/ @rveerama1
/samples/net/sockets/ @jukkar @tbursztyka @pfalcon
/samples/sensor/ @bogdan-davidoaia
/samples/subsys/logging/ @nordic-krch @jarz-nordic
/samples/subsys/shell/ @jarz-nordic @nordic-krch
/samples/subsys/usb/ @jfischer-phytec-iot @finikorg
/samples/subsys/power/ @ramakrishnapallala @pizi-nordic
/scripts/coccicheck @himanshujha199640 @JuliaLawall
@@ -247,6 +258,7 @@
/scripts/series-push-hook.sh @erwango
/scripts/west_commands/ @mbolivar
/scripts/west-commands.yml @mbolivar
/scripts/zephyr_module.py @tejlmand
/subsys/bluetooth/ @sjanc @jhedberg @Vudentz
/subsys/bluetooth/controller/ @carlescufi @cvinayak @thoh-ot
/subsys/fs/ @nashif
@@ -266,7 +278,9 @@
/subsys/settings/ @nvlsianpu
/subsys/shell/ @jarz-nordic @nordic-krch
/subsys/storage/ @nvlsianpu
/subsys/testsuite/ @nashif
/subsys/usb/ @jfischer-phytec-iot @finikorg
/tests/application_development/libcxx/ @pabigot
/tests/boards/native_posix/ @aescolar
/tests/boards/intel_s1000_crb/ @rgundi @dcpleung @sathishkuttan
/tests/bluetooth/ @sjanc @jhedberg @Vudentz
@@ -276,7 +290,9 @@
/tests/drivers/can/ @alexanderwachter
/tests/drivers/hwinfo/ @alexanderwachter
/tests/drivers/spi/ @tbursztyka
/tests/drivers/uart/uart_async_api/ @Mierunski
/tests/kernel/ @andrewboie @andyross @nashif
/tests/lib/ @nashif
/tests/net/ @jukkar @tbursztyka @pfalcon
/tests/net/buf/ @jukkar @jhedberg @tbursztyka @pfalcon
/tests/net/lib/ @jukkar @tbursztyka @pfalcon

View File

@@ -7,7 +7,7 @@
# SPDX-License-Identifier: Apache-2.0
#
source "$(PROJECT_BINARY_DIR)/Kconfig.modules"
source "$(CMAKE_BINARY_DIR)/Kconfig.modules"
# Include these first so that any properties (e.g. defaults) below can be
# overriden in *.defconfig files (by defining symbols in multiple locations).
@@ -82,9 +82,15 @@ config HAS_FLASH_LOAD_OFFSET
This option is selected by targets having a FLASH_LOAD_OFFSET
and FLASH_LOAD_SIZE.
config USE_CODE_PARTITION
bool "link into code-partition"
depends on HAS_FLASH_LOAD_OFFSET
help
When selected application will be linked into chosen code-partition.
config FLASH_LOAD_OFFSET
hex "Kernel load offset"
default $(dt_hex_val,DT_CODE_PARTITION_OFFSET) if BOOTLOADER_MCUBOOT
default $(dt_hex_val,DT_CODE_PARTITION_OFFSET) if USE_CODE_PARTITION
default 0
depends on HAS_FLASH_LOAD_OFFSET
help
@@ -97,7 +103,7 @@ config FLASH_LOAD_OFFSET
config FLASH_LOAD_SIZE
hex "Kernel load size"
default $(dt_hex_val,DT_CODE_PARTITION_SIZE) if BOOTLOADER_MCUBOOT
default $(dt_hex_val,DT_CODE_PARTITION_SIZE) if USE_CODE_PARTITION
default 0
depends on HAS_FLASH_LOAD_OFFSET
help
@@ -341,6 +347,7 @@ config BOOTLOADER_SRAM_SIZE
config BOOTLOADER_MCUBOOT
bool "MCUboot bootloader support"
select USE_CODE_PARTITION
help
This option signifies that the target uses MCUboot as a bootloader,
or in other words that the image is to be chain-loaded by MCUboot.

View File

@@ -1,5 +1,5 @@
VERSION_MAJOR = 1
VERSION_MINOR = 14
PATCHLEVEL = 0
PATCHLEVEL = 2
VERSION_TWEAK = 0
EXTRAVERSION = rc2
EXTRAVERSION =

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
add_definitions(-D__ZEPHYR_SUPERVISOR__)
add_subdirectory(common)

View File

@@ -178,10 +178,7 @@ config USERSPACE
config PRIVILEGED_STACK_SIZE
int "Size of privileged stack"
default 512 if MPU_STACK_GUARD || BUILTIN_STACK_GUARD
default 512 if COVERAGE_GCOV
default 384 if ARC
default 256
default 1024
depends on ARCH_HAS_USERSPACE
help
This option sets the privileged stack region size that will be used
@@ -200,6 +197,7 @@ config PRIVILEGED_STACK_TEXT_AREA
config KOBJECT_TEXT_AREA
int "Size if kobject text area"
default 512 if COVERAGE_GCOV
default 512 if NO_OPTIMIZATIONS
default 256
depends on ARCH_HAS_USERSPACE
help
@@ -350,42 +348,42 @@ config ARCH_HAS_THREAD_ABORT
# Hidden PM feature configs which are to be selected by
# individual SoC.
#
config HAS_STATE_LOW_POWER_1
config HAS_SYS_POWER_STATE_SLEEP_1
# Hidden
bool
help
This option signifies that the target supports the SYS_POWER_STATE_LOW_POWER_1
This option signifies that the target supports the SYS_POWER_STATE_SLEEP_1
configuration option.
config HAS_STATE_LOW_POWER_2
config HAS_SYS_POWER_STATE_SLEEP_2
# Hidden
bool
help
This option signifies that the target supports the SYS_POWER_STATE_LOW_POWER_2
This option signifies that the target supports the SYS_POWER_STATE_SLEEP_2
configuration option.
config HAS_STATE_LOW_POWER_3
config HAS_SYS_POWER_STATE_SLEEP_3
# Hidden
bool
help
This option signifies that the target supports the SYS_POWER_STATE_LOW_POWER_3
This option signifies that the target supports the SYS_POWER_STATE_SLEEP_3
configuration option.
config HAS_STATE_DEEP_SLEEP_1
config HAS_SYS_POWER_STATE_DEEP_SLEEP_1
# Hidden
bool
help
This option signifies that the target supports the SYS_POWER_STATE_DEEP_SLEEP_1
configuration option.
config HAS_STATE_DEEP_SLEEP_2
config HAS_SYS_POWER_STATE_DEEP_SLEEP_2
# Hidden
bool
help
This option signifies that the target supports the SYS_POWER_STATE_DEEP_SLEEP_2
configuration option.
config HAS_STATE_DEEP_SLEEP_3
config HAS_SYS_POWER_STATE_DEEP_SLEEP_3
# Hidden
bool
help

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# Enable debug support in mdb
# Dwarf version 2 can be recognized by mdb
# The default dwarf version in gdb is not recognized by mdb

View File

@@ -28,8 +28,8 @@ menu "ARCv2 Family Options"
config CPU_ARCV2
bool
select ARCH_HAS_STACK_PROTECTION
select ARCH_HAS_USERSPACE if ARC_CORE_MPU
select ARCH_HAS_STACK_PROTECTION if ARC_HAS_STACK_CHECKING || ARC_MPU
select ARCH_HAS_USERSPACE if ARC_MPU
default y
help
This option signifies the use of a CPU of the ARCv2 family.
@@ -85,13 +85,34 @@ config ARC_FIRQ
If FIRQ is disabled, the handle of interrupts with highest priority
will be same with other interrupts.
config ARC_STACK_CHECKING
config ARC_HAS_STACK_CHECKING
bool "ARC has STACK_CHECKING"
default y
help
ARC is configured with STACK_CHECKING which is a mechanism for
checking stack accesses and raising an exception when a stack
overflow or underflow is detected.
config ARC_STACK_CHECKING
bool
help
Use ARC STACK_CHECKING to do stack protection
config ARC_STACK_PROTECTION
bool
default y if HW_STACK_PROTECTION
select ARC_STACK_CHECKING if ARC_HAS_STACK_CHECKING
select MPU_STACK_GUARD if (!ARC_STACK_CHECKING && ARC_MPU)
select THREAD_STACK_INFO
help
ARCV2 has a special feature allowing to check stack overflows. This
enables code that allows using this debug feature
This option enables either:
- The ARC stack checking, or
- the MPU-based stack guard
to cause a system fatal error
if the bounds of the current process stack are overflowed.
The two stack guard options are mutually exclusive. The
selection of the ARC stack checking is
prioritized over the MPU-based stack guard.
config FAULT_DUMP
int "Fault dump level"

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_library_sources(

View File

@@ -91,7 +91,7 @@ static void dcache_flush_mlines(u32_t start_addr, u32_t size)
u32_t end_addr;
unsigned int key;
if (!dcache_available() || (size == 0)) {
if (!dcache_available() || (size == 0U)) {
return;
}
@@ -150,9 +150,9 @@ static void init_dcache_line_size(void)
u32_t val;
val = z_arc_v2_aux_reg_read(_ARC_V2_D_CACHE_BUILD);
__ASSERT((val&0xff) != 0, "d-cache is not present");
__ASSERT((val&0xff) != 0U, "d-cache is not present");
val = ((val>>16) & 0xf) + 1;
val *= 16;
val *= 16U;
sys_cache_line_size = (size_t) val;
}
#endif

View File

@@ -140,9 +140,14 @@ SECTION_FUNC(TEXT, _firq_exit)
mov r1, exc_nest_count
ld r0, [r1]
sub r0, r0, 1
cmp r0, 0
bne.d _firq_no_reschedule
st r0, [r1]
/* see comments in _rirq_exit */
lr r0, [_ARC_V2_AUX_IRQ_ACT]
and r0, r0, 0xffff
ffs r1, r0
fls r2, r0
cmp r1, r2
jne _firq_no_reschedule
#ifdef CONFIG_STACK_SENTINEL
bl z_check_stack_sentinel
@@ -262,7 +267,15 @@ _firq_reschedule:
pop_s r2
#endif
ld_s r3, [r2, _thread_offset_to_relinquish_cause]
#if defined(CONFIG_USERSPACE)
/*
* see comments in regular_irq.S
*/
lr r0, [_ARC_V2_AUX_IRQ_ACT]
bclr r0, r0, 31
sr r0, [_ARC_V2_AUX_IRQ_ACT]
#endif
ld r3, [r2, _thread_offset_to_relinquish_cause]
breq r3, _CAUSE_RIRQ, _firq_return_from_rirq
nop
@@ -274,7 +287,7 @@ _firq_reschedule:
.balign 4
_firq_return_from_coop:
ld_s r3, [r2, _thread_offset_to_intlock_key]
ld r3, [r2, _thread_offset_to_intlock_key]
st 0, [r2, _thread_offset_to_intlock_key]
/* pc into ilink */
@@ -293,7 +306,7 @@ _firq_return_from_coop:
or.nz r0, r0, _ARC_V2_STATUS32_IE
sr r0, [_ARC_V2_STATUS32_P0]
ld_s r0, [r2, _thread_offset_to_return_value]
ld r0, [r2, _thread_offset_to_return_value]
rtie
.balign 4

View File

@@ -43,7 +43,7 @@ void z_NanoFatalErrorHandler(unsigned int reason, const NANO_ESF *pEsf)
break;
#if defined(CONFIG_STACK_CANARIES) || defined(CONFIG_ARC_STACK_CHECKING) \
|| defined(CONFIG_STACK_SENTINEL)
|| defined(CONFIG_STACK_SENTINEL) || defined(CONFIG_MPU_STACK_GUARD)
case _NANO_ERR_STACK_CHK_FAIL:
printk("***** Stack Check Fail! *****\n");
break;

View File

@@ -21,6 +21,8 @@
#include <exc_handle.h>
#include <logging/log_ctrl.h>
u32_t arc_exc_saved_sp;
#ifdef CONFIG_USERSPACE
Z_EXC_DECLARE(z_arch_user_string_nlen);
@@ -29,6 +31,98 @@ static const struct z_exc_handle exceptions[] = {
};
#endif
#if defined(CONFIG_MPU_STACK_GUARD)
#define IS_MPU_GUARD_VIOLATION(guard_start, fault_addr, stack_ptr) \
((fault_addr >= guard_start) && \
(fault_addr < (guard_start + STACK_GUARD_SIZE)) && \
(stack_ptr <= (guard_start + STACK_GUARD_SIZE)))
/**
* @brief Assess occurrence of current thread's stack corruption
*
* This function performs an assessment whether a memory fault (on a
* given memory address) is the result of stack memory corruption of
* the current thread.
*
* Thread stack corruption for supervisor threads or user threads in
* privilege mode (when User Space is supported) is reported upon an
* attempt to access the stack guard area (if MPU Stack Guard feature
* is supported). Additionally the current thread stack pointer
* must be pointing inside or below the guard area.
*
* Thread stack corruption for user threads in user mode is reported,
* if the current stack pointer is pointing below the start of the current
* thread's stack.
*
* Notes:
* - we assume a fully descending stack,
* - we assume a stacking error has occurred,
* - the function shall be called when handling MPU privilege violation
*
* If stack corruption is detected, the function returns the lowest
* allowed address where the Stack Pointer can safely point to, to
* prevent from errors when un-stacking the corrupted stack frame
* upon exception return.
*
* @param fault_addr memory address on which memory access violation
* has been reported.
* @param sp stack pointer when exception comes out
*
* @return The lowest allowed stack frame pointer, if error is a
* thread stack corruption, otherwise return 0.
*/
static u32_t z_check_thread_stack_fail(const u32_t fault_addr, u32_t sp)
{
const struct k_thread *thread = _current;
if (!thread) {
return 0;
}
#if defined(CONFIG_USERSPACE)
if (thread->arch.priv_stack_start) {
/* User thread */
if (z_arc_v2_aux_reg_read(_ARC_V2_ERSTATUS)
& _ARC_V2_STATUS32_U) {
/* Thread's user stack corruption */
#ifdef CONFIG_ARC_HAS_SECURE
sp = z_arc_v2_aux_reg_read(_ARC_V2_SEC_U_SP);
#else
sp = z_arc_v2_aux_reg_read(_ARC_V2_USER_SP);
#endif
if (sp <= (u32_t)thread->stack_obj) {
return (u32_t)thread->stack_obj;
}
} else {
/* User thread in privilege mode */
if (IS_MPU_GUARD_VIOLATION(
thread->arch.priv_stack_start - STACK_GUARD_SIZE,
fault_addr, sp)) {
/* Thread's privilege stack corruption */
return thread->arch.priv_stack_start;
}
}
} else {
/* Supervisor thread */
if (IS_MPU_GUARD_VIOLATION((u32_t)thread->stack_obj,
fault_addr, sp)) {
/* Supervisor thread stack corruption */
return (u32_t)thread->stack_obj + STACK_GUARD_SIZE;
}
}
#else /* CONFIG_USERSPACE */
if (IS_MPU_GUARD_VIOLATION(thread->stack_info.start,
fault_addr, sp)) {
/* Thread stack corruption */
return thread->stack_info.start + STACK_GUARD_SIZE;
}
#endif /* CONFIG_USERSPACE */
return 0;
}
#endif
/*
* @brief Fault handler
*
@@ -57,9 +151,9 @@ void _Fault(NANO_ESF *esf)
}
#endif
vector = _ARC_V2_ECR_VECTOR(ecr);
code = _ARC_V2_ECR_CODE(ecr);
parameter = _ARC_V2_ECR_PARAMETER(ecr);
vector = Z_ARC_V2_ECR_VECTOR(ecr);
code = Z_ARC_V2_ECR_CODE(ecr);
parameter = Z_ARC_V2_ECR_PARAMETER(ecr);
/* exception raised by kernel */
@@ -74,11 +168,22 @@ void _Fault(NANO_ESF *esf)
#ifdef CONFIG_ARC_STACK_CHECKING
/* Vector 6 = EV_ProV. Regardless of code, parameter 2 means stack
* check violation
* stack check and mpu violation can come out together, then
* parameter = 0x2 | [0x4 | 0x8 | 0x1]
*/
if (vector == 6 && parameter == 2) {
if (vector == 6U && parameter & 0x2) {
z_NanoFatalErrorHandler(_NANO_ERR_STACK_CHK_FAIL, esf);
return;
}
#endif
#ifdef CONFIG_MPU_STACK_GUARD
if (vector == 0x6 && ((parameter == 0x4) || (parameter == 0x24))) {
if (z_check_thread_stack_fail(exc_addr, arc_exc_saved_sp)) {
z_NanoFatalErrorHandler(_NANO_ERR_STACK_CHK_FAIL, esf);
return;
}
}
#endif
z_NanoFatalErrorHandler(_NANO_ERR_HW_EXCEPTION, esf);
}

View File

@@ -19,7 +19,7 @@
#include <syscall.h>
GTEXT(_Fault)
GTEXT(_do_kernel_oops)
GTEXT(z_do_kernel_oops)
GTEXT(__reset)
GTEXT(__memory_error)
GTEXT(__instruction_error)
@@ -35,14 +35,11 @@ GTEXT(__ev_div_zero)
GTEXT(__ev_dc_error)
GTEXT(__ev_maligned)
#ifdef CONFIG_IRQ_OFFLOAD
GTEXT(_irq_do_offload);
GTEXT(z_irq_do_offload);
#endif
GDATA(exc_nest_count)
.balign 4
SECTION_VAR(BSS, saved_value)
.word 0
GDATA(arc_exc_saved_sWWp)
/* the necessary stack size for exception handling */
#define EXCEPTION_STACK_SIZE 384
@@ -65,7 +62,7 @@ SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_dc_error)
SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_maligned)
_exc_entry:
st sp, [saved_value]
st sp, [arc_exc_saved_sp]
/*
* re-use the top part of interrupt stack as exception
* stack. If this top part is used by interrupt handling,
@@ -145,7 +142,7 @@ _exc_return_from_exc:
sr r0, [_ARC_V2_ERET]
_pop_irq_stack_frame
ld sp, [saved_value]
ld sp, [arc_exc_saved_sp]
rtie
@@ -156,30 +153,35 @@ SECTION_SUBSEC_FUNC(TEXT,__fault,__ev_trap)
#ifdef CONFIG_USERSPACE
cmp ilink, _TRAP_S_CALL_SYSTEM_CALL
bne _do_non_syscall_trap
/* do sys_call */
/* do sys_call */
mov ilink, K_SYSCALL_LIMIT
cmp r6, ilink
blt valid_syscall_id
blo valid_syscall_id
mov r0, r6
mov r6, K_SYSCALL_BAD
valid_syscall_id:
/* create a sys call frame
* caller regs (r0 - 12) are saved in _create_irq_stack_frame
* ok to use them later
*/
_create_irq_stack_frame
#ifdef CONFIG_ARC_HAS_SECURE
lr ilink, [_ARC_V2_ERSEC_STAT]
push ilink
lr r0, [_ARC_V2_ERSEC_STAT]
st_s r0, [sp, ___isf_t_sec_stat_OFFSET]
#endif
lr ilink, [_ARC_V2_ERET]
push ilink
lr ilink, [_ARC_V2_ERSTATUS]
push ilink
lr r0, [_ARC_V2_ERET]
st_s r0, [sp, ___isf_t_pc_OFFSET] /* eret into pc */
lr r0, [_ARC_V2_ERSTATUS]
st_s r0, [sp, ___isf_t_status32_OFFSET]
bclr ilink, ilink, _ARC_V2_STATUS32_U_BIT
sr ilink, [_ARC_V2_ERSTATUS]
bclr r0, r0, _ARC_V2_STATUS32_U_BIT
sr r0, [_ARC_V2_ERSTATUS]
mov ilink, _arc_do_syscall
sr ilink, [_ARC_V2_ERET]
mov r0, _arc_do_syscall
sr r0, [_ARC_V2_ERET]
rtie
@@ -218,7 +220,7 @@ _do_non_syscall_trap:
exc_nest_handle:
push_s r0
jl _irq_do_offload
jl z_irq_do_offload
pop sp

View File

@@ -40,7 +40,7 @@ void z_arch_irq_enable(unsigned int irq)
{
unsigned int key = irq_lock();
_arc_v2_irq_unit_int_enable(irq);
z_arc_v2_irq_unit_int_enable(irq);
irq_unlock(key);
}
@@ -57,7 +57,7 @@ void z_arch_irq_disable(unsigned int irq)
{
unsigned int key = irq_lock();
_arc_v2_irq_unit_int_disable(irq);
z_arc_v2_irq_unit_int_disable(irq);
irq_unlock(key);
}
@@ -83,7 +83,7 @@ void z_irq_priority_set(unsigned int irq, unsigned int prio, u32_t flags)
__ASSERT(prio < CONFIG_NUM_IRQ_PRIO_LEVELS,
"invalid priority %d for irq %d", prio, irq);
_arc_v2_irq_unit_prio_set(irq, prio);
z_arc_v2_irq_unit_prio_set(irq, prio);
irq_unlock(key);
}

View File

@@ -15,7 +15,7 @@ static irq_offload_routine_t offload_routine;
static void *offload_param;
/* Called by trap_s exception handler */
void _irq_do_offload(void)
void z_irq_do_offload(void)
{
offload_routine(offload_param);
}

View File

@@ -230,43 +230,6 @@ From RIRQ:
*/
SECTION_FUNC(TEXT, _isr_wrapper)
#ifdef CONFIG_EXECUTION_BENCHMARKING
push_s r0
push_s blink
push_s r13
push_s r12
push r11
push r10
push r9
push r8
push r7
push r6
push r5
push r4
push_s r3
push_s r2
push_s r1
bl read_timer_start_of_isr
pop_s r1
pop_s r2
pop_s r3
pop r4
pop r5
pop r6
pop r7
pop r8
pop r9
pop r10
pop r11
pop_s r12
pop_s r13
pop_s blink
pop_s r0
#endif
#if CONFIG_ARC_FIRQ
#if CONFIG_RGF_NUM_BANKS == 1
st r0,[saved_r0]
@@ -326,7 +289,6 @@ rirq_path:
j_s [r2]
#endif
#else
mov r3, _rirq_exit
mov r2, _rirq_enter
j_s [r2]
@@ -375,7 +337,9 @@ _skip_sys_power_save_idle_exit:
SECTION_FUNC(TEXT, _isr_demux)
push_s r3
#ifdef CONFIG_EXECUTION_BENCHMARKING
bl read_timer_start_of_isr
#endif
/* cannot be done before this point because we must be able to run C */
/* r0 is available to be stomped here, and exit_tickless_idle uses it */
exit_tickless_idle
@@ -383,9 +347,9 @@ SECTION_FUNC(TEXT, _isr_demux)
lr r0, [_ARC_V2_ICAUSE]
/* handle software triggered interrupt */
lr r3, [_ARC_V2_AUX_IRQ_HINT]
brne r3, r0, irq_hint_handled
sr 0, [_ARC_V2_AUX_IRQ_HINT]
lr r3, [_ARC_V2_AUX_IRQ_HINT]
brne r3, r0, irq_hint_handled
sr 0, [_ARC_V2_AUX_IRQ_HINT]
irq_hint_handled:
sub r0, r0, 16
@@ -396,39 +360,10 @@ irq_hint_handled:
ld_s r1, [r0, 4] /* ISR into r1 */
#ifdef CONFIG_EXECUTION_BENCHMARKING
push_s r0
push_s blink
push_s r13
push_s r12
push r11
push r10
push r9
push r8
push r7
push r6
push r5
push r4
push_s r3
push_s r2
push_s r1
bl read_timer_end_of_isr
pop_s r1
pop_s r2
pop_s r3
pop r4
pop r5
pop r6
pop r7
pop r8
pop r9
pop r10
pop r11
pop_s r12
pop_s r13
pop_s blink
pop_s r0
#endif
jl_s.d [r1]
ld_s r0, [r0] /* delay slot: ISR parameter into r0 */

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_library_sources_if_kconfig(arc_core_mpu.c)

View File

@@ -20,7 +20,7 @@ config ARC_CORE_MPU
config MPU_STACK_GUARD
bool "Thread Stack Guards"
depends on ARC_CORE_MPU && !ARC_STACK_CHECKING
depends on ARC_CORE_MPU
help
Enable thread stack guards via MPU. ARC supports built-in stack protection.
If your core supports that, it is preferred over MPU stack guard

View File

@@ -21,11 +21,11 @@ LOG_MODULE_REGISTER(mpu);
* @brief Get the number of supported MPU regions
*
*/
static inline u8_t _get_num_regions(void)
static inline u8_t get_num_regions(void)
{
u32_t num = z_arc_v2_aux_reg_read(_ARC_V2_MPU_BUILD);
num = (num & 0xFF00) >> 8;
num = (num & 0xFF00U) >> 8U;
return (u8_t)num;
}
@@ -34,7 +34,7 @@ static inline u8_t _get_num_regions(void)
* This internal function is utilized by the MPU driver to parse the intent
* type (i.e. THREAD_STACK_REGION) and return the correct parameter set.
*/
static inline u32_t _get_region_attr_by_type(u32_t type)
static inline u32_t get_region_attr_by_type(u32_t type)
{
switch (type) {
case THREAD_STACK_USER_REGION:
@@ -52,7 +52,6 @@ static inline u32_t _get_region_attr_by_type(u32_t type)
}
}
#if CONFIG_ARC_MPU_VER == 2
#include "arc_mpu_v2_internal.h"
#elif CONFIG_ARC_MPU_VER == 3

View File

@@ -31,7 +31,7 @@ static inline void _region_init(u32_t index, u32_t region_addr, u32_t size,
{
u8_t bits = find_msb_set(size) - 1;
index = 2 * index;
index = index * 2U;
if (bits < ARC_FEATURE_MPU_ALIGNMENT_BITS) {
bits = ARC_FEATURE_MPU_ALIGNMENT_BITS;
@@ -57,7 +57,7 @@ static inline void _region_init(u32_t index, u32_t region_addr, u32_t size,
* This internal function is utilized by the MPU driver to parse the intent
* type (i.e. THREAD_STACK_REGION) and return the correct region index.
*/
static inline int _get_region_index_by_type(u32_t type)
static inline int get_region_index_by_type(u32_t type)
{
/*
* The new MPU regions are allocated per type after the statically
@@ -71,21 +71,21 @@ static inline int _get_region_index_by_type(u32_t type)
*/
switch (type) {
case THREAD_STACK_USER_REGION:
return _get_num_regions() - mpu_config.num_regions
return get_num_regions() - mpu_config.num_regions
- THREAD_STACK_REGION;
case THREAD_STACK_REGION:
case THREAD_APP_DATA_REGION:
case THREAD_STACK_GUARD_REGION:
return _get_num_regions() - mpu_config.num_regions - type;
return get_num_regions() - mpu_config.num_regions - type;
case THREAD_DOMAIN_PARTITION_REGION:
#if defined(CONFIG_MPU_STACK_GUARD)
return _get_num_regions() - mpu_config.num_regions - type;
return get_num_regions() - mpu_config.num_regions - type;
#else
/*
* Start domain partition region from stack guard region
* since stack guard is not enabled.
*/
return _get_num_regions() - mpu_config.num_regions - type + 1;
return get_num_regions() - mpu_config.num_regions - type + 1;
#endif
default:
__ASSERT(0, "Unsupported type");
@@ -98,7 +98,7 @@ static inline int _get_region_index_by_type(u32_t type)
*/
static inline bool _is_enabled_region(u32_t r_index)
{
return ((z_arc_v2_aux_reg_read(_ARC_V2_MPU_RDB0 + 2 * r_index)
return ((z_arc_v2_aux_reg_read(_ARC_V2_MPU_RDB0 + r_index * 2U)
& AUX_MPU_RDB_VALID_MASK) == AUX_MPU_RDB_VALID_MASK);
}
@@ -111,14 +111,14 @@ static inline bool _is_in_region(u32_t r_index, u32_t start, u32_t size)
u32_t r_addr_end;
u32_t r_size_lshift;
r_addr_start = z_arc_v2_aux_reg_read(_ARC_V2_MPU_RDB0 + 2 * r_index)
r_addr_start = z_arc_v2_aux_reg_read(_ARC_V2_MPU_RDB0 + r_index * 2U)
& (~AUX_MPU_RDB_VALID_MASK);
r_size_lshift = z_arc_v2_aux_reg_read(_ARC_V2_MPU_RDP0 + 2 * r_index)
r_size_lshift = z_arc_v2_aux_reg_read(_ARC_V2_MPU_RDP0 + r_index * 2U)
& AUX_MPU_RDP_SIZE_MASK;
r_size_lshift = (r_size_lshift & 0x3) | ((r_size_lshift >> 7) & 0x1C);
r_addr_end = r_addr_start + (1 << (r_size_lshift + 1));
if (start >= r_addr_start && (start + size) < r_addr_end) {
if (start >= r_addr_start && (start + size) <= r_addr_end) {
return 1;
}
@@ -132,7 +132,7 @@ static inline bool _is_user_accessible_region(u32_t r_index, int write)
{
u32_t r_ap;
r_ap = z_arc_v2_aux_reg_read(_ARC_V2_MPU_RDP0 + 2 * r_index);
r_ap = z_arc_v2_aux_reg_read(_ARC_V2_MPU_RDP0 + r_index * 2U);
r_ap &= AUX_MPU_RDP_ATTR_MASK;
@@ -154,12 +154,12 @@ static inline bool _is_user_accessible_region(u32_t r_index, int write)
*/
static inline int _mpu_configure(u8_t type, u32_t base, u32_t size)
{
s32_t region_index = _get_region_index_by_type(type);
u32_t region_attr = _get_region_attr_by_type(type);
s32_t region_index = get_region_index_by_type(type);
u32_t region_attr = get_region_attr_by_type(type);
LOG_DBG("Region info: 0x%x 0x%x", base, size);
if (region_attr == 0 || region_index < 0) {
if (region_attr == 0U || region_index < 0) {
return -EINVAL;
}
@@ -204,7 +204,7 @@ void arc_core_mpu_configure_thread(struct k_thread *thread)
#if defined(CONFIG_MPU_STACK_GUARD)
#if defined(CONFIG_USERSPACE)
if ((thread->thread_base.user_options & K_USER) != 0) {
if ((thread->base.user_options & K_USER) != 0) {
/* the areas before and after the user stack of thread is
* kernel only. These area can be used as stack guard.
* -----------------------
@@ -283,7 +283,7 @@ void arc_core_mpu_default(u32_t region_attr)
int arc_core_mpu_region(u32_t index, u32_t base, u32_t size,
u32_t region_attr)
{
if (index >= _get_num_regions()) {
if (index >= get_num_regions()) {
return -EINVAL;
}
@@ -304,7 +304,7 @@ int arc_core_mpu_region(u32_t index, u32_t base, u32_t size,
void arc_core_mpu_configure_mem_domain(struct k_thread *thread)
{
int region_index =
_get_region_index_by_type(THREAD_DOMAIN_PARTITION_REGION);
get_region_index_by_type(THREAD_DOMAIN_PARTITION_REGION);
u32_t num_partitions;
struct k_mem_partition *pparts;
struct k_mem_domain *mem_domain = NULL;
@@ -348,7 +348,7 @@ void arc_core_mpu_remove_mem_domain(struct k_mem_domain *mem_domain)
ARG_UNUSED(mem_domain);
int region_index =
_get_region_index_by_type(THREAD_DOMAIN_PARTITION_REGION);
get_region_index_by_type(THREAD_DOMAIN_PARTITION_REGION);
for (; region_index >= 0; region_index--) {
_region_init(region_index, 0, 0, 0);
@@ -367,7 +367,7 @@ void arc_core_mpu_remove_mem_partition(struct k_mem_domain *domain,
ARG_UNUSED(domain);
int region_index =
_get_region_index_by_type(THREAD_DOMAIN_PARTITION_REGION);
get_region_index_by_type(THREAD_DOMAIN_PARTITION_REGION);
LOG_DBG("disable region 0x%x", region_index + part_id);
/* Disable region */
@@ -379,7 +379,7 @@ void arc_core_mpu_remove_mem_partition(struct k_mem_domain *domain,
*/
int arc_core_mpu_get_max_domain_partition_regions(void)
{
return _get_region_index_by_type(THREAD_DOMAIN_PARTITION_REGION) + 1;
return get_region_index_by_type(THREAD_DOMAIN_PARTITION_REGION) + 1;
}
/**
@@ -395,7 +395,7 @@ int arc_core_mpu_buffer_validate(void *addr, size_t size, int write)
* matched region that grants permission or denies access.
*
*/
for (r_index = 0; r_index < _get_num_regions(); r_index++) {
for (r_index = 0; r_index < get_num_regions(); r_index++) {
if (!_is_enabled_region(r_index) ||
!_is_in_region(r_index, (u32_t)addr, size)) {
continue;
@@ -426,7 +426,7 @@ static int arc_mpu_init(struct device *arg)
u32_t num_regions;
u32_t i;
num_regions = _get_num_regions();
num_regions = get_num_regions();
/* ARC MPU supports up to 16 Regions */
if (mpu_config.num_regions > num_regions) {

View File

@@ -148,7 +148,7 @@ static inline int _mpu_probe(u32_t addr)
*/
static inline int _dynamic_region_allocate_index(void)
{
if (dynamic_region_index >= _get_num_regions()) {
if (dynamic_region_index >= get_num_regions()) {
LOG_ERR("no enough mpu entries %d", dynamic_region_index);
return -EINVAL;
}
@@ -314,13 +314,13 @@ static int _dynamic_region_allocate_and_init(u32_t base, u32_t size,
static void _mpu_reset_dynamic_regions(void)
{
u32_t i;
u32_t num_regions = _get_num_regions();
u32_t num_regions = get_num_regions();
for (i = static_regions_num; i < num_regions; i++) {
_region_init(i, 0, 0, 0);
}
for (i = 0; i < dynamic_regions_num; i++) {
for (i = 0U; i < dynamic_regions_num; i++) {
_region_init(
dyn_reg_info[i].index,
dyn_reg_info[i].base,
@@ -341,7 +341,7 @@ static void _mpu_reset_dynamic_regions(void)
*/
static inline int _mpu_configure(u8_t type, u32_t base, u32_t size)
{
u32_t region_attr = _get_region_attr_by_type(type);
u32_t region_attr = get_region_attr_by_type(type);
return _dynamic_region_allocate_and_init(base, size, region_attr);
}
@@ -389,7 +389,7 @@ void arc_core_mpu_configure_thread(struct k_thread *thread)
_mpu_reset_dynamic_regions();
#if defined(CONFIG_MPU_STACK_GUARD)
#if defined(CONFIG_USERSPACE)
if ((thread->thread_base.user_options & K_USER) != 0) {
if ((thread->base.user_options & K_USER) != 0U) {
/* the areas before and after the user stack of thread is
* kernel only. These area can be used as stack guard.
* -----------------------
@@ -448,7 +448,7 @@ void arc_core_mpu_configure_thread(struct k_thread *thread)
num_partitions = mem_domain->num_partitions;
pparts = mem_domain->partitions;
} else {
num_partitions = 0;
num_partitions = 0U;
pparts = NULL;
}
@@ -493,7 +493,7 @@ void arc_core_mpu_default(u32_t region_attr)
int arc_core_mpu_region(u32_t index, u32_t base, u32_t size,
u32_t region_attr)
{
if (index >= _get_num_regions()) {
if (index >= get_num_regions()) {
return -EINVAL;
}
@@ -576,7 +576,7 @@ void arc_core_mpu_remove_mem_partition(struct k_mem_domain *domain,
int arc_core_mpu_get_max_domain_partition_regions(void)
{
/* consider the worst case: each partition requires split */
return (_get_num_regions() - MPU_REGION_NUM_FOR_THREAD) / 2;
return (get_num_regions() - MPU_REGION_NUM_FOR_THREAD) / 2;
}
/**
@@ -594,7 +594,7 @@ int arc_core_mpu_buffer_validate(void *addr, size_t size, int write)
*/
r_index = _mpu_probe((u32_t)addr);
/* match and the area is in one region */
if (r_index >= 0 && r_index == _mpu_probe((u32_t)addr + size)) {
if (r_index >= 0 && r_index == _mpu_probe((u32_t)addr + (size - 1))) {
if (_is_user_accessible_region(r_index, write)) {
return 0;
} else {
@@ -619,7 +619,7 @@ static int arc_mpu_init(struct device *arg)
u32_t num_regions;
u32_t i;
num_regions = _get_num_regions();
num_regions = get_num_regions();
/* ARC MPU supports up to 16 Regions */
if (mpu_config.num_regions > num_regions) {

View File

@@ -117,7 +117,7 @@ extern FUNC_NORETURN void z_cstart(void);
void _PrepC(void)
{
_icache_setup();
z_icache_setup();
adjust_vector_table_base();
z_bss_zero();
z_data_copy();

View File

@@ -99,9 +99,24 @@ SECTION_FUNC(TEXT, _rirq_exit)
mov r1, exc_nest_count
ld r0, [r1]
sub r0, r0, 1
cmp r0, 0
bne.d _rirq_return_from_rirq
st r0, [r1]
/*
* using exc_nest_count to decide whether is nest int is not reliable.
* a better option is to use IRQ_ACT
* A case is: a high priority int preempts a low priority int before
* rirq_enter/firq_enter, then in _rirq_exit/_firq_exit, it will see
* exc_nest_cout is 0, this will lead to possible thread switch, but
* a low priority int is still pending.
*
* If multi bits in IRQ_ACT are set, i.e. last bit != fist bit, it's
* in nest interrupt
*/
lr r0, [_ARC_V2_AUX_IRQ_ACT]
and r0, r0, 0xffff
ffs r1, r0
fls r2, r0
cmp r1, r2
jne _rirq_return_from_rirq
#ifdef CONFIG_STACK_SENTINEL
bl z_check_stack_sentinel
@@ -166,7 +181,23 @@ _rirq_common_interrupt_swap:
pop_s r2
#endif
ld_s r3, [r2, _thread_offset_to_relinquish_cause]
#if defined(CONFIG_USERSPACE)
/*
* when USERSPACE is enabled, according to ARCv2 ISA, SP will be switched
* if interrupt comes out in user mode, and will be recorded in bit 31
* (U bit) of IRQ_ACT. when interrupt exits, SP will be switched back
* according to U bit.
*
* For the case that context switches in interrupt, the target sp must be
* thread's kernel stack, no need to do hardware sp switch. so, U bit should
* be cleared.
*/
lr r0, [_ARC_V2_AUX_IRQ_ACT]
bclr r0, r0, 31
sr r0, [_ARC_V2_AUX_IRQ_ACT]
#endif
ld r3, [r2, _thread_offset_to_relinquish_cause]
breq r3, _CAUSE_RIRQ, _rirq_return_from_rirq
nop
@@ -186,7 +217,7 @@ _rirq_return_from_coop:
/* update status32.ie (explanation in firq_exit:_firq_return_from_coop) */
ld_s r3, [r2, _thread_offset_to_intlock_key]
ld r3, [r2, _thread_offset_to_intlock_key]
st 0, [r2, _thread_offset_to_intlock_key]
cmp r3, 0
or.ne r0, r0, _ARC_V2_STATUS32_IE
@@ -197,7 +228,7 @@ _rirq_return_from_coop:
sub sp, sp, ___isf_t_pc_OFFSET
/* update return value on stack */
ld_s r0, [r2, _thread_offset_to_return_value]
ld r0, [r2, _thread_offset_to_return_value]
st_s r0, [sp, ___isf_t_r0_OFFSET]
/* reset zero-overhead loops */

View File

@@ -49,7 +49,16 @@ SECTION_FUNC(TEXT,__start)
*/
mov r0, 0
kflag r0
#if defined(CONFIG_BOOT_TIME_MEASUREMENT) && defined(CONFIG_ARCV2_TIMER)
/*
* ARCV2 timer (timer0) is a free run timer, let it start to count
* here.
*/
mov r0, 0xffffffff
sr r0, [_ARC_V2_TMR0_LIMIT]
mov r0, 0
sr r0, [_ARC_V2_TMR0_COUNT]
#endif
/* interrupt related init */
sr r0, [_ARC_V2_AUX_IRQ_ACT]
sr r0, [_ARC_V2_AUX_IRQ_CTRL]
@@ -90,7 +99,7 @@ done_cache_invalidate:
#if defined(CONFIG_SYS_POWER_DEEP_SLEEP_STATES) && \
!defined(CONFIG_BOOTLOADER_CONTEXT_RESTORE)
jl @sys_resume_from_deep_sleep
jl @_sys_resume_from_deep_sleep
#endif
#ifdef CONFIG_INIT_STACKS

View File

@@ -82,7 +82,7 @@ SECTION_FUNC(TEXT, __swap)
ld_s r2, [r1, _kernel_offset_to_current]
/* save intlock key */
st_s r0, [r2, _thread_offset_to_intlock_key]
st r0, [r2, _thread_offset_to_intlock_key]
st _CAUSE_COOP, [r2, _thread_offset_to_relinquish_cause]
/*
@@ -92,7 +92,7 @@ SECTION_FUNC(TEXT, __swap)
* z_set_thread_return_value().
*/
ld r3, [_k_neg_eagain]
st_s r3, [r2, _thread_offset_to_return_value]
st r3, [r2, _thread_offset_to_return_value]
/*
* Save status32 and blink on the stack before the callee-saved registers.
@@ -142,7 +142,7 @@ SECTION_FUNC(TEXT, __swap)
pop_s r2
#endif
ld_s r3, [r2, _thread_offset_to_relinquish_cause]
ld r3, [r2, _thread_offset_to_relinquish_cause]
breq r3, _CAUSE_RIRQ, _swap_return_from_rirq
nop
@@ -154,9 +154,9 @@ SECTION_FUNC(TEXT, __swap)
.balign 4
_swap_return_from_coop:
ld_s r1, [r2, _thread_offset_to_intlock_key]
ld r1, [r2, _thread_offset_to_intlock_key]
st 0, [r2, _thread_offset_to_intlock_key]
ld_s r0, [r2, _thread_offset_to_return_value]
ld r0, [r2, _thread_offset_to_return_value]
lr ilink, [_ARC_V2_STATUS32]
bbit1 ilink, _ARC_V2_STATUS32_AE_BIT, _return_from_exc

View File

@@ -67,7 +67,7 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
void *parameter1, void *parameter2, void *parameter3,
int priority, unsigned int options)
{
char *pStackMem = K_THREAD_STACK_BUFFER(stack);
char *pStackMem = Z_THREAD_STACK_BUFFER(stack);
Z_ASSERT_VALID_PRIO(priority, pEntry);
char *stackEnd;
@@ -81,9 +81,9 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
/* adjust stack and stack size */
#if CONFIG_ARC_MPU_VER == 2
stackAdjSize = POW2_CEIL(STACK_SIZE_ALIGN(stackSize));
stackAdjSize = Z_ARC_MPUV2_SIZE_ALIGN(stackSize);
#elif CONFIG_ARC_MPU_VER == 3
stackAdjSize = ROUND_UP(stackSize, STACK_ALIGN);
stackAdjSize = STACK_SIZE_ALIGN(stackSize);
#endif
stackEnd = pStackMem + stackAdjSize;
@@ -95,8 +95,8 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
thread->arch.priv_stack_start =
(u32_t)(stackEnd + STACK_GUARD_SIZE);
stackAdjEnd = (char *)STACK_ROUND_DOWN(stackEnd + STACK_GUARD_SIZE +
CONFIG_PRIVILEGED_STACK_SIZE);
stackAdjEnd = (char *)STACK_ROUND_DOWN(stackEnd +
Z_ARCH_THREAD_STACK_RESERVED);
/* reserve 4 bytes for the start of user sp */
stackAdjEnd -= 4;
@@ -126,7 +126,7 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
*/
pStackMem += STACK_GUARD_SIZE;
stackAdjSize = stackAdjSize + CONFIG_PRIVILEGED_STACK_SIZE;
stackEnd += CONFIG_PRIVILEGED_STACK_SIZE + STACK_GUARD_SIZE;
stackEnd += Z_ARCH_THREAD_STACK_RESERVED;
thread->arch.priv_stack_start = 0;
@@ -141,8 +141,7 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
#endif
}
_new_thread_init(thread, pStackMem, stackAdjSize, priority, options);
z_new_thread_init(thread, pStackMem, stackAdjSize, priority, options);
/* carve the thread entry struct from the "base" of
the privileged stack */
@@ -152,9 +151,9 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
/* fill init context */
pInitCtx->status32 = 0U;
if (options & K_USER) {
pInitCtx->pc = ((u32_t)_user_thread_entry_wrapper);
pInitCtx->pc = ((u32_t)z_user_thread_entry_wrapper);
} else {
pInitCtx->pc = ((u32_t)_thread_entry_wrapper);
pInitCtx->pc = ((u32_t)z_thread_entry_wrapper);
}
/*
@@ -166,9 +165,10 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
*/
pInitCtx->status32 |= _ARC_V2_STATUS32_US;
#else /* For no USERSPACE feature */
pStackMem += Z_ARCH_THREAD_STACK_RESERVED;
stackEnd = pStackMem + stackSize;
_new_thread_init(thread, pStackMem, stackSize, priority, options);
z_new_thread_init(thread, pStackMem, stackSize, priority, options);
stackAdjEnd = stackEnd;
@@ -177,7 +177,7 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
sizeof(struct init_stack_frame));
pInitCtx->status32 = 0U;
pInitCtx->pc = ((u32_t)_thread_entry_wrapper);
pInitCtx->pc = ((u32_t)z_thread_entry_wrapper);
#endif
#ifdef CONFIG_ARC_HAS_SECURE
@@ -203,7 +203,7 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
thread->arch.k_stack_top =
(u32_t)(stackEnd + STACK_GUARD_SIZE);
thread->arch.k_stack_base = (u32_t)
(stackEnd + STACK_GUARD_SIZE + CONFIG_PRIVILEGED_STACK_SIZE);
(stackEnd + Z_ARCH_THREAD_STACK_RESERVED);
} else {
thread->arch.k_stack_top = (u32_t)pStackMem;
thread->arch.k_stack_base = (u32_t)stackEnd;
@@ -270,7 +270,7 @@ FUNC_NORETURN void z_arch_user_mode_enter(k_thread_entry_t user_entry,
/* need to lock cpu here ? */
configure_mpu_thread(_current);
_arc_userspace_enter(user_entry, p1, p2, p3,
z_arc_userspace_enter(user_entry, p1, p2, p3,
(u32_t)_current->stack_obj,
_current->stack_info.size);
CODE_UNREACHABLE;

View File

@@ -14,7 +14,7 @@
#include <toolchain.h>
#include <linker/sections.h>
GTEXT(_thread_entry_wrapper)
GTEXT(z_thread_entry_wrapper)
/*
* @brief Wrapper for z_thread_entry
@@ -25,7 +25,7 @@ GTEXT(_thread_entry_wrapper)
* @return N/A
*/
SECTION_FUNC(TEXT, _thread_entry_wrapper)
SECTION_FUNC(TEXT, z_thread_entry_wrapper)
pop_s r3
pop_s r2

View File

@@ -44,9 +44,9 @@
mov r13, 0
.endm
GTEXT(_arc_userspace_enter)
GTEXT(z_arc_userspace_enter)
GTEXT(_arc_do_syscall)
GTEXT(_user_thread_entry_wrapper)
GTEXT(z_user_thread_entry_wrapper)
GTEXT(z_arch_user_string_nlen)
GTEXT(z_arch_user_string_nlen_fault_start)
GTEXT(z_arch_user_string_nlen_fault_end)
@@ -57,7 +57,7 @@ GTEXT(z_arch_user_string_nlen_fixup)
*
* @return N/A
*/
SECTION_FUNC(TEXT, _user_thread_entry_wrapper)
SECTION_FUNC(TEXT, z_user_thread_entry_wrapper)
pop_s r3
pop_s r2
pop_s r1
@@ -74,7 +74,7 @@ SECTION_FUNC(TEXT, _user_thread_entry_wrapper)
/*
* when CONFIG_INIT_STACKS is enable, stack will be initialized
* in _new_thread_init.
* in z_new_thread_init.
*/
j _arc_go_to_user_space
@@ -87,7 +87,7 @@ SECTION_FUNC(TEXT, _user_thread_entry_wrapper)
* not transition back later, unless they are doing system calls.
*
*/
SECTION_FUNC(TEXT, _arc_userspace_enter)
SECTION_FUNC(TEXT, z_arc_userspace_enter)
/*
* In ARCv2, the U bit can only be set through exception return
*/
@@ -151,7 +151,7 @@ _arc_go_to_user_space:
lr r0, [_ARC_V2_STATUS32]
bset r0, r0, _ARC_V2_STATUS32_U_BIT
mov r1, _thread_entry_wrapper
mov r1, z_thread_entry_wrapper
/* fake exception return */
kflag _ARC_V2_STATUS32_AE
@@ -202,40 +202,47 @@ return_loc_userspace_enter:
*
*/
SECTION_FUNC(TEXT, _arc_do_syscall)
/* r0-r5: arg1-arg6, r6 is call id */
/* the call id is already checked in trap_s handler */
push_s blink
/*
* r0-r5: arg1-arg6, r6 is call id which is already checked in
* trap_s handler, r7 is the system call stack frame pointer
* need to recover r0, r1, r2 because they will be modified in
* _create_irq_stack_frame. If a specific syscall frame (different
* with irq stack frame) is defined, the cover of r0, r1, r2 can be
* optimized.
*/
ld_s r0, [sp, ___isf_t_r0_OFFSET]
ld_s r1, [sp, ___isf_t_r1_OFFSET]
ld_s r2, [sp, ___isf_t_r2_OFFSET]
mov r7, sp
mov blink, _k_syscall_table
ld.as r6, [blink, r6]
jl [r6]
/*
* no need to clear callee regs, as they will be saved and restored
* automatically
*/
clear_scratch_regs
/* save return value */
st_s r0, [sp, ___isf_t_r0_OFFSET]
mov r29, 0
mov r30, 0
pop_s blink
/* through fake exception return, go back to the caller */
kflag _ARC_V2_STATUS32_AE
lr r0, [_ARC_V2_STATUS32]
bset r0, r0, _ARC_V2_STATUS32_AE_BIT
kflag r0
/* the status and return address are saved in trap_s handler */
pop r6
sr r6, [_ARC_V2_ERSTATUS]
pop r6
sr r6, [_ARC_V2_ERET]
#ifdef CONFIG_ARC_HAS_SECURE
pop r6
sr r6, [_ARC_V2_ERSEC_STAT]
ld_s r0, [sp, ___isf_t_sec_stat_OFFSET]
sr r0, [_ARC_V2_ERSEC_STAT]
#endif
ld_s r0, [sp, ___isf_t_status32_OFFSET]
sr r0, [_ARC_V2_ERSTATUS]
mov r6, 0
ld_s r0, [sp, ___isf_t_pc_OFFSET] /* eret into pc */
sr r0, [_ARC_V2_ERET]
_pop_irq_stack_frame
rtie

View File

@@ -33,7 +33,7 @@ extern "C" {
static ALWAYS_INLINE void kernel_arch_init(void)
{
_irq_setup();
z_irq_setup();
}
static ALWAYS_INLINE void
@@ -49,7 +49,7 @@ z_set_thread_return_value(struct k_thread *thread, unsigned int value)
*
* @return IRQ number
*/
static ALWAYS_INLINE int _INTERRUPT_CAUSE(void)
static ALWAYS_INLINE int Z_INTERRUPT_CAUSE(void)
{
u32_t irq_num = z_arc_v2_aux_reg_read(_ARC_V2_ICAUSE);
@@ -58,10 +58,10 @@ static ALWAYS_INLINE int _INTERRUPT_CAUSE(void)
#define z_is_in_isr z_arc_v2_irq_unit_is_in_isr
extern void _thread_entry_wrapper(void);
extern void _user_thread_entry_wrapper(void);
extern void z_thread_entry_wrapper(void);
extern void z_user_thread_entry_wrapper(void);
extern void _arc_userspace_enter(k_thread_entry_t user_entry, void *p1,
extern void z_arc_userspace_enter(k_thread_entry_t user_entry, void *p1,
void *p2, void *p3, u32_t stack, u32_t size);
#endif /* _ASMLANGUAGE */

View File

@@ -24,9 +24,9 @@ extern "C" {
*
* @return The key of the interrupt that is currently being processed.
*/
int _sys_current_irq_key_get(void)
int z_sys_current_irq_key_get(void)
{
return _INTERRUPT_CAUSE();
return Z_INTERRUPT_CAUSE();
}
#ifdef __cplusplus

View File

@@ -34,7 +34,7 @@ extern "C" {
*
* Enables the i-cache and sets it to direct access mode.
*/
static ALWAYS_INLINE void _icache_setup(void)
static ALWAYS_INLINE void z_icache_setup(void)
{
u32_t icache_config = (
IC_CACHE_DIRECT | /* direct mapping (one-way assoc.) */
@@ -44,7 +44,7 @@ static ALWAYS_INLINE void _icache_setup(void)
val = z_arc_v2_aux_reg_read(_ARC_V2_I_CACHE_BUILD);
val &= 0xff;
if (val != 0) { /* is i-cache present? */
if (val != 0U) { /* is i-cache present? */
/* configure i-cache */
z_arc_v2_aux_reg_write(_ARC_V2_IC_CTRL, icache_config);
}

View File

@@ -36,11 +36,11 @@ extern "C" {
extern K_THREAD_STACK_DEFINE(_interrupt_stack, CONFIG_ISR_STACK_SIZE);
/*
* _irq_setup
* z_irq_setup
*
* Configures interrupt handling parameters
*/
static ALWAYS_INLINE void _irq_setup(void)
static ALWAYS_INLINE void z_irq_setup(void)
{
u32_t aux_irq_ctrl_value = (
_ARC_V2_AUX_IRQ_CTRL_LOOP_REGS | /* save lp_xxx registers */
@@ -55,7 +55,7 @@ static ALWAYS_INLINE void _irq_setup(void)
z_arc_v2_aux_reg_write(_ARC_V2_AUX_IRQ_CTRL, aux_irq_ctrl_value);
_kernel.irq_stack =
K_THREAD_STACK_BUFFER(_interrupt_stack) + CONFIG_ISR_STACK_SIZE;
Z_THREAD_STACK_BUFFER(_interrupt_stack) + CONFIG_ISR_STACK_SIZE;
}
#endif /* _ASMLANGUAGE */

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
set(ARCH_FOR_cortex-m0 armv6s-m )
set(ARCH_FOR_cortex-m0plus armv6s-m )
set(ARCH_FOR_cortex-m3 armv7-m )

View File

@@ -1,8 +1,11 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_compile_options_ifdef(CONFIG_COVERAGE_GCOV
-ftest-coverage
-fprofile-arcs
-fno-inline
)
zephyr_library_sources(

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_library_sources(

View File

@@ -1 +1,3 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_sources(arm_core_cmse.c)

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_library_sources( arm_core_mpu.c)

View File

@@ -44,4 +44,23 @@ config MPU_ALLOW_FLASH_WRITE
help
Enable this to allow MPU RWX access to flash memory
config CUSTOM_SECTION_ALIGN
bool "Custom Section Align"
depends on ARM_MPU
help
MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT(ARMv7-M) sometimes cause memory
wasting in linker scripts defined memory sections. Use this symbol
to guarantee user custom section align size to avoid more memory used
for respect alignment. But that needs carefully configure MPU region
and sub-regions(ARMv7-M) to cover this feature.
config CUSTOM_SECTION_MIN_ALIGN_SIZE
int "Custom Section Align Size"
default 32
help
Custom algin size of memory section in linker scripts. Usually
it should consume less alignment memory. Alougth this alignment
size is configured by users, it must also respect the power of
two regulation if hardware requires.
endif # CPU_HAS_MPU

View File

@@ -150,7 +150,7 @@ void z_arch_configure_dynamic_mpu_regions(struct k_thread *thread)
*/
struct k_mem_partition *dynamic_regions[_MAX_DYNAMIC_MPU_REGIONS_NUM];
u8_t region_num = 0;
u8_t region_num = 0U;
#if defined(CONFIG_USERSPACE)
struct k_mem_partition thread_stack;
@@ -184,7 +184,7 @@ void z_arch_configure_dynamic_mpu_regions(struct k_thread *thread)
region_num++;
num_partitions--;
if (num_partitions == 0) {
if (num_partitions == 0U) {
break;
}
}
@@ -193,15 +193,9 @@ void z_arch_configure_dynamic_mpu_regions(struct k_thread *thread)
LOG_DBG("configure user thread %p's context", thread);
if (thread->arch.priv_stack_start) {
u32_t base = (u32_t)thread->stack_obj;
u32_t size = thread->stack_info.size;
#if !defined(CONFIG_MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT)
/* In user-mode the thread stack will include the (optional)
* guard area. For MPUs with arbitrary base address and limit
* it is essential to include this size increase, to avoid
* MPU faults.
*/
size += thread->stack_info.start - base;
#endif
u32_t size = thread->stack_info.size +
(thread->stack_info.start - base);
__ASSERT(region_num < _MAX_DYNAMIC_MPU_REGIONS_NUM,
"Out-of-bounds error for dynamic region map.");
thread_stack = (const struct k_mem_partition)
@@ -306,7 +300,7 @@ void z_arch_mem_domain_destroy(struct k_mem_domain *domain)
for (i = 0; i < CONFIG_MAX_DOMAIN_PARTITIONS; i++) {
partition = domain->partitions[i];
if (partition.size == 0) {
if (partition.size == 0U) {
/* Zero size indicates a non-existing
* memory partition.
*/

View File

@@ -26,7 +26,7 @@ static u8_t static_regions_num;
/**
* Get the number of supported MPU regions.
*/
static inline u8_t _get_num_regions(void)
static inline u8_t get_num_regions(void)
{
#if defined(CONFIG_CPU_CORTEX_M0PLUS) || \
defined(CONFIG_CPU_CORTEX_M3) || \
@@ -57,11 +57,11 @@ static inline u8_t _get_num_regions(void)
#error "Unsupported ARM CPU"
#endif
static int _region_allocate_and_init(const u8_t index,
static int region_allocate_and_init(const u8_t index,
const struct arm_mpu_region *region_conf)
{
/* Attempt to allocate new region index. */
if (index > (_get_num_regions() - 1)) {
if (index > (get_num_regions() - 1)) {
/* No available MPU region index. */
LOG_ERR("Failed to allocate new MPU region %u\n", index);
@@ -71,7 +71,7 @@ static int _region_allocate_and_init(const u8_t index,
LOG_DBG("Program MPU region at index 0x%x", index);
/* Program region */
_region_init(index, region_conf);
region_init(index, region_conf);
return index;
}
@@ -79,7 +79,7 @@ static int _region_allocate_and_init(const u8_t index,
/* This internal function programs an MPU region
* of a given configuration at a given MPU index.
*/
static int _mpu_configure_region(const u8_t index,
static int mpu_configure_region(const u8_t index,
const struct k_mem_partition *new_region)
{
struct arm_mpu_region region_conf;
@@ -88,11 +88,11 @@ static int _mpu_configure_region(const u8_t index,
/* Populate internal ARM MPU region configuration structure. */
region_conf.base = new_region->start;
_get_region_attr_from_k_mem_partition_info(&region_conf.attr,
get_region_attr_from_k_mem_partition_info(&region_conf.attr,
&new_region->attr, new_region->start, new_region->size);
/* Allocate and program region */
return _region_allocate_and_init(index,
return region_allocate_and_init(index,
(const struct arm_mpu_region *)&region_conf);
}
@@ -135,20 +135,20 @@ void arm_core_mpu_mem_partition_config_update(
{
/* Find the partition. ASSERT if not found. */
u8_t i;
u8_t reg_index = _get_num_regions();
u8_t reg_index = get_num_regions();
for (i = static_regions_num; i < _get_num_regions(); i++) {
if (!_is_enabled_region(i)) {
for (i = get_dyn_region_min_index(); i < get_num_regions(); i++) {
if (!is_enabled_region(i)) {
continue;
}
u32_t base = _mpu_region_get_base(i);
u32_t base = mpu_region_get_base(i);
if (base != partition->start) {
continue;
}
u32_t size = _mpu_region_get_size(i);
u32_t size = mpu_region_get_size(i);
if (size != partition->size) {
continue;
@@ -158,12 +158,12 @@ void arm_core_mpu_mem_partition_config_update(
reg_index = i;
break;
}
__ASSERT(reg_index != _get_num_regions(),
"Memory domain partition not found\n");
__ASSERT(reg_index != get_num_regions(),
"Memory domain partition not found\n");
/* Modify the permissions */
partition->attr = *new_attr;
_mpu_configure_region(reg_index, partition);
mpu_configure_region(reg_index, partition);
}
/**
@@ -172,7 +172,7 @@ void arm_core_mpu_mem_partition_config_update(
*/
int arm_core_mpu_get_max_available_dyn_regions(void)
{
return _get_num_regions() - static_regions_num;
return get_num_regions() - static_regions_num;
}
/**
@@ -182,7 +182,7 @@ int arm_core_mpu_get_max_available_dyn_regions(void)
*/
int arm_core_mpu_buffer_validate(void *addr, size_t size, int write)
{
return _mpu_buffer_validate(addr, size, write);
return mpu_buffer_validate(addr, size, write);
}
#endif /* CONFIG_USERSPACE */
@@ -194,8 +194,8 @@ void arm_core_mpu_configure_static_mpu_regions(const struct k_mem_partition
*static_regions[], const u8_t regions_num,
const u32_t background_area_start, const u32_t background_area_end)
{
if (_mpu_configure_static_mpu_regions(static_regions, regions_num,
background_area_start, background_area_end) == -EINVAL) {
if (mpu_configure_static_mpu_regions(static_regions, regions_num,
background_area_start, background_area_end) == -EINVAL) {
__ASSERT(0, "Configuring %u static MPU regions failed\n",
regions_num);
@@ -210,8 +210,8 @@ void arm_core_mpu_mark_areas_for_dynamic_regions(
const struct k_mem_partition dyn_region_areas[],
const u8_t dyn_region_areas_num)
{
if (_mpu_mark_areas_for_dynamic_regions(dyn_region_areas,
dyn_region_areas_num) == -EINVAL) {
if (mpu_mark_areas_for_dynamic_regions(dyn_region_areas,
dyn_region_areas_num) == -EINVAL) {
__ASSERT(0, "Marking %u areas for dynamic regions failed\n",
dyn_region_areas_num);
@@ -225,7 +225,7 @@ void arm_core_mpu_mark_areas_for_dynamic_regions(
void arm_core_mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
*dynamic_regions[], u8_t regions_num)
{
if (_mpu_configure_dynamic_mpu_regions(dynamic_regions, regions_num)
if (mpu_configure_dynamic_mpu_regions(dynamic_regions, regions_num)
== -EINVAL) {
__ASSERT(0, "Configuring %u dynamic MPU regions failed\n",
@@ -245,7 +245,7 @@ static int arm_mpu_init(struct device *arg)
{
u32_t r_index;
if (mpu_config.num_regions > _get_num_regions()) {
if (mpu_config.num_regions > get_num_regions()) {
/* Attempt to configure more MPU regions than
* what is supported by hardware. As this operation
* is executed during system (pre-kernel) initialization,
@@ -255,21 +255,21 @@ static int arm_mpu_init(struct device *arg)
__ASSERT(0,
"Request to configure: %u regions (supported: %u)\n",
mpu_config.num_regions,
_get_num_regions()
get_num_regions()
);
return -1;
}
LOG_DBG("total region count: %d", _get_num_regions());
LOG_DBG("total region count: %d", get_num_regions());
arm_core_mpu_disable();
/* Architecture-specific configuration */
_mpu_init();
mpu_init();
/* Program fixed regions configured at SOC definition. */
for (r_index = 0U; r_index < mpu_config.num_regions; r_index++) {
_region_init(r_index, &mpu_config.mpu_regions[r_index]);
region_init(r_index, &mpu_config.mpu_regions[r_index]);
}
/* Update the number of programmed MPU regions. */

View File

@@ -13,7 +13,7 @@
#include <logging/log.h>
/* Global MPU configuration at system initialization. */
static void _mpu_init(void)
static void mpu_init(void)
{
/* No specific configuration at init for ARMv7-M MPU. */
}
@@ -23,7 +23,7 @@ static void _mpu_init(void)
* Note:
* The caller must provide a valid region index.
*/
static void _region_init(const u32_t index,
static void region_init(const u32_t index,
const struct arm_mpu_region *region_conf)
{
/* Select the region you want to access */
@@ -44,7 +44,7 @@ static void _region_init(const u32_t index,
* @param part Pointer to the data structure holding the partition
* information (must be valid).
*/
static int _mpu_partition_is_valid(const struct k_mem_partition *part)
static int mpu_partition_is_valid(const struct k_mem_partition *part)
{
/* Partition size must be power-of-two,
* and greater or equal to the minimum
@@ -52,11 +52,11 @@ static int _mpu_partition_is_valid(const struct k_mem_partition *part)
* partition must align with size.
*/
int partition_is_valid =
((part->size & (part->size - 1)) == 0)
((part->size & (part->size - 1)) == 0U)
&&
(part->size >= CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE)
&&
((part->start & (part->size - 1)) == 0);
((part->start & (part->size - 1)) == 0U);
return partition_is_valid;
}
@@ -69,10 +69,10 @@ static int _mpu_partition_is_valid(const struct k_mem_partition *part)
* power-of-two value, and the returned SIZE field value corresponds
* to that power-of-two value.
*/
static inline u32_t _size_to_mpu_rasr_size(u32_t size)
static inline u32_t size_to_mpu_rasr_size(u32_t size)
{
/* The minimal supported region size is 32 bytes */
if (size <= 32) {
if (size <= 32U) {
return REGION_32B;
}
@@ -94,7 +94,7 @@ static inline u32_t _size_to_mpu_rasr_size(u32_t size)
* region attribute configuration and size and fill-in a driver-specific
* structure with the correct MPU region configuration.
*/
static inline void _get_region_attr_from_k_mem_partition_info(
static inline void get_region_attr_from_k_mem_partition_info(
arm_mpu_region_attr_t *p_attr,
const k_mem_partition_attr_t *attr, u32_t base, u32_t size)
{
@@ -103,32 +103,44 @@ static inline void _get_region_attr_from_k_mem_partition_info(
*/
(void) base;
p_attr->rasr = attr->rasr_attr | _size_to_mpu_rasr_size(size);
p_attr->rasr = attr->rasr_attr | size_to_mpu_rasr_size(size);
}
#if defined(CONFIG_USERSPACE)
/**
* This internal function returns the minimum HW MPU region index
* that may hold the configuration of a dynamic memory region.
*
* Trivial for ARMv7-M MPU, where dynamic memory areas are programmed
* in MPU regions indices right after the static regions.
*/
static inline int get_dyn_region_min_index(void)
{
return static_regions_num;
}
/**
* This internal function converts the SIZE field value of MPU_RASR
* to the region size (in bytes).
*/
static inline u32_t _mpu_rasr_size_to_size(u32_t rasr_size)
static inline u32_t mpu_rasr_size_to_size(u32_t rasr_size)
{
return 1 << (rasr_size + 1);
}
static inline u32_t _mpu_region_get_base(u32_t index)
static inline u32_t mpu_region_get_base(u32_t index)
{
MPU->RNR = index;
return MPU->RBAR & MPU_RBAR_ADDR_Msk;
}
static inline u32_t _mpu_region_get_size(u32_t index)
static inline u32_t mpu_region_get_size(u32_t index)
{
MPU->RNR = index;
u32_t rasr_size = (MPU->RASR & MPU_RASR_SIZE_Msk) >> MPU_RASR_SIZE_Pos;
return _mpu_rasr_size_to_size(rasr_size);
return mpu_rasr_size_to_size(rasr_size);
}
/**
@@ -137,10 +149,18 @@ static inline u32_t _mpu_region_get_size(u32_t index)
* Note:
* The caller must provide a valid region number.
*/
static inline int _is_enabled_region(u32_t index)
static inline int is_enabled_region(u32_t index)
{
/* Lock IRQs to ensure RNR value is correct when reading RASR. */
unsigned int key;
u32_t rasr;
key = irq_lock();
MPU->RNR = index;
return (MPU->RASR & MPU_RASR_ENABLE_Msk) ? 1 : 0;
rasr = MPU->RASR;
irq_unlock(key);
return (rasr & MPU_RASR_ENABLE_Msk) ? 1 : 0;
}
/* Only a single bit is set for all user accessible permissions.
@@ -155,10 +175,18 @@ static inline int _is_enabled_region(u32_t index)
* Note:
* The caller must provide a valid region number.
*/
static inline u32_t _get_region_ap(u32_t r_index)
static inline u32_t get_region_ap(u32_t r_index)
{
/* Lock IRQs to ensure RNR value is correct when reading RASR. */
unsigned int key;
u32_t rasr;
key = irq_lock();
MPU->RNR = r_index;
return (MPU->RASR & MPU_RASR_AP_Msk) >> MPU_RASR_AP_Pos;
rasr = MPU->RASR;
irq_unlock(key);
return (rasr & MPU_RASR_AP_Msk) >> MPU_RASR_AP_Pos;
}
/**
@@ -167,19 +195,34 @@ static inline u32_t _get_region_ap(u32_t r_index)
* Note:
* The caller must provide a valid region number.
*/
static inline int _is_in_region(u32_t r_index, u32_t start, u32_t size)
static inline int is_in_region(u32_t r_index, u32_t start, u32_t size)
{
u32_t r_addr_start;
u32_t r_size_lshift;
u32_t r_addr_end;
u32_t end;
/* Lock IRQs to ensure RNR value is correct when reading RBAR, RASR. */
unsigned int key;
u32_t rbar, rasr;
key = irq_lock();
MPU->RNR = r_index;
r_addr_start = MPU->RBAR & MPU_RBAR_ADDR_Msk;
r_size_lshift = ((MPU->RASR & MPU_RASR_SIZE_Msk) >>
rbar = MPU->RBAR;
rasr = MPU->RASR;
irq_unlock(key);
r_addr_start = rbar & MPU_RBAR_ADDR_Msk;
r_size_lshift = ((rasr & MPU_RASR_SIZE_Msk) >>
MPU_RASR_SIZE_Pos) + 1;
r_addr_end = r_addr_start + (1UL << r_size_lshift) - 1;
if (start >= r_addr_start && (start + size - 1) <= r_addr_end) {
size = size == 0 ? 0 : size - 1;
if (__builtin_add_overflow(start, size, &end)) {
return 0;
}
if ((start >= r_addr_start) && (end <= r_addr_end)) {
return 1;
}
@@ -192,9 +235,9 @@ static inline int _is_in_region(u32_t r_index, u32_t start, u32_t size)
* Note:
* The caller must provide a valid region number.
*/
static inline int _is_user_accessible_region(u32_t r_index, int write)
static inline int is_user_accessible_region(u32_t r_index, int write)
{
u32_t r_ap = _get_region_ap(r_index);
u32_t r_ap = get_region_ap(r_index);
if (write) {
@@ -208,14 +251,14 @@ static inline int _is_user_accessible_region(u32_t r_index, int write)
* This internal function validates whether a given memory buffer
* is user accessible or not.
*/
static inline int _mpu_buffer_validate(void *addr, size_t size, int write)
static inline int mpu_buffer_validate(void *addr, size_t size, int write)
{
s32_t r_index;
/* Iterate all mpu regions in reversed order */
for (r_index = _get_num_regions() - 1; r_index >= 0; r_index--) {
if (!_is_enabled_region(r_index) ||
!_is_in_region(r_index, (u32_t)addr, size)) {
for (r_index = get_num_regions() - 1; r_index >= 0; r_index--) {
if (!is_enabled_region(r_index) ||
!is_in_region(r_index, (u32_t)addr, size)) {
continue;
}
@@ -224,7 +267,7 @@ static inline int _mpu_buffer_validate(void *addr, size_t size, int write)
* we can stop the iteration immediately once we find the
* matched region that grants permission or denies access.
*/
if (_is_user_accessible_region(r_index, write)) {
if (is_user_accessible_region(r_index, write)) {
return 0;
} else {
return -EPERM;
@@ -237,14 +280,14 @@ static inline int _mpu_buffer_validate(void *addr, size_t size, int write)
#endif /* CONFIG_USERSPACE */
static int _mpu_configure_region(const u8_t index,
static int mpu_configure_region(const u8_t index,
const struct k_mem_partition *new_region);
/* This internal function programs a set of given MPU regions
* over a background memory area, optionally performing a
* sanity check of the memory regions to be programmed.
*/
static int _mpu_configure_regions(const struct k_mem_partition
static int mpu_configure_regions(const struct k_mem_partition
*regions[], u8_t regions_num, u8_t start_reg_index,
bool do_sanity_check)
{
@@ -252,18 +295,18 @@ static int _mpu_configure_regions(const struct k_mem_partition
int reg_index = start_reg_index;
for (i = 0; i < regions_num; i++) {
if (regions[i]->size == 0) {
if (regions[i]->size == 0U) {
continue;
}
/* Non-empty region. */
if (do_sanity_check &&
(!_mpu_partition_is_valid(regions[i]))) {
(!mpu_partition_is_valid(regions[i]))) {
LOG_ERR("Partition %u: sanity check failed.", i);
return -EINVAL;
}
reg_index = _mpu_configure_region(reg_index, regions[i]);
reg_index = mpu_configure_region(reg_index, regions[i]);
if (reg_index == -EINVAL) {
return reg_index;
@@ -284,7 +327,7 @@ static int _mpu_configure_regions(const struct k_mem_partition
* If the static MPU regions configuration has not been successfully
* performed, the error signal is propagated to the caller of the function.
*/
static int _mpu_configure_static_mpu_regions(const struct k_mem_partition
static int mpu_configure_static_mpu_regions(const struct k_mem_partition
*static_regions[], const u8_t regions_num,
const u32_t background_area_base,
const u32_t background_area_end)
@@ -297,7 +340,7 @@ static int _mpu_configure_static_mpu_regions(const struct k_mem_partition
ARG_UNUSED(background_area_base);
ARG_UNUSED(background_area_end);
mpu_reg_index = _mpu_configure_regions(static_regions,
mpu_reg_index = mpu_configure_regions(static_regions,
regions_num, mpu_reg_index, true);
static_regions_num = mpu_reg_index;
@@ -313,7 +356,7 @@ static int _mpu_configure_static_mpu_regions(const struct k_mem_partition
* If the dynamic MPU regions configuration has not been successfully
* performed, the error signal is propagated to the caller of the function.
*/
static int _mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
static int mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
*dynamic_regions[], u8_t regions_num)
{
int mpu_reg_index = static_regions_num;
@@ -322,13 +365,13 @@ static int _mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
* programmed on top of existing SRAM region configuration.
*/
mpu_reg_index = _mpu_configure_regions(dynamic_regions,
mpu_reg_index = mpu_configure_regions(dynamic_regions,
regions_num, mpu_reg_index, false);
if (mpu_reg_index != -EINVAL) {
/* Disable the non-programmed MPU regions. */
for (int i = mpu_reg_index; i < _get_num_regions(); i++) {
for (int i = mpu_reg_index; i < get_num_regions(); i++) {
ARM_MPU_ClrRegion(i);
}
}

View File

@@ -18,7 +18,7 @@
* is allowed.
*/
struct dynamic_region_info {
u8_t index;
int index;
struct arm_mpu_region region_conf;
};
@@ -31,7 +31,7 @@ static struct dynamic_region_info dyn_reg_info[MPU_DYNAMIC_REGION_AREAS_NUM];
/* Global MPU configuration at system initialization. */
static void _mpu_init(void)
static void mpu_init(void)
{
/* Configure the cache-ability attributes for all the
* different types of memory regions.
@@ -57,7 +57,7 @@ static void _mpu_init(void)
* Note:
* The caller must provide a valid region index.
*/
static void _region_init(const u32_t index,
static void region_init(const u32_t index,
const struct arm_mpu_region *region_conf)
{
ARM_MPU_SetRegion(
@@ -87,7 +87,7 @@ static void _region_init(const u32_t index,
* @param part Pointer to the data structure holding the partition
* information (must be valid).
* */
static int _mpu_partition_is_valid(const struct k_mem_partition *part)
static int mpu_partition_is_valid(const struct k_mem_partition *part)
{
/* Partition size must be a multiple of the minimum MPU region
* size. Start address of the partition must align with the
@@ -101,7 +101,7 @@ static int _mpu_partition_is_valid(const struct k_mem_partition *part)
== part->size)
&&
((part->start &
(CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE - 1)) == 0);
(CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE - 1)) == 0U);
return partition_is_valid;
}
@@ -116,7 +116,7 @@ static int _mpu_partition_is_valid(const struct k_mem_partition *part)
* needs to be enabled.
*
*/
static inline int _get_region_index(u32_t start, u32_t size)
static inline int get_region_index(u32_t start, u32_t size)
{
u32_t region_start_addr = arm_cmse_mpu_region_get(start);
u32_t region_end_addr = arm_cmse_mpu_region_get(start + size - 1);
@@ -130,33 +130,33 @@ static inline int _get_region_index(u32_t start, u32_t size)
return -EINVAL;
}
static inline u32_t _mpu_region_get_base(const u32_t index)
static inline u32_t mpu_region_get_base(const u32_t index)
{
MPU->RNR = index;
return MPU->RBAR & MPU_RBAR_BASE_Msk;
}
static inline void _mpu_region_set_base(const u32_t index, const u32_t base)
static inline void mpu_region_set_base(const u32_t index, const u32_t base)
{
MPU->RNR = index;
MPU->RBAR = (MPU->RBAR & (~MPU_RBAR_BASE_Msk))
| (base & MPU_RBAR_BASE_Msk);
}
static inline u32_t _mpu_region_get_last_addr(const u32_t index)
static inline u32_t mpu_region_get_last_addr(const u32_t index)
{
MPU->RNR = index;
return (MPU->RLAR & MPU_RLAR_LIMIT_Msk) | (~MPU_RLAR_LIMIT_Msk);
}
static inline void _mpu_region_set_limit(const u32_t index, const u32_t limit)
static inline void mpu_region_set_limit(const u32_t index, const u32_t limit)
{
MPU->RNR = index;
MPU->RLAR = (MPU->RLAR & (~MPU_RLAR_LIMIT_Msk))
| (limit & MPU_RLAR_LIMIT_Msk);
}
static inline void _mpu_region_get_access_attr(const u32_t index,
static inline void mpu_region_get_access_attr(const u32_t index,
arm_mpu_region_attr_t *attr)
{
MPU->RNR = index;
@@ -167,7 +167,7 @@ static inline void _mpu_region_get_access_attr(const u32_t index,
MPU_RLAR_AttrIndx_Pos;
}
static inline void _mpu_region_get_conf(const u32_t index,
static inline void mpu_region_get_conf(const u32_t index,
struct arm_mpu_region *region_conf)
{
MPU->RNR = index;
@@ -177,7 +177,7 @@ static inline void _mpu_region_get_conf(const u32_t index,
* - Share-ability
* - Access Permissions
*/
_mpu_region_get_access_attr(index, &region_conf->attr);
mpu_region_get_access_attr(index, &region_conf->attr);
/* Region base address */
region_conf->base = (MPU->RBAR & MPU_RBAR_BASE_Msk);
@@ -191,7 +191,7 @@ static inline void _mpu_region_get_conf(const u32_t index,
* region attribute configuration and size and fill-in a driver-specific
* structure with the correct MPU region configuration.
*/
static inline void _get_region_attr_from_k_mem_partition_info(
static inline void get_region_attr_from_k_mem_partition_info(
arm_mpu_region_attr_t *p_attr,
const k_mem_partition_attr_t *attr, u32_t base, u32_t size)
{
@@ -203,10 +203,35 @@ static inline void _get_region_attr_from_k_mem_partition_info(
#if defined(CONFIG_USERSPACE)
static inline u32_t _mpu_region_get_size(u32_t index)
/**
* This internal function returns the minimum HW MPU region index
* that may hold the configuration of a dynamic memory region.
*
* Browse through the memory areas marked for dynamic MPU programming,
* pick the one with the minimum MPU region index. Return that index.
*
* The function is optimized for the (most common) use-case of a single
* marked area for dynamic memory regions.
*/
static inline int get_dyn_region_min_index(void)
{
return _mpu_region_get_last_addr(index) + 1
- _mpu_region_get_base(index);
int dyn_reg_min_index = dyn_reg_info[0].index;
#if MPU_DYNAMIC_REGION_AREAS_NUM > 1
for (int i = 1; i < MPU_DYNAMIC_REGION_AREAS_NUM; i++) {
if ((dyn_reg_info[i].index != -EINVAL) &&
(dyn_reg_info[i].index < dyn_reg_min_index)
) {
dyn_reg_min_index = dyn_reg_info[i].index;
}
}
#endif
return dyn_reg_min_index;
}
static inline u32_t mpu_region_get_size(u32_t index)
{
return mpu_region_get_last_addr(index) + 1
- mpu_region_get_base(index);
}
/**
@@ -215,7 +240,7 @@ static inline u32_t _mpu_region_get_size(u32_t index)
* Note:
* The caller must provide a valid region number.
*/
static inline int _is_enabled_region(u32_t index)
static inline int is_enabled_region(u32_t index)
{
MPU->RNR = index;
@@ -225,8 +250,27 @@ static inline int _is_enabled_region(u32_t index)
/**
* This internal function validates whether a given memory buffer
* is user accessible or not.
*
* Note: [Doc. number: ARM-ECM-0359818]
* "Some SAU, IDAU, and MPU configurations block the efficient implementation
* of an address range check. The CMSE intrinsic operates under the assumption
* that the configuration of the SAU, IDAU, and MPU is constrained as follows:
* - An object is allocated in a single MPU/SAU/IDAU region.
* - A stack is allocated in a single region.
*
* These points imply that the memory buffer does not span across multiple MPU,
* SAU, or IDAU regions."
*
* MPU regions are configurable, however, some platforms might have fixed-size
* SAU or IDAU regions. So, even if a buffer is allocated inside a single MPU
* region, it might span across multiple SAU/IDAU regions, which will make the
* TT-based address range check fail.
*
* Therefore, the function performs a second check, which is based on MPU only,
* in case the fast address range check fails.
*
*/
static inline int _mpu_buffer_validate(void *addr, size_t size, int write)
static inline int mpu_buffer_validate(void *addr, size_t size, int write)
{
u32_t _addr = (u32_t)addr;
u32_t _size = (u32_t)size;
@@ -241,23 +285,44 @@ static inline int _mpu_buffer_validate(void *addr, size_t size, int write)
}
}
#if defined(CONFIG_CPU_HAS_TEE)
/*
* Validation failure may be due to SAU/IDAU presence.
* We re-check user accessibility based on MPU only.
*/
s32_t r_index_base = arm_cmse_mpu_region_get(_addr);
s32_t r_index_last = arm_cmse_mpu_region_get(_addr + _size - 1);
if ((r_index_base != -EINVAL) && (r_index_base == r_index_last)) {
/* Valid MPU region, check permissions on base address only. */
if (write) {
if (arm_cmse_addr_readwrite_ok(_addr, 1)) {
return 0;
}
} else {
if (arm_cmse_addr_read_ok(_addr, 1)) {
return 0;
}
}
}
#endif /* CONFIG_CPU_HAS_TEE */
return -EPERM;
}
#endif /* CONFIG_USERSPACE */
static int _region_allocate_and_init(const u8_t index,
static int region_allocate_and_init(const u8_t index,
const struct arm_mpu_region *region_conf);
static int _mpu_configure_region(const u8_t index,
static int mpu_configure_region(const u8_t index,
const struct k_mem_partition *new_region);
/* This internal function programs a set of given MPU regions
* over a background memory area, optionally performing a
* sanity check of the memory regions to be programmed.
*/
static int _mpu_configure_regions(const struct k_mem_partition
static int mpu_configure_regions(const struct k_mem_partition
*regions[], u8_t regions_num, u8_t start_reg_index,
bool do_sanity_check)
{
@@ -265,13 +330,13 @@ static int _mpu_configure_regions(const struct k_mem_partition
int reg_index = start_reg_index;
for (i = 0; i < regions_num; i++) {
if (regions[i]->size == 0) {
if (regions[i]->size == 0U) {
continue;
}
/* Non-empty region. */
if (do_sanity_check &&
(!_mpu_partition_is_valid(regions[i]))) {
(!mpu_partition_is_valid(regions[i]))) {
LOG_ERR("Partition %u: sanity check failed.", i);
return -EINVAL;
}
@@ -280,7 +345,7 @@ static int _mpu_configure_regions(const struct k_mem_partition
* inside which the new region will be configured.
*/
int u_reg_index =
_get_region_index(regions[i]->start, regions[i]->size);
get_region_index(regions[i]->start, regions[i]->size);
if ((u_reg_index == -EINVAL) ||
(u_reg_index > (reg_index - 1))) {
@@ -293,8 +358,8 @@ static int _mpu_configure_regions(const struct k_mem_partition
* The new memory region is to be placed inside the underlying
* region, possibly splitting the underlying region into two.
*/
u32_t u_reg_base = _mpu_region_get_base(u_reg_index);
u32_t u_reg_last = _mpu_region_get_last_addr(u_reg_index);
u32_t u_reg_base = mpu_region_get_base(u_reg_index);
u32_t u_reg_last = mpu_region_get_last_addr(u_reg_index);
u32_t reg_last = regions[i]->start + regions[i]->size - 1;
if ((regions[i]->start == u_reg_base) &&
@@ -305,17 +370,17 @@ static int _mpu_configure_regions(const struct k_mem_partition
* underlying region with those of the new
* region.
*/
_mpu_configure_region(u_reg_index, regions[i]);
mpu_configure_region(u_reg_index, regions[i]);
} else if (regions[i]->start == u_reg_base) {
/* The new region starts exactly at the start of the
* underlying region; the start of the underlying
* region needs to be set to the end of the new region.
*/
_mpu_region_set_base(u_reg_index,
mpu_region_set_base(u_reg_index,
regions[i]->start + regions[i]->size);
reg_index =
_mpu_configure_region(reg_index, regions[i]);
mpu_configure_region(reg_index, regions[i]);
if (reg_index == -EINVAL) {
return reg_index;
@@ -328,11 +393,11 @@ static int _mpu_configure_regions(const struct k_mem_partition
* region needs to be set to the start of the
* new region.
*/
_mpu_region_set_limit(u_reg_index,
mpu_region_set_limit(u_reg_index,
regions[i]->start - 1);
reg_index =
_mpu_configure_region(reg_index, regions[i]);
mpu_configure_region(reg_index, regions[i]);
if (reg_index == -EINVAL) {
return reg_index;
@@ -344,11 +409,11 @@ static int _mpu_configure_regions(const struct k_mem_partition
* underlying region, which needs to split
* into two regions.
*/
_mpu_region_set_limit(u_reg_index,
mpu_region_set_limit(u_reg_index,
regions[i]->start - 1);
reg_index =
_mpu_configure_region(reg_index, regions[i]);
mpu_configure_region(reg_index, regions[i]);
if (reg_index == -EINVAL) {
return reg_index;
@@ -361,7 +426,7 @@ static int _mpu_configure_regions(const struct k_mem_partition
*/
struct arm_mpu_region fill_region;
_mpu_region_get_access_attr(u_reg_index,
mpu_region_get_access_attr(u_reg_index,
&fill_region.attr);
fill_region.base = regions[i]->start +
regions[i]->size;
@@ -370,7 +435,7 @@ static int _mpu_configure_regions(const struct k_mem_partition
regions[i]->size), (u_reg_last - reg_last));
reg_index =
_region_allocate_and_init(reg_index,
region_allocate_and_init(reg_index,
(const struct arm_mpu_region *)
&fill_region);
@@ -393,7 +458,7 @@ static int _mpu_configure_regions(const struct k_mem_partition
* If the static MPU regions configuration has not been successfully
* performed, the error signal is propagated to the caller of the function.
*/
static int _mpu_configure_static_mpu_regions(const struct k_mem_partition
static int mpu_configure_static_mpu_regions(const struct k_mem_partition
*static_regions[], const u8_t regions_num,
const u32_t background_area_base,
const u32_t background_area_end)
@@ -407,7 +472,7 @@ static int _mpu_configure_static_mpu_regions(const struct k_mem_partition
ARG_UNUSED(background_area_base);
ARG_UNUSED(background_area_end);
mpu_reg_index = _mpu_configure_regions(static_regions,
mpu_reg_index = mpu_configure_regions(static_regions,
regions_num, mpu_reg_index, true);
static_regions_num = mpu_reg_index;
@@ -419,7 +484,7 @@ static int _mpu_configure_static_mpu_regions(const struct k_mem_partition
* where dynamic region programming is allowed. Return zero on success, or
* -EINVAL on error.
*/
static int _mpu_mark_areas_for_dynamic_regions(
static int mpu_mark_areas_for_dynamic_regions(
const struct k_mem_partition dyn_region_areas[],
const u8_t dyn_region_areas_num)
{
@@ -428,14 +493,14 @@ static int _mpu_mark_areas_for_dynamic_regions(
* which dynamic memory regions may be programmed at run-time.
*/
for (int i = 0; i < dyn_region_areas_num; i++) {
if (dyn_region_areas[i].size == 0) {
if (dyn_region_areas[i].size == 0U) {
continue;
}
/* Non-empty area */
/* Retrieve HW MPU region index */
dyn_reg_info[i].index =
_get_region_index(dyn_region_areas[i].start,
get_region_index(dyn_region_areas[i].start,
dyn_region_areas[i].size);
if (dyn_reg_info[i].index == -EINVAL) {
@@ -449,7 +514,7 @@ static int _mpu_mark_areas_for_dynamic_regions(
}
/* Store default configuration */
_mpu_region_get_conf(dyn_reg_info[i].index,
mpu_region_get_conf(dyn_reg_info[i].index,
&dyn_reg_info[i].region_conf);
}
@@ -464,13 +529,13 @@ static int _mpu_mark_areas_for_dynamic_regions(
* If the dynamic MPU regions configuration has not been successfully
* performed, the error signal is propagated to the caller of the function.
*/
static int _mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
static int mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
*dynamic_regions[], u8_t regions_num)
{
int mpu_reg_index = static_regions_num;
/* Disable all MPU regions except for the static ones. */
for (int i = mpu_reg_index; i < _get_num_regions(); i++) {
for (int i = mpu_reg_index; i < get_num_regions(); i++) {
ARM_MPU_ClrRegion(i);
}
@@ -478,7 +543,7 @@ static int _mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
* be programmed.
*/
for (int i = 0; i < MPU_DYNAMIC_REGION_AREAS_NUM; i++) {
_region_init(dyn_reg_info[i].index,
region_init(dyn_reg_info[i].index,
&dyn_reg_info[i].region_conf);
}
@@ -487,7 +552,7 @@ static int _mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
* given boundaries.
*/
mpu_reg_index = _mpu_configure_regions(dynamic_regions,
mpu_reg_index = mpu_configure_regions(dynamic_regions,
regions_num, mpu_reg_index, true);
return mpu_reg_index;

View File

@@ -25,7 +25,7 @@ LOG_MODULE_DECLARE(mpu);
static u8_t static_regions_num;
/* Global MPU configuration at system initialization. */
static void _mpu_init(void)
static void mpu_init(void)
{
/* Enable clock for the Memory Protection Unit (MPU). */
CLOCK_EnableClock(kCLOCK_Sysmpu0);
@@ -34,7 +34,7 @@ static void _mpu_init(void)
/**
* Get the number of supported MPU regions.
*/
static inline u8_t _get_num_regions(void)
static inline u8_t get_num_regions(void)
{
return FSL_FEATURE_SYSMPU_DESCRIPTOR_COUNT;
}
@@ -47,21 +47,21 @@ static inline u8_t _get_num_regions(void)
* @param part Pointer to the data structure holding the partition
* information (must be valid).
*/
static int _mpu_partition_is_valid(const struct k_mem_partition *part)
static int mpu_partition_is_valid(const struct k_mem_partition *part)
{
/* Partition size must be a multiple of the minimum MPU region
* size. Start address of the partition must align with the
* minimum MPU region size.
*/
int partition_is_valid =
(part->size != 0)
(part->size != 0U)
&&
((part->size &
(~(CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE - 1)))
== part->size)
&&
((part->start &
(CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE - 1)) == 0);
(CONFIG_ARM_MPU_REGION_MIN_ALIGN_AND_SIZE - 1)) == 0U);
return partition_is_valid;
}
@@ -71,14 +71,14 @@ static int _mpu_partition_is_valid(const struct k_mem_partition *part)
* Note:
* The caller must provide a valid region index.
*/
static void _region_init(const u32_t index,
static void region_init(const u32_t index,
const struct nxp_mpu_region *region_conf)
{
u32_t region_base = region_conf->base;
u32_t region_end = region_conf->end;
u32_t region_attr = region_conf->attr.attr;
if (index == 0) {
if (index == 0U) {
/* The MPU does not allow writes from the core to affect the
* RGD0 start or end addresses nor the permissions associated
* with the debugger; it can only write the permission fields
@@ -114,11 +114,11 @@ static void _region_init(const u32_t index,
}
static int _region_allocate_and_init(const u8_t index,
static int region_allocate_and_init(const u8_t index,
const struct nxp_mpu_region *region_conf)
{
/* Attempt to allocate new region index. */
if (index > (_get_num_regions() - 1)) {
if (index > (get_num_regions() - 1)) {
/* No available MPU region index. */
LOG_ERR("Failed to allocate new MPU region %u\n", index);
@@ -128,7 +128,7 @@ static int _region_allocate_and_init(const u8_t index,
LOG_DBG("Program MPU region at index 0x%x", index);
/* Program region */
_region_init(index, region_conf);
region_init(index, region_conf);
return index;
}
@@ -138,7 +138,7 @@ static int _region_allocate_and_init(const u8_t index,
* region attribute configuration and size and fill-in a driver-specific
* structure with the correct MPU region attribute configuration.
*/
static inline void _get_region_attr_from_k_mem_partition_info(
static inline void get_region_attr_from_k_mem_partition_info(
nxp_mpu_region_attr_t *p_attr,
const k_mem_partition_attr_t *attr, u32_t base, u32_t size)
{
@@ -154,7 +154,7 @@ static inline void _get_region_attr_from_k_mem_partition_info(
/* This internal function programs an MPU region
* of a given configuration at a given MPU index.
*/
static int _mpu_configure_region(const u8_t index,
static int mpu_configure_region(const u8_t index,
const struct k_mem_partition *new_region)
{
struct nxp_mpu_region region_conf;
@@ -164,17 +164,17 @@ static int _mpu_configure_region(const u8_t index,
/* Populate internal NXP MPU region configuration structure. */
region_conf.base = new_region->start;
region_conf.end = (new_region->start + new_region->size - 1);
_get_region_attr_from_k_mem_partition_info(&region_conf.attr,
get_region_attr_from_k_mem_partition_info(&region_conf.attr,
&new_region->attr, new_region->start, new_region->size);
/* Allocate and program region */
return _region_allocate_and_init(index,
return region_allocate_and_init(index,
(const struct nxp_mpu_region *)&region_conf);
}
#if defined(CONFIG_MPU_STACK_GUARD)
/* This internal function partitions the SRAM MPU region */
static int _mpu_sram_partitioning(u8_t index,
static int mpu_sram_partitioning(u8_t index,
const struct k_mem_partition *p_region)
{
/*
@@ -203,8 +203,8 @@ static int _mpu_sram_partitioning(u8_t index,
added_sram_region.attr.attr =
mpu_config.mpu_regions[mpu_config.sram_region].attr.attr;
if (_region_allocate_and_init(index,
(const struct nxp_mpu_region *)&added_sram_region) < 0) {
if (region_allocate_and_init(index,
(const struct nxp_mpu_region *)&added_sram_region) < 0) {
return -EINVAL;
}
@@ -222,7 +222,7 @@ static int _mpu_sram_partitioning(u8_t index,
adjusted_sram_region.attr.attr =
mpu_config.mpu_regions[mpu_config.sram_region].attr.attr;
_region_init(mpu_config.sram_region,
region_init(mpu_config.sram_region,
(const struct nxp_mpu_region *)&adjusted_sram_region);
return index;
@@ -233,7 +233,7 @@ static int _mpu_sram_partitioning(u8_t index,
* over a background memory area, optionally performing a
* sanity check of the memory regions to be programmed.
*/
static int _mpu_configure_regions(const struct k_mem_partition
static int mpu_configure_regions(const struct k_mem_partition
*regions[], u8_t regions_num, u8_t start_reg_index,
bool do_sanity_check)
{
@@ -241,27 +241,30 @@ static int _mpu_configure_regions(const struct k_mem_partition
int reg_index = start_reg_index;
for (i = 0; i < regions_num; i++) {
if (regions[i]->size == 0) {
if (regions[i]->size == 0U) {
continue;
}
/* Non-empty region. */
if (do_sanity_check &&
(!_mpu_partition_is_valid(regions[i]))) {
(!mpu_partition_is_valid(regions[i]))) {
LOG_ERR("Partition %u: sanity check failed.", i);
return -EINVAL;
}
#if defined(CONFIG_MPU_STACK_GUARD)
if (regions[i]->attr.ap_attr == MPU_REGION_SU_RX) {
unsigned int key;
/* Attempt to configure an MPU Stack Guard region; this
* will require splitting of the underlying SRAM region
* into two SRAM regions, leaving out the guard area to
* be programmed afterwards.
*/
key = irq_lock();
reg_index =
_mpu_sram_partitioning(reg_index, regions[i]);
mpu_sram_partitioning(reg_index, regions[i]);
irq_unlock(key);
}
#endif /* CONFIG_MPU_STACK_GUARD */
@@ -269,7 +272,7 @@ static int _mpu_configure_regions(const struct k_mem_partition
return reg_index;
}
reg_index = _mpu_configure_region(reg_index, regions[i]);
reg_index = mpu_configure_region(reg_index, regions[i]);
if (reg_index == -EINVAL) {
return reg_index;
@@ -290,7 +293,7 @@ static int _mpu_configure_regions(const struct k_mem_partition
* If the static MPU regions configuration has not been successfully
* performed, the error signal is propagated to the caller of the function.
*/
static int _mpu_configure_static_mpu_regions(const struct k_mem_partition
static int mpu_configure_static_mpu_regions(const struct k_mem_partition
*static_regions[], const u8_t regions_num,
const u32_t background_area_base,
const u32_t background_area_end)
@@ -303,7 +306,7 @@ static int _mpu_configure_static_mpu_regions(const struct k_mem_partition
ARG_UNUSED(background_area_base);
ARG_UNUSED(background_area_end);
mpu_reg_index = _mpu_configure_regions(static_regions,
mpu_reg_index = mpu_configure_regions(static_regions,
regions_num, mpu_reg_index, true);
static_regions_num = mpu_reg_index;
@@ -319,9 +322,11 @@ static int _mpu_configure_static_mpu_regions(const struct k_mem_partition
* If the dynamic MPU regions configuration has not been successfully
* performed, the error signal is propagated to the caller of the function.
*/
static int _mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
static int mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
*dynamic_regions[], u8_t regions_num)
{
unsigned int key;
/* Reset MPU regions inside which dynamic memory regions may
* be programmed.
*
@@ -330,10 +335,10 @@ static int _mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
* This might trigger memory faults if ISRs occurring during
* re-programming perform access in those areas.
*/
arm_core_mpu_disable();
_region_init(mpu_config.sram_region, (const struct nxp_mpu_region *)
key = irq_lock();
region_init(mpu_config.sram_region, (const struct nxp_mpu_region *)
&mpu_config.mpu_regions[mpu_config.sram_region]);
arm_core_mpu_enable();
irq_unlock(key);
int mpu_reg_index = static_regions_num;
@@ -341,13 +346,13 @@ static int _mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
* programmed on top of existing SRAM region configuration.
*/
mpu_reg_index = _mpu_configure_regions(dynamic_regions,
mpu_reg_index = mpu_configure_regions(dynamic_regions,
regions_num, mpu_reg_index, false);
if (mpu_reg_index != -EINVAL) {
/* Disable the non-programmed MPU regions. */
for (int i = mpu_reg_index; i < _get_num_regions(); i++) {
for (int i = mpu_reg_index; i < get_num_regions(); i++) {
LOG_DBG("disable region 0x%x", i);
/* Disable region */
@@ -392,12 +397,12 @@ void arm_core_mpu_disable(void)
#if defined(CONFIG_USERSPACE)
static inline u32_t _mpu_region_get_base(u32_t r_index)
static inline u32_t mpu_region_get_base(u32_t r_index)
{
return SYSMPU->WORD[r_index][0];
}
static inline u32_t _mpu_region_get_size(u32_t r_index)
static inline u32_t mpu_region_get_size(u32_t r_index)
{
/* <END> + 1 - <BASE> */
return (SYSMPU->WORD[r_index][1] + 1) - SYSMPU->WORD[r_index][0];
@@ -409,7 +414,7 @@ static inline u32_t _mpu_region_get_size(u32_t r_index)
* Note:
* The caller must provide a valid region number.
*/
static inline int _is_enabled_region(u32_t r_index)
static inline int is_enabled_region(u32_t r_index)
{
return SYSMPU->WORD[r_index][3] & SYSMPU_WORD_VLD_MASK;
}
@@ -420,15 +425,21 @@ static inline int _is_enabled_region(u32_t r_index)
* Note:
* The caller must provide a valid region number.
*/
static inline int _is_in_region(u32_t r_index, u32_t start, u32_t size)
static inline int is_in_region(u32_t r_index, u32_t start, u32_t size)
{
u32_t r_addr_start;
u32_t r_addr_end;
u32_t end;
r_addr_start = SYSMPU->WORD[r_index][0];
r_addr_end = SYSMPU->WORD[r_index][1];
if (start >= r_addr_start && (start + size - 1) <= r_addr_end) {
size = size == 0 ? 0 : size - 1;
if (__builtin_add_overflow(start, size, &end)) {
return 0;
}
if ((start >= r_addr_start) && (end <= r_addr_end)) {
return 1;
}
@@ -444,20 +455,20 @@ void arm_core_mpu_mem_partition_config_update(
{
/* Find the partition. ASSERT if not found. */
u8_t i;
u8_t reg_index = _get_num_regions();
u8_t reg_index = get_num_regions();
for (i = static_regions_num; i < _get_num_regions(); i++) {
if (!_is_enabled_region(i)) {
for (i = static_regions_num; i < get_num_regions(); i++) {
if (!is_enabled_region(i)) {
continue;
}
u32_t base = _mpu_region_get_base(i);
u32_t base = mpu_region_get_base(i);
if (base != partition->start) {
continue;
}
u32_t size = _mpu_region_get_size(i);
u32_t size = mpu_region_get_size(i);
if (size != partition->size) {
continue;
@@ -467,12 +478,12 @@ void arm_core_mpu_mem_partition_config_update(
reg_index = i;
break;
}
__ASSERT(reg_index != _get_num_regions(),
"Memory domain partition not found\n");
__ASSERT(reg_index != get_num_regions(),
"Memory domain partition not found\n");
/* Modify the permissions */
partition->attr = *new_attr;
_mpu_configure_region(reg_index, partition);
mpu_configure_region(reg_index, partition);
}
/**
@@ -481,7 +492,7 @@ void arm_core_mpu_mem_partition_config_update(
*/
int arm_core_mpu_get_max_available_dyn_regions(void)
{
return _get_num_regions() - static_regions_num;
return get_num_regions() - static_regions_num;
}
/**
@@ -490,7 +501,7 @@ int arm_core_mpu_get_max_available_dyn_regions(void)
* Note:
* The caller must provide a valid region number.
*/
static inline int _is_user_accessible_region(u32_t r_index, int write)
static inline int is_user_accessible_region(u32_t r_index, int write)
{
u32_t r_ap = SYSMPU->WORD[r_index][2];
@@ -509,9 +520,9 @@ int arm_core_mpu_buffer_validate(void *addr, size_t size, int write)
u8_t r_index;
/* Iterate through all MPU regions */
for (r_index = 0U; r_index < _get_num_regions(); r_index++) {
if (!_is_enabled_region(r_index) ||
!_is_in_region(r_index, (u32_t)addr, size)) {
for (r_index = 0U; r_index < get_num_regions(); r_index++) {
if (!is_enabled_region(r_index) ||
!is_in_region(r_index, (u32_t)addr, size)) {
continue;
}
@@ -520,7 +531,7 @@ int arm_core_mpu_buffer_validate(void *addr, size_t size, int write)
* So we can stop the iteration immediately once we find the
* matched region that grants permission.
*/
if (_is_user_accessible_region(r_index, write)) {
if (is_user_accessible_region(r_index, write)) {
return 0;
}
}
@@ -537,8 +548,8 @@ void arm_core_mpu_configure_static_mpu_regions(const struct k_mem_partition
*static_regions[], const u8_t regions_num,
const u32_t background_area_start, const u32_t background_area_end)
{
if (_mpu_configure_static_mpu_regions(static_regions, regions_num,
background_area_start, background_area_end) == -EINVAL) {
if (mpu_configure_static_mpu_regions(static_regions, regions_num,
background_area_start, background_area_end) == -EINVAL) {
__ASSERT(0, "Configuring %u static MPU regions failed\n",
regions_num);
@@ -551,7 +562,7 @@ void arm_core_mpu_configure_static_mpu_regions(const struct k_mem_partition
void arm_core_mpu_configure_dynamic_mpu_regions(const struct k_mem_partition
*dynamic_regions[], u8_t regions_num)
{
if (_mpu_configure_dynamic_mpu_regions(dynamic_regions, regions_num)
if (mpu_configure_dynamic_mpu_regions(dynamic_regions, regions_num)
== -EINVAL) {
__ASSERT(0, "Configuring %u dynamic MPU regions failed\n",
@@ -573,7 +584,7 @@ static int nxp_mpu_init(struct device *arg)
u32_t r_index;
if (mpu_config.num_regions > _get_num_regions()) {
if (mpu_config.num_regions > get_num_regions()) {
/* Attempt to configure more MPU regions than
* what is supported by hardware. As this operation
* may be executed during system (pre-kernel) initialization,
@@ -583,21 +594,21 @@ static int nxp_mpu_init(struct device *arg)
__ASSERT(0,
"Request to configure: %u regions (supported: %u)\n",
mpu_config.num_regions,
_get_num_regions()
get_num_regions()
);
return -1;
}
LOG_DBG("total region count: %d", _get_num_regions());
LOG_DBG("total region count: %d", get_num_regions());
arm_core_mpu_disable();
/* Architecture-specific configuration */
_mpu_init();
mpu_init();
/* Program fixed regions configured at SOC definition. */
for (r_index = 0U; r_index < mpu_config.num_regions; r_index++) {
_region_init(r_index, &mpu_config.mpu_regions[r_index]);
region_init(r_index, &mpu_config.mpu_regions[r_index]);
}
/* Update the number of programmed MPU regions. */

View File

@@ -20,14 +20,14 @@
#include <toolchain.h>
#include <linker/sections.h>
extern void _SysNmiOnReset(void);
extern void z_SysNmiOnReset(void);
#if !defined(CONFIG_RUNTIME_NMI)
#define handler _SysNmiOnReset
#define handler z_SysNmiOnReset
#endif
#ifdef CONFIG_RUNTIME_NMI
typedef void (*_NmiHandler_t)(void);
static _NmiHandler_t handler = _SysNmiOnReset;
static _NmiHandler_t handler = z_SysNmiOnReset;
/**
*
@@ -39,7 +39,7 @@ static _NmiHandler_t handler = _SysNmiOnReset;
* @return N/A
*/
static void _DefaultHandler(void)
static void DefaultHandler(void)
{
printk("NMI received! Rebooting...\n");
/* In ARM implementation sys_reboot ignores the parameter */
@@ -59,7 +59,7 @@ static void _DefaultHandler(void)
void z_NmiInit(void)
{
handler = _DefaultHandler;
handler = DefaultHandler;
}
/**
@@ -73,7 +73,7 @@ void z_NmiInit(void)
* @return N/A
*/
void _NmiHandlerSet(void (*pHandler)(void))
void z_NmiHandlerSet(void (*pHandler)(void))
{
handler = pHandler;
}

View File

@@ -20,8 +20,8 @@
_ASM_FILE_PROLOGUE
GTEXT(_SysNmiOnReset)
GTEXT(z_SysNmiOnReset)
SECTION_FUNC(TEXT, _SysNmiOnReset)
SECTION_FUNC(TEXT, z_SysNmiOnReset)
wfi
b _SysNmiOnReset
b z_SysNmiOnReset

View File

@@ -22,7 +22,6 @@
#include <linker/linker-defs.h>
#include <kernel_internal.h>
#include <arch/arm/cortex_m/cmsis.h>
#include <cortex_m/stack.h>
#if defined(__GNUC__)
/*
@@ -37,44 +36,6 @@
#include <string.h>
static inline void switch_sp_to_psp(void)
{
__set_CONTROL(__get_CONTROL() | CONTROL_SPSEL_Msk);
/*
* When changing the stack pointer, software must use an ISB instruction
* immediately after the MSR instruction. This ensures that instructions
* after the ISB instruction execute using the new stack pointer.
*/
__ISB();
}
static inline void set_and_switch_to_psp(void)
{
u32_t process_sp;
process_sp = (u32_t)&_interrupt_stack + CONFIG_ISR_STACK_SIZE;
__set_PSP(process_sp);
switch_sp_to_psp();
}
void lock_interrupts(void)
{
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
__disable_irq();
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
__set_BASEPRI(_EXC_IRQ_DEFAULT_PRIO);
#else
#error Unknown ARM architecture
#endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
}
#ifdef CONFIG_INIT_STACKS
static inline void init_stacks(void)
{
memset(&_interrupt_stack, 0xAA, CONFIG_ISR_STACK_SIZE);
}
#endif
#ifdef CONFIG_CPU_CORTEX_M_HAS_VTOR
#ifdef CONFIG_XIP
@@ -161,21 +122,13 @@ extern FUNC_NORETURN void z_cstart(void);
* @return N/A
*/
extern void _IntLibInit(void);
extern void z_IntLibInit(void);
#ifdef CONFIG_BOOT_TIME_MEASUREMENT
extern u64_t __start_time_stamp;
#endif
void _PrepC(void)
{
#ifdef CONFIG_INIT_STACKS
init_stacks();
#endif
/*
* Set PSP and use it to boot without using MSP, so that it
* gets set to _interrupt_stack during initialization.
*/
set_and_switch_to_psp();
relocate_vector_table();
enable_floating_point();
z_bss_zero();
@@ -183,7 +136,7 @@ void _PrepC(void)
#ifdef CONFIG_BOOT_TIME_MEASUREMENT
__start_time_stamp = 0U;
#endif
_IntLibInit();
z_IntLibInit();
z_cstart();
CODE_UNREACHABLE;
}

View File

@@ -19,6 +19,8 @@
_ASM_FILE_PROLOGUE
GTEXT(__reset)
GTEXT(memset)
GDATA(_interrupt_stack)
#if defined(CONFIG_PLATFORM_SPECIFIC_INIT)
GTEXT(_PlatformInit)
#endif
@@ -61,12 +63,46 @@ SECTION_SUBSEC_FUNC(TEXT,_reset_section,__start)
#endif
/* lock interrupts: will get unlocked when switch to main task */
bl lock_interrupts
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
cpsid i
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
movs.n r0, #_EXC_IRQ_DEFAULT_PRIO
msr BASEPRI, r0
#else
#error Unknown ARM architecture
#endif
#ifdef CONFIG_WDOG_INIT
/* board-specific watchdog initialization is necessary */
bl _WdogInit
#endif
#ifdef CONFIG_INIT_STACKS
ldr r0, =_interrupt_stack
ldr r1, =0xaa
ldr r2, =CONFIG_ISR_STACK_SIZE
bl memset
#endif
/*
* Set PSP and use it to boot without using MSP, so that it
* gets set to _interrupt_stack during initialization.
*/
ldr r0, =_interrupt_stack
ldr r1, =CONFIG_ISR_STACK_SIZE
adds r0, r0, r1
msr PSP, r0
mrs r0, CONTROL
movs r1, #2
orrs r0, r1 /* CONTROL_SPSEL_Msk */
msr CONTROL, r0
/*
* When changing the stack pointer, software must use an ISB instruction
* immediately after the MSR instruction. This ensures that instructions
* after the ISB instruction execute using the new stack pointer.
*/
isb
/*
* 'bl' jumps the furthest of the branch instructions that are
* supported on all platforms. So it is used when jumping to _PrepC

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# '-mcmse' enables the generation of code for the Secure state of the ARMv8-M
# Security Extensions. This option is required when building a Secure firmware.
zephyr_compile_options(-mcmse)

View File

@@ -20,7 +20,7 @@
_ASM_FILE_PROLOGUE
GTEXT(_CpuIdleInit)
GTEXT(z_CpuIdleInit)
#ifdef CONFIG_SYS_POWER_MANAGEMENT
GTEXT(_NanoIdleValGet)
GTEXT(_NanoIdleValClear)
@@ -46,10 +46,10 @@ GTEXT(k_cpu_atomic_idle)
*
* C function prototype:
*
* void _CpuIdleInit (void);
* void z_CpuIdleInit (void);
*/
SECTION_FUNC(TEXT, _CpuIdleInit)
SECTION_FUNC(TEXT, z_CpuIdleInit)
ldr r1, =_SCB_SCR
movs.n r2, #_SCR_INIT_BITS
str r2, [r1]
@@ -179,14 +179,14 @@ SECTION_FUNC(TEXT, k_cpu_atomic_idle)
cpsid i
/*
* No need to set SEVONPEND, it's set once in _CpuIdleInit() and never
* No need to set SEVONPEND, it's set once in z_CpuIdleInit() and never
* touched again.
*/
/* r0: interrupt mask from caller */
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
/* No BASEPRI, call wfe directly (SEVONPEND set in _CpuIdleInit()) */
/* No BASEPRI, call wfe directly (SEVONPEND set in z_CpuIdleInit()) */
wfe
cmp r0, #0

View File

@@ -92,7 +92,7 @@ void z_NanoFatalErrorHandler(unsigned int reason,
z_SysFatalErrorHandler(reason, pEsf);
}
void _do_kernel_oops(const NANO_ESF *esf)
void z_do_kernel_oops(const NANO_ESF *esf)
{
z_NanoFatalErrorHandler(esf->r0, esf);
}
@@ -106,6 +106,6 @@ FUNC_NORETURN void z_arch_syscall_oops(void *ssf_ptr)
oops_esf.pc = ssf_contents[3];
_do_kernel_oops(&oops_esf);
z_do_kernel_oops(&oops_esf);
CODE_UNREACHABLE;
}

View File

@@ -55,24 +55,24 @@
/* bit[0]: Exception Secure. The security domain the exception was taken to. */
#define EXC_RETURN_EXCEPTION_SECURE_Pos 0
#define EXC_RETURN_EXCEPTION_SECURE_Msk \
(1 << EXC_RETURN_EXCEPTION_SECURE_Pos)
BIT(EXC_RETURN_EXCEPTION_SECURE_Pos)
#define EXC_RETURN_EXCEPTION_SECURE_Non_Secure 0
#define EXC_RETURN_EXCEPTION_SECURE_Secure EXC_RETURN_EXCEPTION_SECURE_Msk
/* bit[2]: Stack Pointer selection. */
#define EXC_RETURN_SPSEL_Pos 2
#define EXC_RETURN_SPSEL_Msk (1 << EXC_RETURN_SPSEL_Pos)
#define EXC_RETURN_SPSEL_Msk BIT(EXC_RETURN_SPSEL_Pos)
#define EXC_RETURN_SPSEL_MAIN 0
#define EXC_RETURN_SPSEL_PROCESS EXC_RETURN_SPSEL_Msk
/* bit[3]: Mode. Indicates the Mode that was stacked from. */
#define EXC_RETURN_MODE_Pos 3
#define EXC_RETURN_MODE_Msk (1 << EXC_RETURN_MODE_Pos)
#define EXC_RETURN_MODE_Msk BIT(EXC_RETURN_MODE_Pos)
#define EXC_RETURN_MODE_HANDLER 0
#define EXC_RETURN_MODE_THREAD EXC_RETURN_MODE_Msk
/* bit[4]: Stack frame type. Indicates whether the stack frame is a standard
* integer only stack frame or an extended floating-point stack frame.
*/
#define EXC_RETURN_STACK_FRAME_TYPE_Pos 4
#define EXC_RETURN_STACK_FRAME_TYPE_Msk (1 << EXC_RETURN_STACK_FRAME_TYPE_Pos)
#define EXC_RETURN_STACK_FRAME_TYPE_Msk BIT(EXC_RETURN_STACK_FRAME_TYPE_Pos)
#define EXC_RETURN_STACK_FRAME_TYPE_EXTENDED 0
#define EXC_RETURN_STACK_FRAME_TYPE_STANDARD EXC_RETURN_STACK_FRAME_TYPE_Msk
/* bit[5]: Default callee register stacking. Indicates whether the default
@@ -80,14 +80,14 @@
* stack.
*/
#define EXC_RETURN_CALLEE_STACK_Pos 5
#define EXC_RETURN_CALLEE_STACK_Msk (1 << EXC_RETURN_CALLEE_STACK_Pos)
#define EXC_RETURN_CALLEE_STACK_Msk BIT(EXC_RETURN_CALLEE_STACK_Pos)
#define EXC_RETURN_CALLEE_STACK_SKIPPED 0
#define EXC_RETURN_CALLEE_STACK_DEFAULT EXC_RETURN_CALLEE_STACK_Msk
/* bit[6]: Secure or Non-secure stack. Indicates whether a Secure or
* Non-secure stack is used to restore stack frame on exception return.
*/
#define EXC_RETURN_RETURN_STACK_Pos 6
#define EXC_RETURN_RETURN_STACK_Msk (1 << EXC_RETURN_RETURN_STACK_Pos)
#define EXC_RETURN_RETURN_STACK_Msk BIT(EXC_RETURN_RETURN_STACK_Pos)
#define EXC_RETURN_RETURN_STACK_Non_Secure 0
#define EXC_RETURN_RETURN_STACK_Secure EXC_RETURN_RETURN_STACK_Msk
@@ -137,7 +137,7 @@
*/
#if (CONFIG_FAULT_DUMP == 1)
static void _FaultShow(const NANO_ESF *esf, int fault)
static void FaultShow(const NANO_ESF *esf, int fault)
{
PR_EXC("Fault! EXC #%d\n", fault);
@@ -156,7 +156,7 @@ static void _FaultShow(const NANO_ESF *esf, int fault)
*
* For Dump level 0, no information needs to be generated.
*/
static void _FaultShow(const NANO_ESF *esf, int fault)
static void FaultShow(const NANO_ESF *esf, int fault)
{
(void)esf;
(void)fault;
@@ -176,7 +176,7 @@ static const struct z_exc_handle exceptions[] = {
*
* @return 1 if error is recoverable, otherwise return 0.
*/
static int _MemoryFaultIsRecoverable(NANO_ESF *esf)
static int MemoryFaultIsRecoverable(NANO_ESF *esf)
{
#ifdef CONFIG_USERSPACE
for (int i = 0; i < ARRAY_SIZE(exceptions); i++) {
@@ -211,7 +211,7 @@ u32_t z_check_thread_stack_fail(const u32_t fault_addr,
*
* @return error code to identify the fatal error reason
*/
static u32_t _MpuFault(NANO_ESF *esf, int fromHardFault)
static u32_t MpuFault(NANO_ESF *esf, int fromHardFault)
{
u32_t reason = _NANO_ERR_HW_EXCEPTION;
u32_t mmfar = -EINVAL;
@@ -321,7 +321,7 @@ static u32_t _MpuFault(NANO_ESF *esf, int fromHardFault)
SCB->CFSR |= SCB_CFSR_MEMFAULTSR_Msk;
/* Assess whether system shall ignore/recover from this MPU fault. */
if (_MemoryFaultIsRecoverable(esf)) {
if (MemoryFaultIsRecoverable(esf)) {
reason = _NANO_ERR_RECOVERABLE;
}
@@ -336,7 +336,7 @@ static u32_t _MpuFault(NANO_ESF *esf, int fromHardFault)
*
* @return N/A
*/
static int _BusFault(NANO_ESF *esf, int fromHardFault)
static int BusFault(NANO_ESF *esf, int fromHardFault)
{
u32_t reason = _NANO_ERR_HW_EXCEPTION;
@@ -389,7 +389,7 @@ static int _BusFault(NANO_ESF *esf, int fromHardFault)
if (sperr) {
for (i = 0; i < SYSMPU_EAR_COUNT; i++, mask >>= 1) {
if ((sperr & mask) == 0) {
if ((sperr & mask) == 0U) {
continue;
}
STORE_xFAR(edr, SYSMPU->SP[i].EDR);
@@ -477,7 +477,7 @@ static int _BusFault(NANO_ESF *esf, int fromHardFault)
/* clear BFSR sticky bits */
SCB->CFSR |= SCB_CFSR_BUSFAULTSR_Msk;
if (_MemoryFaultIsRecoverable(esf)) {
if (MemoryFaultIsRecoverable(esf)) {
reason = _NANO_ERR_RECOVERABLE;
}
@@ -492,7 +492,7 @@ static int _BusFault(NANO_ESF *esf, int fromHardFault)
*
* @return error code to identify the fatal error reason
*/
static u32_t _UsageFault(const NANO_ESF *esf)
static u32_t UsageFault(const NANO_ESF *esf)
{
u32_t reason = _NANO_ERR_HW_EXCEPTION;
@@ -548,7 +548,7 @@ static u32_t _UsageFault(const NANO_ESF *esf)
*
* @return N/A
*/
static void _SecureFault(const NANO_ESF *esf)
static void SecureFault(const NANO_ESF *esf)
{
PR_FAULT_INFO("***** SECURE FAULT *****\n");
@@ -587,7 +587,7 @@ static void _SecureFault(const NANO_ESF *esf)
*
* @return N/A
*/
static void _DebugMonitor(const NANO_ESF *esf)
static void DebugMonitor(const NANO_ESF *esf)
{
ARG_UNUSED(esf);
@@ -607,14 +607,14 @@ static void _DebugMonitor(const NANO_ESF *esf)
*
* @return error code to identify the fatal error reason
*/
static u32_t _HardFault(NANO_ESF *esf)
static u32_t HardFault(NANO_ESF *esf)
{
u32_t reason = _NANO_ERR_HW_EXCEPTION;
PR_FAULT_INFO("***** HARD FAULT *****\n");
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
if (_MemoryFaultIsRecoverable(esf) != 0) {
if (MemoryFaultIsRecoverable(esf) != 0) {
reason = _NANO_ERR_RECOVERABLE;
}
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
@@ -623,14 +623,14 @@ static u32_t _HardFault(NANO_ESF *esf)
} else if ((SCB->HFSR & SCB_HFSR_FORCED_Msk) != 0) {
PR_EXC(" Fault escalation (see below)\n");
if (SCB_MMFSR != 0) {
reason = _MpuFault(esf, 1);
reason = MpuFault(esf, 1);
} else if (SCB_BFSR != 0) {
reason = _BusFault(esf, 1);
reason = BusFault(esf, 1);
} else if (SCB_UFSR != 0) {
reason = _UsageFault(esf);
reason = UsageFault(esf);
#if defined(CONFIG_ARM_SECURE_FIRMWARE)
} else if (SAU->SFSR != 0) {
_SecureFault(esf);
SecureFault(esf);
#endif /* CONFIG_ARM_SECURE_FIRMWARE */
}
}
@@ -649,7 +649,7 @@ static u32_t _HardFault(NANO_ESF *esf)
*
* @return N/A
*/
static void _ReservedException(const NANO_ESF *esf, int fault)
static void ReservedException(const NANO_ESF *esf, int fault)
{
ARG_UNUSED(esf);
@@ -659,45 +659,45 @@ static void _ReservedException(const NANO_ESF *esf, int fault)
}
/* Handler function for ARM fault conditions. */
static u32_t _FaultHandle(NANO_ESF *esf, int fault)
static u32_t FaultHandle(NANO_ESF *esf, int fault)
{
u32_t reason = _NANO_ERR_HW_EXCEPTION;
switch (fault) {
case 3:
reason = _HardFault(esf);
reason = HardFault(esf);
break;
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
/* HardFault is used for all fault conditions on ARMv6-M. */
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
case 4:
reason = _MpuFault(esf, 0);
reason = MpuFault(esf, 0);
break;
case 5:
reason = _BusFault(esf, 0);
reason = BusFault(esf, 0);
break;
case 6:
reason = _UsageFault(esf);
reason = UsageFault(esf);
break;
#if defined(CONFIG_ARM_SECURE_FIRMWARE)
case 7:
_SecureFault(esf);
SecureFault(esf);
break;
#endif /* CONFIG_ARM_SECURE_FIRMWARE */
case 12:
_DebugMonitor(esf);
DebugMonitor(esf);
break;
#else
#error Unknown ARM architecture
#endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
default:
_ReservedException(esf, fault);
ReservedException(esf, fault);
break;
}
if (reason != _NANO_ERR_RECOVERABLE) {
/* Dump generic information about the fault. */
_FaultShow(esf, fault);
FaultShow(esf, fault);
}
return reason;
@@ -711,7 +711,7 @@ static u32_t _FaultHandle(NANO_ESF *esf, int fault)
*
* @param secure_esf Pointer to the secure stack frame.
*/
static void _SecureStackDump(const NANO_ESF *secure_esf)
static void SecureStackDump(const NANO_ESF *secure_esf)
{
/*
* In case a Non-Secure exception interrupted the Secure
@@ -747,7 +747,7 @@ static void _SecureStackDump(const NANO_ESF *secure_esf)
PR_FAULT_INFO(" S instruction address: 0x%x\n", sec_ret_addr);
}
#define SECURE_STACK_DUMP(esf) _SecureStackDump(esf)
#define SECURE_STACK_DUMP(esf) SecureStackDump(esf)
#else
/* We do not dump the Secure stack information for lower dump levels. */
#define SECURE_STACK_DUMP(esf)
@@ -796,7 +796,7 @@ void _Fault(NANO_ESF *esf, u32_t exc_return)
/* Invalid EXC_RETURN value */
goto _exit_fatal;
}
if ((exc_return & EXC_RETURN_EXCEPTION_SECURE_Secure) == 0) {
if ((exc_return & EXC_RETURN_EXCEPTION_SECURE_Secure) == 0U) {
/* Secure Firmware shall only handle Secure Exceptions.
* This is a fatal error.
*/
@@ -859,7 +859,7 @@ void _Fault(NANO_ESF *esf, u32_t exc_return)
(void) exc_return;
#endif /* CONFIG_ARM_SECURE_FIRMWARE */
reason = _FaultHandle(esf, fault);
reason = FaultHandle(esf, fault);
if (reason == _NANO_ERR_RECOVERABLE) {
return;
@@ -880,7 +880,7 @@ _exit_fatal:
*
* @return N/A
*/
void _FaultInit(void)
void z_FaultInit(void)
{
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)

View File

@@ -33,7 +33,7 @@
* @return N/A
*/
void _IntLibInit(void)
void z_IntLibInit(void)
{
int irq = 0;

View File

@@ -67,7 +67,7 @@ void z_arch_irq_disable(unsigned int irq)
*/
int z_arch_irq_is_enabled(unsigned int irq)
{
return NVIC->ISER[REG_FROM_IRQ(irq)] & (1 << BIT_FROM_IRQ(irq));
return NVIC->ISER[REG_FROM_IRQ(irq)] & BIT(BIT_FROM_IRQ(irq));
}
/**
@@ -108,10 +108,10 @@ void z_irq_priority_set(unsigned int irq, unsigned int prio, u32_t flags)
* affecting performance (can still be useful on systems with a
* reduced set of priorities, like Cortex-M0/M0+).
*/
__ASSERT(prio <= ((1 << DT_NUM_IRQ_PRIO_BITS) - 1),
"invalid priority %d! values must be less than %d\n",
__ASSERT(prio <= (BIT(DT_NUM_IRQ_PRIO_BITS) - 1),
"invalid priority %d! values must be less than %lu\n",
prio - _IRQ_PRIO_OFFSET,
(1 << DT_NUM_IRQ_PRIO_BITS) - (_IRQ_PRIO_OFFSET));
BIT(DT_NUM_IRQ_PRIO_BITS) - (_IRQ_PRIO_OFFSET));
NVIC_SetPriority((IRQn_Type)irq, prio);
}

View File

@@ -15,7 +15,7 @@ volatile irq_offload_routine_t offload_routine;
static void *offload_param;
/* Called by __svc */
void _irq_do_offload(void)
void z_irq_do_offload(void)
{
offload_routine(offload_param);
}
@@ -29,7 +29,7 @@ void irq_offload(irq_offload_routine_t routine, void *parameter)
unsigned int key;
__asm__ volatile("mrs %0, PRIMASK;" : "=r" (key) : : "memory");
__ASSERT(key == 0, "irq_offload called with interrupts locked\n");
__ASSERT(key == 0U, "irq_offload called with interrupts locked\n");
#endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE && CONFIG_ASSERT */
k_sched_lock();

View File

@@ -47,10 +47,6 @@ extern const int _k_neg_eagain;
*/
int __swap(int key)
{
#ifdef CONFIG_USERSPACE
/* Save off current privilege mode */
_current->arch.mode = __get_CONTROL() & CONTROL_nPRIV_Msk;
#endif
#ifdef CONFIG_EXECUTION_BENCHMARKING
read_timer_start_of_swap();
#endif
@@ -65,5 +61,8 @@ int __swap(int key)
/* clear mask or enable all irqs to take a pendsv */
irq_unlock(0);
/* Context switch is performed here. Returning implies the
* thread has been context-switched-in again.
*/
return _current->arch.swap_return_value;
}

View File

@@ -22,8 +22,8 @@ _ASM_FILE_PROLOGUE
GTEXT(__svc)
GTEXT(__pendsv)
GTEXT(_do_kernel_oops)
GTEXT(_arm_do_syscall)
GTEXT(z_do_kernel_oops)
GTEXT(z_arm_do_syscall)
GDATA(_k_neg_eagain)
GDATA(_kernel)
@@ -61,6 +61,7 @@ SECTION_FUNC(TEXT, __pendsv)
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
movs.n r0, #_EXC_IRQ_DEFAULT_PRIO
msr BASEPRI, r0
isb /* Make the effect of disabling interrupts be realized immediately */
#else
#error Unknown ARM architecture
#endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
@@ -302,7 +303,7 @@ _stack_frame_endif:
#if CONFIG_IRQ_OFFLOAD
push {r0, lr}
bl _irq_do_offload /* call C routine which executes the offload */
bl z_irq_do_offload /* call C routine which executes the offload */
pop {r0, r1}
mov lr, r1
#endif /* CONFIG_IRQ_OFFLOAD */
@@ -312,7 +313,7 @@ _stack_frame_endif:
_oops:
push {r0, lr}
bl _do_kernel_oops
bl z_do_kernel_oops
pop {r0, pc}
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
@@ -368,7 +369,7 @@ SECTION_FUNC(TEXT, __svc)
#if CONFIG_IRQ_OFFLOAD
push {r0, lr}
bl _irq_do_offload /* call C routine which executes the offload */
bl z_irq_do_offload /* call C routine which executes the offload */
pop {r0, lr}
/* exception return is done in _IntExit() */
@@ -377,12 +378,12 @@ SECTION_FUNC(TEXT, __svc)
_oops:
push {r0, lr}
bl _do_kernel_oops
bl z_do_kernel_oops
pop {r0, pc}
#if CONFIG_USERSPACE
/*
* System call will setup a jump to the _do_arm_syscall function
* System call will setup a jump to the z_arm_do_syscall() function
* when the SVC returns via the bx lr.
*
* There is some trickery involved here because we have to preserve
@@ -404,19 +405,32 @@ _oops:
*/
_do_syscall:
ldr r8, [r0, #24] /* grab address of PC from stack frame */
ldr r1, =_arm_do_syscall
str r1, [r0, #24] /* overwrite the PC to point to _arm_do_syscall */
ldr r1, =z_arm_do_syscall
str r1, [r0, #24] /* overwrite the PC to point to z_arm_do_syscall */
/* validate syscall limit, only set priv mode if valid */
/* validate syscall limit */
ldr ip, =K_SYSCALL_LIMIT
cmp r6, ip
blt valid_syscall_id
/* The supplied syscall_id must be lower than the limit
* (Requires unsigned integer comparison)
*/
blo valid_syscall_id
/* bad syscall id. Set arg0 to bad id and set call_id to SYSCALL_BAD */
/* bad syscall id. Set arg1 to bad id and set call_id to SYSCALL_BAD */
str r6, [r0, #0]
ldr r6, =K_SYSCALL_BAD
/* Bad syscalls treated as valid syscalls with ID K_SYSCALL_BAD. */
valid_syscall_id:
push {r0, r1}
ldr r0, =_kernel
ldr r0, [r0, #_kernel_offset_to_current]
ldr r1, [r0, #_thread_offset_to_mode]
bic r1, #1
/* Store (privileged) mode in thread's mode state variable */
str r1, [r0, #_thread_offset_to_mode]
dsb
/* set mode to privileged, r2 still contains value from CONTROL */
bic r2, #1
msr CONTROL, r2
@@ -426,8 +440,9 @@ valid_syscall_id:
* instructions with the previous privilege.
*/
isb
pop {r0, r1}
/* return from SVC to the modified LR - _arm_do_syscall */
/* return from SVC to the modified LR - z_arm_do_syscall */
bx lr
#endif

View File

@@ -17,7 +17,7 @@
#include <wait_q.h>
#ifdef CONFIG_USERSPACE
extern u8_t *_k_priv_stack_find(void *obj);
extern u8_t *z_priv_stack_find(void *obj);
#endif
/**
@@ -55,10 +55,10 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
void *parameter1, void *parameter2, void *parameter3,
int priority, unsigned int options)
{
char *pStackMem = K_THREAD_STACK_BUFFER(stack);
char *pStackMem = Z_THREAD_STACK_BUFFER(stack);
char *stackEnd;
/* Offset between the top of stack and the high end of stack area. */
u32_t top_of_stack_offset = 0;
u32_t top_of_stack_offset = 0U;
Z_ASSERT_VALID_PRIO(priority, pEntry);
@@ -91,13 +91,13 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
* k_thread_create(). If K_THREAD_STACK_SIZEOF() is used, the
* Guard size has already been take out of stackSize.
*/
stackEnd = pStackMem + stackSize - MPU_GUARD_ALIGN_AND_SIZE;
#else
stackEnd = pStackMem + stackSize;
stackSize -= MPU_GUARD_ALIGN_AND_SIZE;
#endif
stackEnd = pStackMem + stackSize;
struct __esf *pInitCtx;
_new_thread_init(thread, pStackMem, stackSize, priority,
z_new_thread_init(thread, pStackMem, stackSize, priority,
options);
/* carve the thread entry struct from the "base" of the stack */
@@ -123,6 +123,9 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
pInitCtx->a4 = (u32_t)parameter3;
pInitCtx->xpsr =
0x01000000UL; /* clear all, thumb bit is 1, even if RO */
#ifdef CONFIG_FLOAT
pInitCtx->fpscr = (u32_t)0; /* clears FPU status/control register*/
#endif
thread->callee_saved.psp = (u32_t)pInitCtx;
thread->arch.basepri = 0;
@@ -148,9 +151,9 @@ FUNC_NORETURN void z_arch_user_mode_enter(k_thread_entry_t user_entry,
/* Set up privileged stack before entering user mode */
_current->arch.priv_stack_start =
(u32_t)_k_priv_stack_find(_current->stack_obj);
(u32_t)z_priv_stack_find(_current->stack_obj);
_arm_userspace_enter(user_entry, p1, p2, p3,
z_arm_userspace_enter(user_entry, p1, p2, p3,
(u32_t)_current->stack_info.start,
_current->stack_info.size);
CODE_UNREACHABLE;
@@ -279,11 +282,11 @@ u32_t z_check_thread_stack_fail(const u32_t fault_addr, const u32_t psp)
}
}
#else /* CONFIG_USERSPACE */
if (IS_MPU_GUARD_VIOLATION(thread->stack_info.start,
if (IS_MPU_GUARD_VIOLATION(thread->stack_info.start -
MPU_GUARD_ALIGN_AND_SIZE,
fault_addr, psp)) {
/* Thread stack corruption */
return thread->stack_info.start +
MPU_GUARD_ALIGN_AND_SIZE;
return thread->stack_info.start;
}
#endif /* CONFIG_USERSPACE */

View File

@@ -16,8 +16,8 @@
_ASM_FILE_PROLOGUE
GTEXT(_arm_userspace_enter)
GTEXT(_arm_do_syscall)
GTEXT(z_arm_userspace_enter)
GTEXT(z_arm_do_syscall)
GTEXT(z_arch_user_string_nlen)
GTEXT(z_arch_user_string_nlen_fault_start)
GTEXT(z_arch_user_string_nlen_fault_end)
@@ -36,7 +36,7 @@ GDATA(_k_syscall_table)
* not transition back later, unless they are doing system calls.
*
*/
SECTION_FUNC(TEXT,_arm_userspace_enter)
SECTION_FUNC(TEXT,z_arm_userspace_enter)
/* move user_entry to lr */
mov lr, r0
@@ -77,7 +77,7 @@ SECTION_FUNC(TEXT,_arm_userspace_enter)
*
* Note that the risk for overflow is higher if using the normal thread
* stack, since we do not control how much stack is actually left, when
* user invokes _arm_userspace_enter().
* user invokes z_arm_userspace_enter().
*/
push {r0,r1,r2,r3,ip,lr}
ldr r0, =_kernel
@@ -142,8 +142,16 @@ SECTION_FUNC(TEXT,_arm_userspace_enter)
#endif /* CONFIG_EXECUTION_BENCHMARKING */
/* change processor mode to unprivileged */
push {r0, r1}
ldr r0, =_kernel
ldr r0, [r0, #_kernel_offset_to_current]
ldr r1, [r0, #_thread_offset_to_mode]
orrs r1, r1, #1
mrs ip, CONTROL
orrs ip, ip, #1
/* Store (unprivileged) mode in thread's mode state variable */
str r1, [r0, #_thread_offset_to_mode]
dsb
msr CONTROL, ip
/* ISB is not strictly necessary here (stack pointer is not being
@@ -151,6 +159,7 @@ SECTION_FUNC(TEXT,_arm_userspace_enter)
* instructions with the previous privilege.
*/
isb
pop {r0, r1}
/* jump to z_thread_entry entry */
ldr ip, =z_thread_entry
@@ -168,7 +177,45 @@ SECTION_FUNC(TEXT,_arm_userspace_enter)
* 4) Restoring stack and calling back to the caller of the SVC
*
*/
SECTION_FUNC(TEXT, _arm_do_syscall)
SECTION_FUNC(TEXT, z_arm_do_syscall)
/* The function is executing in privileged mode. This implies that we
* shall not be allowed to use the thread's default unprivileged stack,
* (i.e push to or pop from it), to avoid a possible stack corruption.
*
* Rationale: since we execute in PRIV mode and no MPU guard or PSPLIM
* register is guarding the end of the default stack, we won't be able
* to detect any stack overflows.
*/
#if defined(CONFIG_BUILTIN_STACK_GUARD)
/* clear stack pointer limit before setting the PSP */
mov ip, #0
msr PSPLIM, ip
#endif
/* setup privileged stack */
ldr ip, =_kernel
ldr ip, [ip, #_kernel_offset_to_current]
ldr ip, [ip, #_thread_offset_to_priv_stack_start] /* priv stack ptr */
add ip, #CONFIG_PRIVILEGED_STACK_SIZE
/* Store current SP and LR at the beginning of the priv stack */
subs ip, #8
str sp, [ip, #0]
str lr, [ip, #4]
/* switch to privileged stack */
msr PSP, ip
#if defined(CONFIG_BUILTIN_STACK_GUARD)
/* Set stack pointer limit (needed in privileged mode) */
ldr ip, =_kernel
ldr ip, [ip, #_kernel_offset_to_current]
ldr ip, [ip, #_thread_offset_to_priv_stack_start] /* priv stack ptr */
msr PSPLIM, ip
#endif
/*
* r0-r5 contain arguments
* r6 contains call_id
@@ -179,45 +226,12 @@ SECTION_FUNC(TEXT, _arm_do_syscall)
bne valid_syscall
/* BAD SYSCALL path */
/* fixup stack frame on unprivileged stack, adding ssf */
/* fixup stack frame on the privileged stack, adding ssf */
mov ip, sp
push {r4,r5,ip,lr}
b dispatch_syscall
valid_syscall:
/* setup privileged stack */
push {r6}
ldr r6, =_kernel
ldr r6, [r6, #_kernel_offset_to_current]
ldr ip, [r6, #_thread_offset_to_priv_stack_start] /* priv stack ptr */
ldr r6, =CONFIG_PRIVILEGED_STACK_SIZE
add ip, r6
pop {r6}
subs ip, #8
str sp, [ip, #0]
str lr, [ip, #4]
#if defined(CONFIG_BUILTIN_STACK_GUARD)
/* clear stack pointer limit before setting the PSP */
push {r3}
mov r3, #0
msr PSPLIM, r3
pop {r3}
#endif
/* switch to privileged stack */
msr PSP, ip
#if defined(CONFIG_BUILTIN_STACK_GUARD)
/* Set stack pointer limit (needed in privileged mode) */
push {r6}
ldr r6, =_kernel
ldr r6, [r6, #_kernel_offset_to_current]
ldr r6, [r6, #_thread_offset_to_priv_stack_start] /* priv stack ptr */
msr PSPLIM, r6
pop {r6}
#endif
/* push args to complete stack frame */
push {r4,r5}
@@ -242,6 +256,14 @@ dispatch_syscall:
ldr ip, [sp,#8]
msr PSP, ip
push {r0, r1}
ldr r0, =_kernel
ldr r0, [r0, #_kernel_offset_to_current]
ldr r1, [r0, #_thread_offset_to_mode]
orrs r1, r1, #1
/* Store (unprivileged) mode in thread's mode state variable */
str r1, [r0, #_thread_offset_to_mode]
dsb
/* drop privileges by setting bit 0 in CONTROL */
mrs ip, CONTROL
orrs ip, ip, #1
@@ -252,6 +274,7 @@ dispatch_syscall:
* instructions with the previous privilege.
*/
isb
pop {r0, r1}
/* Zero out volatile (caller-saved) registers so as to not leak state from
* kernel mode. The C calling convention for the syscall handler will

View File

@@ -49,7 +49,7 @@ extern volatile irq_offload_routine_t offload_routine;
*
* @return 1 if in ISR, 0 if not.
*/
static ALWAYS_INLINE bool _IsInIsr(void)
static ALWAYS_INLINE bool z_IsInIsr(void)
{
u32_t vector = __get_IPSR();
@@ -63,7 +63,7 @@ static ALWAYS_INLINE bool _IsInIsr(void)
/* On ARMv6-M there is no nested execution bit, so we check
* exception 3, hard fault, to a detect a nested exception.
*/
|| (vector == 3)
|| (vector == 3U)
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)
/* If not in thread mode, and if RETTOBASE bit in ICSR is 0,
* then there are preempted active exceptions to execute.
@@ -93,7 +93,7 @@ static ALWAYS_INLINE bool _IsInIsr(void)
*
* @return N/A
*/
static ALWAYS_INLINE void _ExcSetup(void)
static ALWAYS_INLINE void z_ExcSetup(void)
{
NVIC_SetPriority(PendSV_IRQn, 0xff);
@@ -144,7 +144,7 @@ static ALWAYS_INLINE void _ExcSetup(void)
*
* @return N/A
*/
static ALWAYS_INLINE void _ClearFaults(void)
static ALWAYS_INLINE void z_clearfaults(void)
{
#if defined(CONFIG_ARMV6_M_ARMV8_M_BASELINE)
#elif defined(CONFIG_ARMV7_M_ARMV8_M_MAINLINE)

View File

@@ -37,14 +37,14 @@ extern K_THREAD_STACK_DEFINE(_interrupt_stack, CONFIG_ISR_STACK_SIZE);
*
* @return N/A
*/
static ALWAYS_INLINE void _InterruptStackSetup(void)
static ALWAYS_INLINE void z_InterruptStackSetup(void)
{
#if defined(CONFIG_MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT) && \
defined(CONFIG_USERSPACE)
u32_t msp = (u32_t)(K_THREAD_STACK_BUFFER(_interrupt_stack) +
u32_t msp = (u32_t)(Z_THREAD_STACK_BUFFER(_interrupt_stack) +
CONFIG_ISR_STACK_SIZE - MPU_GUARD_ALIGN_AND_SIZE);
#else
u32_t msp = (u32_t)(K_THREAD_STACK_BUFFER(_interrupt_stack) +
u32_t msp = (u32_t)(Z_THREAD_STACK_BUFFER(_interrupt_stack) +
CONFIG_ISR_STACK_SIZE);
#endif

View File

@@ -27,8 +27,8 @@ extern "C" {
#endif
#ifndef _ASMLANGUAGE
extern void _FaultInit(void);
extern void _CpuIdleInit(void);
extern void z_FaultInit(void);
extern void z_CpuIdleInit(void);
#ifdef CONFIG_ARM_MPU
extern void z_arch_configure_static_mpu_regions(void);
extern void z_arch_configure_dynamic_mpu_regions(struct k_thread *thread);
@@ -36,10 +36,10 @@ extern void z_arch_configure_dynamic_mpu_regions(struct k_thread *thread);
static ALWAYS_INLINE void kernel_arch_init(void)
{
_InterruptStackSetup();
_ExcSetup();
_FaultInit();
_CpuIdleInit();
z_InterruptStackSetup();
z_ExcSetup();
z_FaultInit();
z_CpuIdleInit();
}
static ALWAYS_INLINE void
@@ -63,13 +63,13 @@ z_arch_switch_to_main_thread(struct k_thread *main_thread,
#if defined(CONFIG_MPU_REQUIRES_POWER_OF_TWO_ALIGNMENT) && \
defined(CONFIG_USERSPACE)
start_of_main_stack =
K_THREAD_STACK_BUFFER(main_stack) + main_stack_size -
Z_THREAD_STACK_BUFFER(main_stack) + main_stack_size -
MPU_GUARD_ALIGN_AND_SIZE;
#else
start_of_main_stack =
K_THREAD_STACK_BUFFER(main_stack) + main_stack_size;
Z_THREAD_STACK_BUFFER(main_stack) + main_stack_size;
#endif
start_of_main_stack = (void *)STACK_ROUND_DOWN(start_of_main_stack);
start_of_main_stack = (char *)STACK_ROUND_DOWN(start_of_main_stack);
#ifdef CONFIG_TRACING
z_sys_trace_thread_switched_out();
@@ -134,9 +134,9 @@ z_set_thread_return_value(struct k_thread *thread, unsigned int value)
extern void k_cpu_atomic_idle(unsigned int key);
#define z_is_in_isr() _IsInIsr()
#define z_is_in_isr() z_IsInIsr()
extern FUNC_NORETURN void _arm_userspace_enter(k_thread_entry_t user_entry,
extern FUNC_NORETURN void z_arm_userspace_enter(k_thread_entry_t user_entry,
void *p1, void *p2, void *p3,
u32_t stack_end,
u32_t stack_start);

View File

@@ -25,7 +25,7 @@ extern "C" {
*
* @return The key of the interrupt that is currently being processed.
*/
int _sys_current_irq_key_get(void)
int z_sys_current_irq_key_get(void)
{
return __get_IPSR();
}

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
# Put functions and data in their own binary sections so that ld can
# garbage collect them
zephyr_cc_option(-ffunction-sections -fdata-sections)

View File

@@ -223,7 +223,6 @@ def main():
intlist = read_intlist(args.intlist)
nvec = intlist["num_vectors"]
offset = intlist["offset"]
prefix = endian_prefix()
spurious_handler = "&z_irq_spurious"
sw_irq_handler = "ISR_WRAPPER"
@@ -250,8 +249,8 @@ def main():
swt = None
for irq, flags, func, param in intlist["interrupts"]:
if (flags & ISR_FLAG_DIRECT):
if (param != 0):
if flags & ISR_FLAG_DIRECT:
if param != 0:
error("Direct irq %d declared, but has non-NULL parameter"
% irq)
vt[irq - offset] = func
@@ -307,4 +306,3 @@ def main():
if __name__ == "__main__":
main()

View File

@@ -18,6 +18,7 @@ u64_t __end_drop_to_usermode_time;
/* location of the time stamps*/
u32_t __read_swap_end_time_value;
u64_t __common_var_swap_end_time;
u64_t __temp_start_swap_time;
#if CONFIG_ARM
#include <arch/arm/cortex_m/cmsis.h>
@@ -80,7 +81,7 @@ u64_t __common_var_swap_end_time;
void read_timer_start_of_swap(void)
{
if (__read_swap_end_time_value == 1) {
if (__read_swap_end_time_value == 1U) {
TIMING_INFO_PRE_READ();
__start_swap_time = (u32_t) TIMING_INFO_OS_GET_TIME();
}
@@ -88,7 +89,7 @@ void read_timer_start_of_swap(void)
void read_timer_end_of_swap(void)
{
if (__read_swap_end_time_value == 1) {
if (__read_swap_end_time_value == 1U) {
TIMING_INFO_PRE_READ();
__read_swap_end_time_value = 2U;
__common_var_swap_end_time = (u64_t)TIMING_INFO_OS_GET_TIME();

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
if(CONFIG_GP_NONE)
set(gpopt none)
elseif(CONFIG_GP_LOCAL)

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_sources(
thread.c
cpu_idle.c

View File

@@ -15,23 +15,23 @@
* text to memory, such as a boot copier or runtime synthesis of code. If the
* new text was written with instructions that do not bypass cache memories,
* this should immediately be followed by an invocation of
* _nios2_dcache_flush_all() so that cached instruction data is committed to
* z_nios2_dcache_flush_all() so that cached instruction data is committed to
* RAM.
*
* See Chapter 9 of the Nios II Gen 2 Software Developer's Handbook for more
* information on cache considerations.
*/
#if ALT_CPU_ICACHE_SIZE > 0
void _nios2_icache_flush_all(void)
void z_nios2_icache_flush_all(void)
{
u32_t i;
for (i = 0U; i < ALT_CPU_ICACHE_SIZE; i += ALT_CPU_ICACHE_LINE_SIZE) {
_nios2_icache_flush(i);
z_nios2_icache_flush(i);
}
/* Get rid of any stale instructions in the pipeline */
_nios2_pipeline_flush();
z_nios2_pipeline_flush();
}
#endif
@@ -51,26 +51,26 @@ void _nios2_icache_flush_all(void)
* information on cache considerations.
*/
#if ALT_CPU_DCACHE_SIZE > 0
void _nios2_dcache_flush_all(void)
void z_nios2_dcache_flush_all(void)
{
u32_t i;
for (i = 0U; i < ALT_CPU_DCACHE_SIZE; i += ALT_CPU_DCACHE_LINE_SIZE) {
_nios2_dcache_flush(i);
z_nios2_dcache_flush(i);
}
}
#endif
/*
* _nios2_dcache_flush_no_writeback() is called to flush the data cache for a
* z_nios2_dcache_flush_no_writeback() is called to flush the data cache for a
* memory region of length "len" bytes, starting at address "start".
*
* Any dirty lines in the data cache are NOT written back to memory.
* Make sure you really want this behavior. If you aren't 100% sure,
* use the _nios2_dcache_flush() routine instead.
* use the z_nios2_dcache_flush() routine instead.
*/
#if ALT_CPU_DCACHE_SIZE > 0
void _nios2_dcache_flush_no_writeback(void *start, u32_t len)
void z_nios2_dcache_flush_no_writeback(void *start, u32_t len)
{
u8_t *i;
u8_t *end = ((char *) start) + len;

View File

@@ -15,7 +15,7 @@ GTEXT(_exception)
GTEXT(_Fault)
GTEXT(__swap)
#ifdef CONFIG_IRQ_OFFLOAD
GTEXT(_irq_do_offload)
GTEXT(z_irq_do_offload)
GTEXT(_offload_routine)
#endif

View File

@@ -174,10 +174,10 @@ FUNC_NORETURN void _Fault(const NANO_ESF *esf)
u32_t exc_reg, badaddr_reg, eccftl;
enum nios2_exception_cause cause;
exc_reg = _nios2_creg_read(NIOS2_CR_EXCEPTION);
exc_reg = z_nios2_creg_read(NIOS2_CR_EXCEPTION);
/* Bit 31 indicates potentially fatal ECC error */
eccftl = (exc_reg & NIOS2_EXCEPTION_REG_ECCFTL_MASK) != 0;
eccftl = (exc_reg & NIOS2_EXCEPTION_REG_ECCFTL_MASK) != 0U;
/* Bits 2-6 contain the cause code */
cause = (exc_reg & NIOS2_EXCEPTION_REG_CAUSE_MASK)
@@ -188,7 +188,7 @@ FUNC_NORETURN void _Fault(const NANO_ESF *esf)
printk("reason: %s\n", cause_str(cause));
#endif
if (BIT(cause) & NIOS2_BADADDR_CAUSE_MASK) {
badaddr_reg = _nios2_creg_read(NIOS2_CR_BADADDR);
badaddr_reg = z_nios2_creg_read(NIOS2_CR_BADADDR);
printk("Badaddr: 0x%x\n", badaddr_reg);
}
#endif /* ALT_CPU_HAS_EXTRA_EXCEPTION_INFO */
@@ -246,7 +246,7 @@ hang_system:
#endif
#ifdef ALT_CPU_HAS_DEBUG_STUB
_nios2_break();
z_nios2_break();
#endif
for (;;) {
k_cpu_idle();

View File

@@ -25,7 +25,7 @@ void z_irq_spurious(void *unused)
{
ARG_UNUSED(unused);
printk("Spurious interrupt detected! ipending: %x\n",
_nios2_creg_read(NIOS2_CR_IPENDING));
z_nios2_creg_read(NIOS2_CR_IPENDING));
z_NanoFatalErrorHandler(_NANO_ERR_SPURIOUS_INT, &_default_esf);
}
@@ -37,9 +37,9 @@ void z_arch_irq_enable(unsigned int irq)
key = irq_lock();
ienable = _nios2_creg_read(NIOS2_CR_IENABLE);
ienable |= (1 << irq);
_nios2_creg_write(NIOS2_CR_IENABLE, ienable);
ienable = z_nios2_creg_read(NIOS2_CR_IENABLE);
ienable |= BIT(irq);
z_nios2_creg_write(NIOS2_CR_IENABLE, ienable);
irq_unlock(key);
};
@@ -53,9 +53,9 @@ void z_arch_irq_disable(unsigned int irq)
key = irq_lock();
ienable = _nios2_creg_read(NIOS2_CR_IENABLE);
ienable &= ~(1 << irq);
_nios2_creg_write(NIOS2_CR_IENABLE, ienable);
ienable = z_nios2_creg_read(NIOS2_CR_IENABLE);
ienable &= ~BIT(irq);
z_nios2_creg_write(NIOS2_CR_IENABLE, ienable);
irq_unlock(key);
};
@@ -80,7 +80,7 @@ void _enter_irq(u32_t ipending)
_kernel.nested++;
#ifdef CONFIG_IRQ_OFFLOAD
_irq_do_offload();
z_irq_do_offload();
#endif
while (ipending) {
@@ -89,7 +89,7 @@ void _enter_irq(u32_t ipending)
z_sys_trace_isr_enter();
index = find_lsb_set(ipending) - 1;
ipending &= ~(1 << index);
ipending &= ~BIT(index);
ite = &_sw_isr_table[index];

View File

@@ -15,7 +15,7 @@ static volatile void *offload_param;
* Just in case the offload routine itself generates an unhandled
* exception, clear the offload_routine global before executing.
*/
void _irq_do_offload(void)
void z_irq_do_offload(void)
{
irq_offload_routine_t tmp;

View File

@@ -39,13 +39,13 @@ void _PrepC(void)
/* In most XIP scenarios we copy the exception code into RAM, so need
* to flush instruction cache.
*/
_nios2_icache_flush_all();
z_nios2_icache_flush_all();
#if ALT_CPU_ICACHE_SIZE > 0
/* Only need to flush the data cache here if there actually is an
* instruction cache, so that the cached instruction data written is
* actually committed.
*/
_nios2_dcache_flush_all();
z_nios2_dcache_flush_all();
#endif
#endif
z_cstart();

View File

@@ -10,7 +10,7 @@
/* exports */
GTEXT(__swap)
GTEXT(_thread_entry_wrapper)
GTEXT(z_thread_entry_wrapper)
/* imports */
GTEXT(z_sys_trace_thread_switched_in)
@@ -171,9 +171,9 @@ no_unlock:
ret
/* void _thread_entry_wrapper(void)
/* void z_thread_entry_wrapper(void)
*/
SECTION_FUNC(TEXT, _thread_entry_wrapper)
SECTION_FUNC(TEXT, z_thread_entry_wrapper)
/* This all corresponds to struct init_stack_frame defined in
* thread.c. We need to take this stuff off the stack and put
* it in the apporpriate registers

View File

@@ -14,12 +14,12 @@
* to z_thread_entry() since this arch puts the first four arguments
* in r4-r7 and not on the stack
*/
void _thread_entry_wrapper(k_thread_entry_t, void *, void *, void *);
void z_thread_entry_wrapper(k_thread_entry_t, void *, void *, void *);
struct init_stack_frame {
/* top of the stack / most recently pushed */
/* Used by _thread_entry_wrapper. pulls these off the stack and
/* Used by z_thread_entry_wrapper. pulls these off the stack and
* into argument registers before calling z_thread_entry()
*/
k_thread_entry_t entry_point;
@@ -36,12 +36,12 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
void *arg1, void *arg2, void *arg3,
int priority, unsigned int options)
{
char *stack_memory = K_THREAD_STACK_BUFFER(stack);
char *stack_memory = Z_THREAD_STACK_BUFFER(stack);
Z_ASSERT_VALID_PRIO(priority, thread_func);
struct init_stack_frame *iframe;
_new_thread_init(thread, stack_memory, stack_size, priority, options);
z_new_thread_init(thread, stack_memory, stack_size, priority, options);
/* Initial stack frame data, stored at the base of the stack */
iframe = (struct init_stack_frame *)
@@ -54,7 +54,7 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
iframe->arg3 = arg3;
thread->callee_saved.sp = (u32_t)iframe;
thread->callee_saved.ra = (u32_t)_thread_entry_wrapper;
thread->callee_saved.ra = (u32_t)z_thread_entry_wrapper;
thread->callee_saved.key = NIOS2_STATUS_PIE_MSK;
/* Leave the rest of thread->callee_saved junk */
}

View File

@@ -32,7 +32,7 @@ void k_cpu_atomic_idle(unsigned int key);
static ALWAYS_INLINE void kernel_arch_init(void)
{
_kernel.irq_stack =
K_THREAD_STACK_BUFFER(_interrupt_stack) + CONFIG_ISR_STACK_SIZE;
Z_THREAD_STACK_BUFFER(_interrupt_stack) + CONFIG_ISR_STACK_SIZE;
}
static ALWAYS_INLINE void
@@ -44,21 +44,21 @@ z_set_thread_return_value(struct k_thread *thread, unsigned int value)
#define z_is_in_isr() (_kernel.nested != 0U)
#ifdef CONFIG_IRQ_OFFLOAD
void _irq_do_offload(void);
void z_irq_do_offload(void);
#endif
#if ALT_CPU_ICACHE_SIZE > 0
void _nios2_icache_flush_all(void);
void z_nios2_icache_flush_all(void);
#else
#define _nios2_icache_flush_all() do { } while (0)
#define z_nios2_icache_flush_all() do { } while (0)
#endif
#if ALT_CPU_DCACHE_SIZE > 0
void _nios2_dcache_flush_all(void);
void _nios2_dcache_flush_no_writeback(void *start, u32_t len);
void z_nios2_dcache_flush_all(void);
void z_nios2_dcache_flush_no_writeback(void *start, u32_t len);
#else
#define _nios2_dcache_flush_all() do { } while (0)
#define _nios2_dcache_flush_no_writeback(x, y) do { } while (0)
#define z_nios2_dcache_flush_all() do { } while (0)
#define z_nios2_dcache_flush_no_writeback(x, y) do { } while (0)
#endif
#endif /* _ASMLANGUAGE */

View File

@@ -26,11 +26,11 @@ extern "C" {
*
* @return The key of the interrupt that is currently being processed.
*/
static inline int _sys_current_irq_key_get(void)
static inline int z_sys_current_irq_key_get(void)
{
u32_t ipending;
ipending = _nios2_creg_read(NIOS2_CR_IPENDING);
ipending = z_nios2_creg_read(NIOS2_CR_IPENDING);
return find_lsb_set(ipending) - 1;
}

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_compile_options(
-fno-freestanding
-m32
@@ -12,6 +14,7 @@ zephyr_include_directories(${BOARD_DIR})
zephyr_compile_options_ifdef(CONFIG_COVERAGE
-fprofile-arcs
-ftest-coverage
-fno-inline
)
zephyr_link_libraries_ifdef(CONFIG_COVERAGE
-lgcov

View File

@@ -22,4 +22,14 @@ config ARCH_POSIX_RECOMMENDED_STACK_SIZE
thread stack, the real stack is the native underlying pthread stack.
Therefore the allocated stack can be limited to this size)
config ARCH_POSIX_STOP_ON_FATAL_ERROR
bool "Terminate execution on fatal errors"
depends on ARCH_POSIX
help
If set, when a fatal error occurs, the execution will stop immediately with
an error. If not set, the default Zephyr behaviour will be followed:
terminate only if the fault was triggered in an ISR or essential thread,
otherwise abort the current thread and attempt to continue.
Enabling this option may simplify locating and debugging faults
endmenu

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_library_compile_definitions(NO_POSIX_CHEATS)
zephyr_library_sources(

View File

@@ -85,13 +85,14 @@ FUNC_NORETURN void z_NanoFatalErrorHandler(unsigned int reason,
* This routine implements the corrective action to be taken when the system
* detects a fatal error.
*
* This sample implementation attempts to abort the current thread and allow
* If CONFIG_ARCH_POSIX_STOP_ON_FATAL_ERROR is not set,
* it will attempt to abort the current thread and allow
* the system to continue executing, which may permit the system to continue
* functioning with degraded capabilities.
*
* System designers may wish to enhance or substitute this sample
* implementation to take other actions, such as logging error (or debug)
* information to a persistent repository and/or rebooting the system.
* If CONFIG_ARCH_POSIX_STOP_ON_FATAL_ERROR is set, or the thread is an
* essential thread or interrupt, the execution will be terminated, and an error
* code will be returned to the invoking shell
*
* @param reason the fatal error reason
* @param pEsf pointer to exception stack frame
@@ -117,7 +118,10 @@ FUNC_NORETURN __weak void z_SysFatalErrorHandler(unsigned int reason,
k_is_in_isr() ? "ISR" : "essential thread");
}
printk("Fatal fault in thread %p! Aborting.\n", _current);
k_thread_abort(_current);
if (!IS_ENABLED(CONFIG_ARCH_POSIX_STOP_ON_FATAL_ERROR)) {
k_thread_abort(_current);
}
hang_system:

View File

@@ -72,6 +72,8 @@ struct threads_table_el {
bool running; /* Is this the currently running thread */
pthread_t thread; /* Actual pthread_t as returned by native kernel */
int thead_cnt; /* For debugging: Unique, consecutive, thread number */
/* Pointer to the status kept in the Zephyr thread stack */
posix_thread_status_t *t_status;
};
static struct threads_table_el *threads_table;
@@ -166,7 +168,7 @@ static void posix_let_run(int next_allowed_th)
* Note that as we hold the mutex, they are going to be blocked until
* we reach our own posix_wait_until_allowed() while loop
*/
_SAFE_CALL(pthread_cond_broadcast(&cond_threads));
PC_SAFE_CALL(pthread_cond_broadcast(&cond_threads));
}
@@ -175,7 +177,7 @@ static void posix_preexit_cleanup(void)
/*
* Release the mutex so the next allowed thread can run
*/
_SAFE_CALL(pthread_mutex_unlock(&mtx_threads));
PC_SAFE_CALL(pthread_mutex_unlock(&mtx_threads));
/* We detach ourselves so nobody needs to join to us */
pthread_detach(pthread_self());
@@ -246,7 +248,7 @@ static void posix_cleanup_handler(void *arg)
#endif
_SAFE_CALL(pthread_mutex_unlock(&mtx_threads));
PC_SAFE_CALL(pthread_mutex_unlock(&mtx_threads));
/* We detach ourselves so nobody needs to join to us */
pthread_detach(pthread_self());
@@ -260,18 +262,18 @@ static void posix_cleanup_handler(void *arg)
*/
static void *posix_thread_starter(void *arg)
{
posix_thread_status_t *ptr = (posix_thread_status_t *) arg;
int thread_idx = (intptr_t)arg;
PC_DEBUG("Thread [%i] %i: %s: Starting\n",
threads_table[ptr->thread_idx].thead_cnt,
ptr->thread_idx,
threads_table[thread_idx].thead_cnt,
thread_idx,
__func__);
/*
* We block until all other running threads reach the while loop
* in posix_wait_until_allowed() and they release the mutex
*/
_SAFE_CALL(pthread_mutex_lock(&mtx_threads));
PC_SAFE_CALL(pthread_mutex_lock(&mtx_threads));
/*
* The program may have been finished before this thread ever got to run
@@ -286,18 +288,20 @@ static void *posix_thread_starter(void *arg)
pthread_cleanup_push(posix_cleanup_handler, arg);
PC_DEBUG("Thread [%i] %i: %s: After start mutex (hav mut)\n",
threads_table[ptr->thread_idx].thead_cnt,
ptr->thread_idx,
threads_table[thread_idx].thead_cnt,
thread_idx,
__func__);
/*
* The thread would try to execute immediately, so we block it
* until allowed
*/
posix_wait_until_allowed(ptr->thread_idx);
posix_wait_until_allowed(thread_idx);
posix_new_thread_pre_start();
posix_thread_status_t *ptr = threads_table[thread_idx].t_status;
z_thread_entry(ptr->entry_point, ptr->arg1, ptr->arg2, ptr->arg3);
/*
@@ -306,13 +310,13 @@ static void *posix_thread_starter(void *arg)
*/
/* LCOV_EXCL_START */
posix_print_trace(PREFIX"Thread [%i] %i [%lu] ended!?!\n",
threads_table[ptr->thread_idx].thead_cnt,
ptr->thread_idx,
threads_table[thread_idx].thead_cnt,
thread_idx,
pthread_self());
threads_table[ptr->thread_idx].running = false;
threads_table[ptr->thread_idx].state = FAILED;
threads_table[thread_idx].running = false;
threads_table[thread_idx].state = FAILED;
pthread_cleanup_pop(1);
@@ -370,16 +374,18 @@ void posix_new_thread(posix_thread_status_t *ptr)
threads_table[t_slot].state = USED;
threads_table[t_slot].running = false;
threads_table[t_slot].thead_cnt = thread_create_count++;
threads_table[t_slot].t_status = ptr;
ptr->thread_idx = t_slot;
_SAFE_CALL(pthread_create(&threads_table[t_slot].thread,
PC_SAFE_CALL(pthread_create(&threads_table[t_slot].thread,
NULL,
posix_thread_starter,
(void *)ptr));
(void *)(intptr_t)t_slot));
PC_DEBUG("created thread [%i] %i [%lu]\n",
PC_DEBUG("%s created thread [%i] %i [%lu]\n",
__func__,
threads_table[t_slot].thead_cnt,
ptr->thread_idx,
t_slot,
threads_table[t_slot].thread);
}
@@ -403,7 +409,7 @@ void posix_init_multithreading(void)
threads_table_size = PC_ALLOC_CHUNK_SIZE;
_SAFE_CALL(pthread_mutex_lock(&mtx_threads));
PC_SAFE_CALL(pthread_mutex_lock(&mtx_threads));
}
/**

View File

@@ -51,13 +51,13 @@ void z_new_thread(struct k_thread *thread, k_thread_stack_t *stack,
int priority, unsigned int options)
{
char *stack_memory = K_THREAD_STACK_BUFFER(stack);
char *stack_memory = Z_THREAD_STACK_BUFFER(stack);
Z_ASSERT_VALID_PRIO(priority, thread_func);
posix_thread_status_t *thread_status;
_new_thread_init(thread, stack_memory, stack_size, priority, options);
z_new_thread_init(thread, stack_memory, stack_size, priority, options);
/* We store it in the same place where normal archs store the
* "initial stack frame"

View File

@@ -24,9 +24,6 @@
#define _thread_offset_to_esp \
(___thread_t_callee_saved_OFFSET + ___callee_saved_t_esp_OFFSET)
#define _thread_offset_to_coopFloatReg \
(___thread_t_arch_OFFSET + ___thread_arch_t_coopFloatReg_OFFSET)
#define _thread_offset_to_preempFloatReg \
(___thread_t_arch_OFFSET + ___thread_arch_t_preempFloatReg_OFFSET)

View File

@@ -9,13 +9,13 @@
#include "toolchain.h"
#define _SAFE_CALL(a) _safe_call(a, #a)
#define PC_SAFE_CALL(a) pc_safe_call(a, #a)
#ifdef __cplusplus
extern "C" {
#endif
static inline void _safe_call(int test, const char *test_str)
static inline void pc_safe_call(int test, const char *test_str)
{
/* LCOV_EXCL_START */ /* See Note1 */
if (unlikely(test)) {
@@ -34,6 +34,6 @@ static inline void _safe_call(int test, const char *test_str)
/*
* Note 1:
*
* All checks for the host pthreads functions which are wrapped by _SAFE_CALL
* All checks for the host pthreads functions which are wrapped by PC_SAFE_CALL
* are meant to never fail, and therefore will not be covered.
*/

View File

@@ -27,7 +27,7 @@ extern "C" {
*
* @return The key of the interrupt that is currently being processed.
*/
static inline int _sys_current_irq_key_get(void)
static inline int z_sys_current_irq_key_get(void)
{
return posix_get_current_irq();
}

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
add_subdirectory(core)
set_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT elf32-littleriscv)

View File

@@ -1,3 +1,5 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_sources(
cpu_idle.c
fatal.c

View File

@@ -17,7 +17,7 @@ static volatile void *offload_param;
* Just in case the offload routine itself generates an unhandled
* exception, clear the offload_routine global before executing.
*/
void _irq_do_offload(void)
void z_irq_do_offload(void)
{
irq_offload_routine_t tmp;

View File

@@ -218,12 +218,12 @@ on_irq_stack:
beqz t1, call_irq
/*
* Call _irq_do_offload to handle IRQ offloading.
* Call z_irq_do_offload to handle IRQ offloading.
* Set return address to on_thread_stack in order to jump there
* upon returning from _irq_do_offload
* upon returning from z_irq_do_offload
*/
la ra, on_thread_stack
tail _irq_do_offload
tail z_irq_do_offload
call_irq:
#ifdef CONFIG_TRACING

View File

@@ -10,7 +10,7 @@
/* exports */
GTEXT(__swap)
GTEXT(_thread_entry_wrapper)
GTEXT(z_thread_entry_wrapper)
/* Use ABI name of registers for the sake of simplicity */
@@ -103,11 +103,11 @@ SECTION_FUNC(exception.other, __swap)
/*
* void _thread_entry_wrapper(k_thread_entry_t, void *, void *, void *)
* void z_thread_entry_wrapper(k_thread_entry_t, void *, void *, void *)
*/
SECTION_FUNC(TEXT, _thread_entry_wrapper)
SECTION_FUNC(TEXT, z_thread_entry_wrapper)
/*
* _thread_entry_wrapper is called for every new thread upon the return
* z_thread_entry_wrapper is called for every new thread upon the return
* of __swap or ISR. Its address, as well as its input function
* arguments thread_entry_t, void *, void *, void * are restored from
* the thread stack (initialized via function _thread).

Some files were not shown because too many files have changed in this diff Show More