The default MCUX_OS_TIMER_MIN_DELAY of 1000 cycles is too large
relative to CYC_PER_TICK (100) on platforms clocked at 1 MHz with
SYS_CLOCK_TICKS_PER_SEC=10000. Because MIN_DELAY exceeds CYC_PER_TICK
by 10x, nearly every sys_clock_set_timeout() call adds an extra tick,
inflating short delays and causing the kernel timer_behavior test
(timer_ramp) to fail for low delay values.
Reduce the default to 50 cycles (50 us at 1 MHz), which provides
sufficient hardware setup margin for the match register without
interfering with normal tick scheduling.
Verified on frdm_mcxa344 and frdm_mcxa156 hardware:
- tests/kernel/timer/timer_behavior: all cases pass
Signed-off-by: Neil Chen <cheng.chen_1@nxp.com>
Implements the new per-bus timeout mechanism for the I2C bus that was
introduced in PR #107827.
Assisted-by: Github Copilot:Claude Opus 5
Signed-off-by: John Batch <john.batch@infineon.com>
`select SYSCON` in `OTP_RTS5817` creates a circular Kconfig dependency
loop (`SYSCON -> OTP -> ... -> DCACHE -> SYSCON`) that breaks kconfig.py
in downstream builds.
Change `select SYSCON` to `depends on SYSCON` to break the loop.
Signed-off-by: Al Semjonovs <asemjonovs@google.com>
Align the public UART async API with its microsecond-based implementation.
Update the wide-data (u16 variant) TX and RX API documentation to
specify microseconds and SYS_FOREVER_US.
Replace millisecond-named forever sentinels in the serial test driver and
asynchronous UART callers, while retaining existing microsecond timeout
values in drivers, tests, and samples.
Assisted-by: Copilot:GPT-5.6 Terra
Signed-off-by: Pisit Sawangvonganan <pisit@ndrsolution.com>
Add `CONFIG_ST67W611M1_WIFI_AUTO_CONNECT` to control persistent
auto-connect setting `AT+CWAUTOCONN`.
During init the driver reads `AT+CWAUTOCONN?` and only issues
`AT+CWAUTOCONN=<0|1>` when the module's current value differs,
so the module's flash is not rewritten on every boot.
Signed-off-by: Ibrahim Abdalkader <i.abdalkader@gmail.com>
The init sequence never put the coprocessor into station mode, so on a
freshly flashed module the first AT+CWJAP is rejected with ERROR and
wifi connect always fails.
Issue AT+CWMODE=1,1 during initialization. This matches ST's ST67W6X
SDK, which sets station mode in W61_WiFi_Station_Start(), called early in
W6X_WiFi_Init() (before auto-connect, country code and DTIM setup). The
auto-connect field is left at the firmware default (1) so mode changes
rely on the saved flash configuration.
Signed-off-by: Ibrahim Abdalkader <i.abdalkader@gmail.com>
Add AES and SHA-256 crypto drivers for Realtek Bee SoCs. The AES
supports 128-bit and 256-bit keys with ECB, CBC, CFB, OFB, and CTR
modes.
The SHA-256 driver supports one-shot hash operations. Add devicetree
bindings and disabled nodes for RTL8752H and RTL87x2G, so boards can
enable the accelerators explicitly.
Signed-off-by: Zhiyuan Tang <zhiyuan_tang@realsil.com.cn>
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Zhiyuan Tang <zhiyuan_tang@realsil.com.cn>
This driver needs the nsi_errno conversion component.
Let's make sure we build it by selecting it.
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
This driver needs the nsi_errno conversion component.
Let's make sure we build it by selecting it.
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
This driver needs the nsi_errno conversion component.
Let's make sure we build it by selecting it.
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
This driver needs the nsi_errno conversion component.
Let's make sure we build it by selecting it.
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
According to Table 6 in the reference manual, the system memory ranging
from 0x1ff00000 to 0x1ff1ffff on STM32H7 SoCs may be accessed only by
the Cortex-M7. Notably, this range includes the 96 bit UID located at
0x1ff1e800. Attempting to access this address from the Cortex-M4 results
in a HardFault.
Simply omit the z_impl_hwinfo_get_device_id function entirely on the
Cortex-M4 and rely on the weak default symbol to return an error.
Signed-off-by: Vilhelm Engström <vilhelm.engstrom@tuta.io>
To avoid assuming that ZVFS_O_RDONLY matches O_RDONLY, compile the
Linux file access code directly with the host libc.
This also removes the need for the nsi_host file operation wrappers and
makes the host-side code easier to read.
Signed-off-by: Bayrem Gharsellaoui <bayrem.gharsellaoui@gmail.com>
Add a native_sim driver to read a Linux host temperature using the
Zephyr sensor API.
Signed-off-by: Bayrem Gharsellaoui <bayrem.gharsellaoui@gmail.com>
The BLE receive thread runs the connect-time settings store
(CCC, keys, GATT database hash), which on Espressif SoCs goes
through the flash driver and PSA crypto and overflows the 1200
byte host default. Raise BT_RX_STACK_SIZE to 2048 when
BT_SETTINGS is enabled.
Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
Use store-and-forward mode instead of cut-through mode to
allow for offloading of checksum calculation to the hardware.
Signed-off-by: Tim Pambor <tim.pambor@codewrights.de>
Cores with multiple queues need to have queue 0 setup explicitly,
otherwise no queue will be available for RX/TX. As only a single
queue is used in this driver, setup queue 0 and assign the whole
fifo to it.
Signed-off-by: Tim Pambor <tim.pambor@codewrights.de>
The driver was incorrectly using 'oob_addr' instead of 'addr' as the
PECI index during transactions. Update the assignment to use the correct
target address.
Additionally, add the missing definitions in the header file to complete
the PECI over eSPI implementation.
Signed-off-by: Elmo Lan <elmo_lan@realtek.com>
The I2C master transfer waited on the transfer semaphore with K_FOREVER,
so a target that never completed a transfer would block the calling
thread indefinitely with no recovery mechanism.
Wait on the transfer semaphore using I2C_TRANSFER_TIMEOUT. On a timeout,
abort the asynchronous operation and reset the shared state with the SCB
interrupt masked so a late completion cannot corrupt the teardown, then
return -ETIMEDOUT.
Assisted-by: Github Copilot:claude-opus-4.8
Signed-off-by: John Batch <john.batch@infineon.com>
A write-read transfer to a target that NACKs its address sometimes
returns stale data on alternating attempts. This is caused by the read
phase being chained from the interrupt handler whenever the master goes
idle. After a write is aborted by an address NACK, the read is still
being issued, which causes an extra completion to be signalled. The
following transfer then erroneously acts on this, causing the driver to
report a successful transfer erroneously.
Chain the read phase from the event handler on write completion so it is
only issued after the write phase is successful. Clear the async
transfer state on the error path so the interrupt handler doesn't start
a spurious read after a failed write.
Assisted-by: Github Copilot:claude-opus-4.8
Signed-off-by: John Batch <john.batch@infineon.com>
Add a new pm_cpu_ops backend implementing the ARM64 spin-table
boot protocol for bringing up secondary CPUs, as an alternative
to PSCI on platforms that don't support it.
Signed-off-by: Muhammad Waleed Badar <walid.badar@gmail.com>
The LDO branch of configure_active_discharge() wrote the reg
variable, which is always UINT8_MAX for LDOs, into the pull-down
field, enabling the pull-down even when active discharge was
explicitly disabled. Use the requested active_discharge value like
the BUCK and load switch branches do.
Assisted-by: Claude:fable-5
Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org>
The renesas,regulator-v30-vbus property was multiplied by the VBAT
mode bit and renesas,regulator-v30-vbat by the VBUS mode bit, so
each property enabled the opposite supply source. Swap the mode
constants so each property programs its own bit.
Assisted-by: Claude:fable-5
Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org>
The Solomon Systech SSD1683 is a Gen2 SSD16xx EPD controller (functionally
equivalent to the SSD1619A, 400 sources x 300 gates). It uses the same
command set as the already-supported SSD1680/SSD1681, and loads its refresh
waveforms from OTP, so support is a new devicetree binding plus a quirks
entry with the correct maximum resolution.
Used by e.g. the WeAct Studio 4.2" and GoodDisplay GDEY042T81 400x300
mono panels.
Signed-off-by: Marcus Voß <meav33@gmail.com>
Stream Sensor HUB data in FIFO and decode them properly.
Currently two channels are handled:
- SENSOR_CHAN_MAGN_XYZ
- SENSOR_CHAN_PRESS
Signed-off-by: Armando Visconti <armando.visconti@st.com>
Set the read number of operation to 0 at the end of
lsm6dsv16x_shub_read_target_reg(), just to avoid issues
when reading data from FIFO.
Signed-off-by: Armando Visconti <armando.visconti@st.com>
Some SPI devices need the CS pin to be deasserted between multiple
transceive calls (e.g. the Microchip LAN8651). The MCSPI driver didn't do
this until now and kept the CS pin asserted for hardware controlled CS
pins, except if the channel changed.
This has been changed and additionally during init the GPIO pins are now
also being initialized.
Signed-off-by: Mika Braunschweig <mika.braunschweig@siemens.com>
Fix an issue reported by Copilot during review of another I2C RTIO
driver PM integration [1] that showed pm_device_runtime_get() failure
in i2c_rtio_submit handler could leave queued messages that will
never be proceeded and would stall the I2C RTIO transfer for the related
I2C bus.
Address that by flushing queued messages upon pm_device_runtime_get()
failure in iodev_submit handler.
Link: https://github.com/zephyrproject-rtos/zephyr/pull/110623#discussion_r3362750827 [1]
Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
Factorize the loop sequence for processing synchronous I2C operations
until an async operation is started or there are no more queued
operations.
Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
Correct an issue in NFRX TWIM I2C RTIO driver that made the bus PM
resources not released once all synchronous operations are proceeded
(by i2c_nrfx_twim_rtio_start_next_async()) and no asynchronous operation
followed in the RTIO queue.
For sake of simplicity, fix that by syncing with other I2C RTIO drivers
implementation, moving calls to i2c_rtio_complete() into an the
synchronous message processing loop and adding the missing call to
pm_device_runtime_put() from that loop.
Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
I2C RTIO operation that are synchronous (failure to start a message
transfer, bus configuration/recovery and unsupported or invalid RTIO I2C
operations) do call i2c_rtio_complete() but do not start next message
processing if the latter return true. Fix that and clarify the meaning
of i2c_nrfx_twi_rtio_start() return value.
For this purpose, move the call to i2c_rtio_complete() out of
i2c_nrfx_twi_rtio_msg_start() and i2c_nrfx_twi_rtio_start() functions
(the caller takes care of) and make i2c_nrfx_twi_rtio_msg_start() to
return a status error code.
Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
I2C RTIO operation that are synchronous (failure to start a message
transfer, bus configuration and unsupported or invalid RTIO I2C
operations) do call i2c_rtio_complete() but do not start next message
processing if the latter return true. Fix that and clarify the meaning
of mcux_lpi2c_start() return value. For this purpose, change
mcux_lpi2c_msg_start() not call i2c_rtio_complete() and to return an
errno code.
While at it, remove forward declaration of mcux_lpi2c_complete() this
is not needed and remove a '\n' character from error log message.
Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
I2C RTIO operation that are synchronous (failure to start a message
transfer, bus configuration and unsupported or invalid RTIO I2C
operations) do call i2c_rtio_complete() but do not start next message
processing if the latter return true. Fix that and clarify the meaning
of max32_start() return value.
While at line, remove a nearby unexpected empty line.
Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
Some gpio controller do not support GPIO_DISCONNECTED, or at least when
the dt flag also includes pullup/pulldowns. Add an option to allow using
GPIO_INPUT instead, that'll always work.
Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
Add SOC_ESP32_APPCPU_TARGET, a hidden symbol set whenever the
build targets the APPCPU image of a dual-core SoC. Replace all
places that checked SOC_ESP32_APPCPU and SOC_ESP32S3_APPCPU
together with the new symbol.
Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
There is no need to limit this functionality to when we build the
embedded code with the host libC.
It is better to just move the host dependent code into its own
file that is built in the runner context.
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
Deconfigure: i2s_configure() with frame_clk_freq == 0 is defined by the
API as a request to deconfigure the stream, but the driver rejected it
with -EINVAL. Release the queued buffers and move the stream to
NOT_READY. The state check is now made on the stream being configured
instead of on both directions at once, so one direction can be
configured while the other one is running, and config_get() returns
NULL for an unconfigured stream as the API requires.
Restart: reset the FIFO pointers via the FR bit before enabling DMA
requests, so words left over from a previous run are not replayed.
Bit clock source: the SAI_Get*Config helpers overwrite bclkSource with
the master clock divider, leaving SoCs without an internal divider or
MCLK routing with no bit clock at all. Add an nxp,bclk-source binding
property (TCR2/RCR2 MSEL value) applied after those calls; it defaults
to the master clock divider so existing users are unaffected.
Signed-off-by: Lucien Zhao <lucien.zhao@nxp.com>
Add SAI gate and rate table entries, guarded by CONFIG_I2S_MCUX_SAI
and FSL_FEATURE_SOC_I2S_COUNT like the other per-IP entries, so the
I2S (SAI) driver can gate the peripheral clock and query its rate
through the standard clock_control API.
Verified with tests/drivers/i2s/i2s_speed on frdm_mcxe31b: the SAI
module clock gates on and reports the AIPS_SLOW rate used for the
bit clock dividers.
Signed-off-by: Lucien Zhao <lucien.zhao@nxp.com>
Add a sensor decoder for the MAX30009 streaming path, decoding the I and
Q BioZ channels from the FIFO sample sets pushed by the RTIO submit
path.
The decoder is compiled in with the streaming path via
CONFIG_MAX30009_STREAM.
Signed-off-by: Francis Roi Manabat <francisroi.manabat@analog.com>
Add RTIO streaming of the I and Q BioZ channels. The submit path reads
the FIFO on a watermark/data-ready interrupt and pushes sample sets into
the RTIO buffer; one-shot (non-streaming) reads are rejected.
Streaming is compiled in via CONFIG_MAX30009_STREAM.
Signed-off-by: Francis Roi Manabat <francisroi.manabat@analog.com>
Add own-thread and global-thread trigger support for the MAX30009.
Handlers are provided for the FIFO watermark, data-ready and DC
lead-off / range status events, dispatched from the interrupt GPIO.
The trigger source is compiled in via CONFIG_MAX30009_TRIGGER.
Signed-off-by: Francis Roi Manabat <francisroi.manabat@analog.com>
Add a driver for the Analog Devices MAX30009 bioimpedance analog
front-end. The device is supported over both SPI and I2C.
This base commit provides the core acquisition-path driver:
- Full BioZ acquisition-path configuration from devicetree (clock/PLL,
drive, receive channel, digital filters, thresholds, mux, DC leads and
lead bias), with a dt-bindings header of MAX30009_DT_* constants for
the enumerated properties.
- Runtime attribute access (attr_set / attr_get) for the meaningful BioZ
parameters via a descriptor table, cycling the PLL where the datasheet
requires the acquisition path to be quiesced.
- Power management (suspend / resume) following the datasheet's
bandgap / PLL / channel enable sequence.
Trigger and RTIO streaming support are added in follow-up commits; the
full Kconfig describing those options is included here so the driver's
configuration surface is complete.
Signed-off-by: Francis Roi Manabat <francisroi.manabat@analog.com>
The echo-timeout defines the maximum range of the ultrasonic sensor and
was hardcoded to 10ms (~1.5m).
This commit creates a dts property for the timeout,
so users can configure the maximum range per sensor instance.
The default setting of the property is 10ms for compatibility.
Signed-off-by: Nils Harder <harder@metratec.com>
The val_out snapshot exported by elapsed() was written after the
wrap-realignment step, so callers received last_load instead of 0
whenever sample C happened to read VAL == 0.
sys_clock_set_timeout() feeds that snapshot into the drift
compensation as val1 and compares it against a later raw read of
SysTick->VAL as val2. Mixing a realigned operand with a raw one makes
val1 - val2 evaluate to a whole counter period that never elapsed, so
cycle_count jumps forward by up to one full timer period on every
reprogram that lands on a zero VAL sample.
The realignment of 0 to last_load is an internal convention of
elapsed(): it exists only so the wrap-detection below can assume
COUNTFLAG and wrapping occur on the same cycle. It has no meaning for
a caller that measures a window against its own raw register read.
Move the export to immediately after the three register reads so
val_out carries the raw sample, which is what the code did before
elapsed() grew the out-parameter. The out-parameter still removes the
gap between the window elapsed() accounts for and the window the
drift compensation measures.
Assisted-by: Claude:claude-opus-5
Signed-off-by: Anas Nashif <anas.nashif@intel.com>