Commit Graph

58748 Commits

Author SHA1 Message Date
Henrik Brix Andersen
d8dba3dafe doc: reference: include two levels of titles in the toc
The Zephyr API grouping can be a bit difficult to maneuver. Ease this up
a bit by expanding the table of contents to contain two levels of
titles.

Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
2021-12-15 14:59:21 -05:00
Henrik Brix Andersen
cb296faa7d doc: reference: reword a few titles
Reword a few of the reference documentation titles to better fit in with
the rest.

Do not use all-caps MODBUS for title.

Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
2021-12-15 14:59:21 -05:00
Chris Trowbridge
ac28f8ddde boards: arm: Add NXP i.MX8M Plus EVK board support
Add board support for NXP i.MX8M Plus EVK. This board has the following
features:

Processor    : i.MX8M Plus Quad applications processor
Memory       : 32-bit LPDDR4 w/6 GB
               eMMC 5.0/5.1 w/32 GB
               SD/MMC connector
               QSPI w/32 MB
Connectivity : MIMO 2x2 Wi-Fi 802.11b/g/n/ac and BT 4.2
               2x Ethernet (1x w/ TSN)
               PCIe M.2
               2x CAN FD DB9 Female connectors
USB          : USB 3.0 Type C for Power
               USB 3.0 Type A
               USB 3.0 Type C
Debug        : JTAG connector
               MicroUSB for debug console

More information about this board can be found in NXP website: https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-8m-plus-applications-processor:8MPLUSLPD4-EVK

Signed-off-by: Chris Trowbridge <chris.trowbridge@lairdconnect.com>
2021-12-15 13:15:00 -06:00
Anas Nashif
526ee4c74f twister: do not use deprecated arguments to nrfprog
--snr is deprecated, so use --dev-id instead.

Fixes #40449

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2021-12-15 14:09:49 -05:00
Anas Nashif
c5070dd06c twister: fix documentation of baud setting
Baud setting in the hardware map should not be enclosed by quotes.

Fixes #40450

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2021-12-15 14:09:49 -05:00
Anas Nashif
018ccd6210 twister: fix baud setting for detected devices
When generating new map we store serial_baud, but the schema has 'baud'
only, so call this baud in the class and resolve the issue of creating
new maps.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2021-12-15 14:09:49 -05:00
Anas Nashif
d1991e9952 twister: remove lock from generated hardware map
remove lock before storing yaml file.

Fixes #39179

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
2021-12-15 14:09:49 -05:00
Piotr Golyzniak
3194f75098 twister: log error for non-existing platform call
Changes will log error message in following three situations:

1. Platform name pass in --platform option does not exist.
2. During using --all option, platform from platform_allow list does not
exist.
3. During using --integration option, platform from
integration_platforms list does not exist.

Fixes #31868

Signed-off-by: Piotr Golyzniak <piotr.golyzniak@nordicsemi.no>
2021-12-15 09:38:55 -05:00
Wouter Cappelle
ecff02891d dts: arm: Fix warning on STM32L010XB boards
When building for an STM32K010xB MCU, there is a deprecated properties
warning, which should be fixed by this PR.

Signed-off-by: Wouter Cappelle <wouter.cappelle@crodeon.com>
2021-12-15 08:21:17 -06:00
Krzysztof Kopyściński
0f6dc7a3cd bluetooth: tester: allow to set DisplayYesNo IO capability
This allows us to run SCPK tests with it.

signed-off-by: Krzysztof Kopyściński <krzysztof.kopyscinski@codecoup.pl>
2021-12-15 15:08:37 +01:00
Gerard Marull-Paretas
4cc018bcd6 pm: policy: header cleanup
Include just the necessary headers.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Gerard Marull-Paretas
a269654243 pm: policy: s/policy_residency.c/residency.c
The file is already inside the `policy` folder, so don't repeat policy
in the name.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Gerard Marull-Paretas
d03307bffa pm: policy: delete redundant PM_POLICY_RESIDENCY_DEFAULT config
Kconfig choice allows to set a default, so there is no need for an extra
hidden Kconfig option.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Gerard Marull-Paretas
80021f2491 pm: policy: drop dummy policy
The dummy policy is not being used anywhere, not even for testing as it
claims.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Gerard Marull-Paretas
03232f925c pm: policy: residency: add compile time checks for timings
Check that minimum residency time is greater than exit latency time for
all CPUs power states at compile time.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Gerard Marull-Paretas
d5036eca42 pm: policy: residency: improve DT collection
Use COND_CODE_1 to improve the collection of CPUs power states.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Gerard Marull-Paretas
25fb8664b1 pm: policy: residency: improve readability
Improve readability and reduce the scope of some variables.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Gerard Marull-Paretas
12915727e9 pm: policy: residency: constify and make uint8_t states_per_cpu
The values contained by the array are const, and number of states is
usually far below 255, so uint8_t can be used.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Gerard Marull-Paretas
dbfb0dcb97 pm: policy: residency: s/pm_min_residency/cpus_states
Adjust pm_min_residency variable name to make it more clear.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Gerard Marull-Paretas
ba39c98821 pm: policy: residency: s/pm_min_residency_sizes/states_per_cpu
Rename variable name to make it clear what it does store.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Gerard Marull-Paretas
b176edea1f pm: policy: residency: s/CPU_STATES_SIZE/NUM_CPU_STATES
Use NUM_CPU_STATES name (more in line with the DT macro).

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2021-12-15 11:27:39 +01:00
Andy Ross
66e2ba130f soc/intel_adsp: Unbreak xcc builds
Recent linker changes got ahead of the toolchain and started using
features not available in the binutils 2.23-based Xtensa toolchain.
Specifically:

+ The section arguments to objcopy don't accept wildcards.

+ It's not legal to have an ALLOC section emitted to a region outside
  a declared MEMORY space.  So various non-mapped sections populated
  by C structs have to be put somewhere with an explicit address.

+ The older linker won't automatically create an empty section just
  because you assigned to ".", so the Zephyr tests that lack a
  .fw_metadata section get rejected by rimage.  The fix here is a
  little clumsy: copy the section out of zephyr.elf into a
  (potentially-zero-length) temporary file, then add it back to
  main.mod as a final step.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
bc6abbc18b soc/intel_adsp: Simplify boot SRAM initialization
The module copy was clearing BSS sections from the module list, but we
already clear the full memory space immediately after SRAM power-up so
that's needless, just like the legacy reset vector bss clear that got
removed earlier.  (Yes: that means that this code used to be writing
zeros to .bss three times!)

Similarly, put a symmetric clear on the LP-SRAM bank for safety (it's
not currently used by Zephyr but we do start it up).  And move the
cache flush to the end of initialization immediately before OS
handoff.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
9eca65deca soc/intel_adsp: Correct LP-SRAM sizes in DTS
Everything I can find as a reference says that the LP-SRAM block on
these devices is 64kb, and direct experimentation with cAVS 1.5 and
2.5 agrees.  Access to areas beyond 64k hangs the DSP (it should cause
a PIF fault I guess, but the exception never gets trapped, that's
probably a different problem).

Fix this in devicetree to reflect what actually works.  It's not clear
where the 128k values came from; if they're not typos we can correct
that when we find better docs.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
35f906e65c soc/intel_adsp: Remove ipc.h
More dead code.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
9ac2c214eb soc/intel_adsp: Remove adsp/io.h
More dead code.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
06e661487a soc/intel_adsp: Move cache coherence API into soc.h
Both soc.h and adsp/cache.h were very small headers, there's no good
reason to have a separate header just for two one-line inlines.
Merge.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
75c8a0c902 soc/intel_adsp: Put a guard around CAVS_VERSION
This is some SOF code that got imported into Zephyr.  But it's not a
Zephyr API and Zephyr doesn't use it.  Unfortunately, the Zephyr
definition is now the one actually used at runtime in SOF, so we can't
remove it.

Put a guard around the definition so nothing else uses it until we get
it moved back home.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
797dd7ea57 soc/intel_adsp: Remove cavs/cpu.h
Dead code.  Unused in Zephyr.  Seems like SOF is picking this up from
its own headers via reading CONFIG_MP_NUM_CPUS correctly.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
24855f71eb soc/intel_adsp: Linkage cleanup
Syntax beautification and general simplification pass:

+ Remove some spurious padding around the _data_end symbol.  That's a
  Zephyr symbol and should reflect the actual end of the data section in
  bytes.

+ Squash a warning that crept in where the linker doesn't like
  changing cache mapping and padding at one time, clarify in docs.

+ Use the pre-existing-but-heretofore-unknown-to-me Zephyr
  debug-sections.ld include file instead of putting all the DWARF
  sections in by hand.

+ Move the .xt* sections to explicit zero addresses, since that's what
  debug-sections.ld does for its output and if I don't they'll end up
  with funny values.

+ Use Zephyr brace-on-same-line style consistently

+ Remove cargo-cult noop patterns like ALIGN(4) and ABSOLUTE(.) (none
  of these sections get furthur relocated!)

+ Clean up the SEGSTART_* API so that it doesn't need to have
  CONFIG_KERNEL_COHERENCE guards.

+ Remove a few unused/legacy symbol exports ("end", "__stack") so as
  not to pollute the namespace.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
c2204aba76 soc/intel_adsp: Remove platform.h
This header is now included in only one place, and just contains a
handful of very-bootloader-specific platform tunables that will never
be exported elsewhere.  Move that code into the C file.  Longer term
we should configure the memory controllers with devicetree as much as
practical, but there's no reason to keep this header around.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
6809593739 soc/intel_adsp: Linkage rework
Lots of changes to the linkage, none major:

+ Remove all the manually-defined ELF program headers.  This was a big
  pain to maintain, and I finally figured out why we were doing this:
  it turns out to have been a workaround for the flags issue below.

+ Suppress the "empty loadable section" warnings at module generation.
  This turns out to be an objcopy issue, when you drop all the
  sections from an ELF program header.

+ Set section flags for NOLOAD sections manually.  Rimage is very
  strict about flags (even to the point of trying to suck in its own
  metadata section as program text).  This turns out to be really
  fragile, as the linker automatically sets flags on the output
  section based on the symbols placed in it.  Rather than needing to
  have one program header per section, or playing games in the
  assembly for section definition to make this all match, just set the
  flags expressly on the sections we know about on the objcopy command
  line.

+ Similarly drop the special memory regions with explicit faked
  "physical" addresses that were being used for non-loadable sections
  (e.g. .fw_metadata, .static_log_entries).  Just link them all after
  the rest of the image like other platforms do.

+ Clean up multiple levels of macro indirection for the manifest base
  address, which is ultimately coming from kconfig.  Now the magic
  numbers don't seem so magic.

+ Remove legacy symbol exports for "cacheattr" that we don't use
  anymore.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
429a5fb456 soc/intel_adsp: Remove spurious 4k padding of .text section
There was a ". = ALIGN(4096);" sitting at the end of the .text section
in the linker.  This had the effect of needlessly padding the size of
the segment as packed into and copied out of the firmware DMA image.

There's no value to storing unused bytes in the image.  It also makes
analysis easier for changes the modify code size.  The following
.rodata section was already being 4k aligned anyway.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
cc1158c398 soc/intel_adsp: Move window setup into bootloader
The bootloader had always been doing setup for window 0 (the firmware
status word reported to the loader).  This then got needlessly
repeated in the main OS startup.  Drop that, and move window 3 setup
(the trace/printk output buffer) there too for symmetry.

This means that the clear and cache flush of the buffer can be handled
in only one place too, for some runtime win (before it was being
cleared/flushed once at SRAM initialization time and then again at
window setup).

And as that was the only task remaining in the "adsp.c" file, we can
just remove it entirely.

One nice side effect is that this pushes up the point where we can get
a successful printk() out all the way back into the later stages of
the bootloader.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
184b795cde soc/intel_adsp: Move initialization code to IMR
Now that we have access to IMR memory for non-bootloader tasks, let's
pick the low hanging fruit.  SOC code that is only used at
initialization time (or things like core halt/restart which happen
only in non-realtime contexts) are now flagged __imr.

This is good for 808 bytes of code moved out of the main Zephyr image
on cavs_v25.

In the medium term, it would be good to define a system define for
this purpose (a-la Linux __init/__initdata) and start moving core
Zephyr init code too.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
3d654df137 soc/intel_adsp: Replace Zephyr assembly entry stub
The Zephyr symbols are now part of the same link as the bootloader, so
no need to have an assembly entry stub or fixed address at all.  Just
call z_cstart() as a normally-relocated function.  Interestingly
Zephyr never put a declaration for it in public headers, because this
appears to be the first platform calling it from C.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
524e33ed6d soc/intel_adsp: Remove dead bootloader framework
Now that the IMR boot code is built as part of the main Zephyr
executable, remove the old stuff and its directory.  The C file
becomes "boot.c" in the common directory and the two
bootloader-specific headers move into common/include.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
2906d1aa51 soc/intel_adsp: Build bootloader with Zephyr
The presence of a separate build for the bootloader code has always
been a wart with this platform.  Sharing of code between the two has
required great care. We've had bugs with mismatched include paths,
macro definitions and compiler flags, etc...  And of course it's not
possible for one to see the other; in theory we'd like the ability to
call back into IMR code after startup, to use the space for temporary
storage, etc...

So let's finally do it.  This really isn't that complicated when you
see it in isolation:

+ Move the module manifest metadata into an "rimage_modules.c", and
  put them in their own NOLOAD section where we can grab them later
  with objcopy.

+ Make a new "imr" memory region in the main linker and just paste the
  bootloader linkage (which is now using its own specific sections) in
  there.

+ After zephyr.elf is built and cache-remapped, we can extract the imr
  sections and the appropriate manifest for the bootloader rimage
  module, and then do the converse by excluding them for the main
  image module.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
79746d701b arch/xtensa: Make cache utilities ALWAYS_INLINE
These are tiny functions always declared as "inline" per C99, but
that's just a hint.  In practice, they tend to be (c.f. intel_asdp)
called from very early boot circumstances where main application
symbols aren't yet available.  That obviously doesn't work, or even
link.

Make them ALWAYS_INLINE.  In practice they're so small that we don't
want them called anyway just for stack space reasons.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
59ad4c4097 soc/intel_adsp: Bootloader refactoring: separate linkage for IMR memory
Define an __imr attribute macro that allows the bootloader to
expressly specify symbosls to go into IMR memory, use it pervasively
in the bootloader code, and remove the traditional section names from
boot_ldr.x.

This doesn't do anything by itself, but it is a necessary step for
getting the bootloader and Zephyr code to live together in the same
link.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
1a2fecec6d soc/intel_adsp: Unify Xtensa CPU reset between cores
Startup on these devices was sort of a mess, with multiple variants of
Xtensa and platform initialization code from multiple ancestries being
invoked at different places for different purposes.  Just use one code
path for everyone.

Bootloader entry starts with a minimal assembly stub that simply sets
WINDOW{START,BASE}, PS and a stack pointer and then jumps to C code.
That then uses the cpu_early_init() implementation from cAVS 2.5's
secondary cores to finish Xtensa initialization, and then flows
directly into the pre-existing bootloader C code to initialize cache
and memory and copy the HP-SRAM image, then it invokes Zephyr via a
simple C function call to z_cstart().

Likewise, remove the "reset vector" from Zephyr.  This was never a
reset vector, reset on these devices goes to a fixed address in a ROM.
CPU initialization is handled explicitly and completely in the
bootloader now, in a way that can be unified between the main and
secondary cores.  Entry from the bootloader now goes directly into
z_cstart() via a C call (via a single jump instruction placed at the
entry point address -- that's going away soon too once we're using a
unified link).

Now that vector table initialization happens in a uniform way, there's
no need to copy the VECBASE value during arch_start_cpu().

Finally note that this also reverts the
CONFIG_RESET_VECTOR_IN_BOOTLOADER kconfig variable added for these
platforms, because it's no longer a tunable and true always.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
887eeb74d3 soc/intel_adsp: Refactor boot loader initialization path
Remove an unused strcmp() implementation.  Flatten the call tree for
HP-SRAM initialization for clarity.  Better isolate the platform
dependencies so e.g. hp_sram_pm_banks() becomes a clean noop on 1.5.

Also removes some dead/vestigial "error" handling, which wasn't being
propagated anywhere.  Note that error detection and handling is a bad
idea, but this is VERY early code.  We don't have even a theoretical
way of getting information back to the host until after SRAM is
initialized and window zero is set up.  (And even then there's no
protocol available other than signaling "FW_ENTERED" or... not).

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
1a9310efa1 soc/intel_adsp: Rework Xtensa region protection initialization
Our "TLB"[1] initialization on secondary cores for cAVS 2.5 was
forgetting to initialize instruction caching, leading to a performance
regression.  Clean this up and augment so that it matches the (larger,
non-C-callable) HAL implementation.

This will also allow us to use the same code on the main core in
upcoming changes.

[1] It's not a TLB, it just uses the TLB management instructions

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
f1e941acd4 soc/intel_adsp: Align .rodata with .data in bootloader
This seems to be a mistake in rimage: it wants the text and data
segments of the output module to be page-aligned, but it assumes
.rodata is part of "data" and not "text".  So this reorders the
segments to make that happen.

Note that the page alignment is entirely artificial.  Nothing is
interpreting the segment boundaries rimage is enforcing except for the
code in the bootloader itself, which doesn't care.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
fd622eb419 soc/intel_adsp: Remove dead code in bootloader
There was some vestigial handling here for Sue Creek (which this code
has never supported, that's a different board in Zephyr) and some code
that apparently managed a bug workaround in the ancestral SOF code.
Neither was buildable.  Remove.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Andy Ross
b6635456d1 soc/intel_adsp: Refactor, move CPU init into a separate header
Move the very-early core initialization hooks (which are a mix of
Xtensa architectural features and Intel-specific hardwareisms) into a
separate header so they can be shared between the bootloader, main
core, and MP cores.

Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
2021-12-14 18:43:05 -06:00
Flavio Ceolin
8cd6744498 tests: pm: Test state lock with runtime
Add device pm state lock to device runtime test.

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2021-12-14 19:23:05 -05:00
Flavio Ceolin
28ca83f097 tests: pm: Test pm device state lock
Test pm device state lock API.

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2021-12-14 19:23:05 -05:00
Flavio Ceolin
18b932f10d pm: device_runtime: Return possible error on enable
Change the function pm_device_runtime_enable() to return 0 on
success or an error code in case of error.

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2021-12-14 19:23:05 -05:00
Flavio Ceolin
0a32eadd13 pm: Account device pm state lock
Do not execute pm operations on devices that the device pm state is
locked.

Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
2021-12-14 19:23:05 -05:00