aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2024-08-01include: Adjust Sscofpmf mhpmevent mask for upper 6 bitsHEADmasterEric Lin1-1/+1
Currently, OpenSBI reserves the upper 16 bits in mhpmevent for the Sscofpmf extension. However, according to the Sscofpmf extension specification [1], it only defines the upper 6 bits in mhpmevent for privilege mode inhibit and counter overflow disable. Other bits are defined by the platform for event selection. Since vendors might define raw event encoding exceeding 48 bits in mhpmevent, we should adjust the MHPMEVENT_SSCOF_MASK to support it. Link: https://github.com/riscv/riscv-isa-manual [1] Signed-off-by: Eric Lin <eric.lin@sifive.com> Reviewed-By: Xiang W <wxjstz@126.com> Reviewed-By: Anup Patel <anup@brainfault.org>
2024-07-24lib: sbi: Introduce an early console buffer for caching early printsAnup Patel2-1/+32
The console device is registered by platform only in early_init() callback so any prints before this point will be lost. Introduce an early console buffer for caching prints before platform early_init(). For crashes before platform early_init(), users can simply dump the contents of the console_early_buffer[] string using a debugger. The relative address of the console_early_buffer[] string can be found using following two commands: CONSOLE_EARLY_FIFO_ADDR=`${CROSS_COMPILE}objdump -D \ build/platform/generic/firmware/fw_dynamic.elf | \ grep "<console_early_fifo>:" | awk '{print $1}'` ${CROSS_COMPILE}objdump -R build/platform/generic/firmware/fw_dynamic.elf | \ grep $CONSOLE_EARLY_FIFO_ADDR | awk '{print $3}' Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-By: Himanshu Chauhan <hchauhan@ventanamicro.com>
2024-07-24include: sbi: Add macros to create FIFO as local or global variableAnup Patel1-0/+12
The FIFO data structure is quite handy of variety of use-case so add SBI_FIFO_INITIALIZER() and SBI_FIFO_DEFINE() helper macros to create FIFO as local or global variable. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-By: Himanshu Chauhan <hchauhan@ventanamicro.com>
2024-07-24lib: sbi: Allow forceful queueing of data in sbi_fifo_enqueue()Anup Patel4-31/+45
Extend sbi_fifo_enqueue() to allow forceful queueing by droping data from the tail. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-By: Himanshu Chauhan <hchauhan@ventanamicro.com>
2024-07-24lib: sbi: Optimize fifo enqueue/dequeue for basic data typesAnup Patel1-3/+40
Don't use sbi_memcpy() for basic data types in fifo enqueue/dequeue instead use direct type-cast and assignment. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-By: Himanshu Chauhan <hchauhan@ventanamicro.com>
2024-07-24lib: sbi: Remove sbi_console_init() and console_init() platform callbackAnup Patel4-34/+0
Now that all platforms have been updated to initialize serial console device in early_init(), the sbi_console_init() and console_init() platform callback are redundant hence remove them. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-By: Himanshu Chauhan <hchauhan@ventanamicro.com>
2024-07-24platform: Setup serial console device in early_init()Anup Patel6-78/+43
The sbi_console_init() does not do any special initialization so setup serial console device in early_init() so that console prints work as early as possible. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-By: Himanshu Chauhan <hchauhan@ventanamicro.com>
2024-07-24lib: sbi_hsm: Save/restore menvcfg only when it existsSamuel Holland1-4/+8
Attempting to access the menvcfg CSR raises an illegal instruction exception on hardware which implements Sm1p11 or older. Fixes: e9ee9678ba50 ("lib: sbi: fwft: add support for SBI_FWFT_PTE_AD_HW_UPDATING") Signed-off-by: Samuel Holland <samuel.holland@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-07-23lib: utils/fdt: Add support for parsing riscv,isa-extensionsConor Dooley1-4/+23
A new property has been added, with an extensive rationale at [1], that can be used in place of "riscv,isa" to indicate what extensions are supported by a given platform that is a list of strings rather than a single string. There are some differences between the new property, "riscv,isa-extensions" and the incumbent "riscv,isa" - chief among them for the sake of parsing being the list of strings, as opposed to a string. Another advantage is strictly defined meanings for each string in a dt-binding, rather than deriving meaning from RVI standards. This may likely to some divergence over time, but, at least for now, there's no relevant differences between the two for an M-Mode program. Add support for the new property in OpenSBI, prioritising it, before falling back to the, now deprecated, "riscv,isa" property if it is not present. Link: https://lore.kernel.org/all/20230702-eats-scorebook-c951f170d29f@spud/ [1] Signed-off-by: Conor Dooley <conor.dooley@microchip.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-07-23lib: tests: add math test suiteDongdong Zhang2-0/+49
This patch introduces a new math test suite to the SBI unit tests. The changes include: * Updating lib/sbi/tests/objects.mk to include math_test_suite and sbi_math_test.o. * Adding a new file lib/sbi/tests/sbi_math_test.c which contains tests for log2roundup function using various cases. The addition of this test suite ensures that mathematical functions are verified and work as expected. Signed-off-by: Dongdong Zhang <zhangdongdong@eswincomputing.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-07-23lib: tests: enhance test output with colored pass/fail messagesDongdong Zhang1-2/+9
This patch improves the readability of the SBI unit test output by adding color-coded status messages. Adding ANSI color codes for green (pass) and red (fail) in sbi_unit_test.c. Now, the test results will be displayed in green for passed tests and red for failed tests, making it easier to quickly distinguish between them. Signed-off-by: Dongdong Zhang <zhangdongdong@eswincomputing.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-07-04docs: writing tests: update cleaning instructionsIvan Orlov1-3/+1
After the changes introduced by the previous patches are applied, there is no need of the manual removal of the `build/` directory every time new test is added. Running `make clean` should be enough to regenerate the carray-related files. Update the documentation correspondingly. Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-07-04Makefile: remove any .carray.c during cleanBen Dooks1-0/+2
Now we've renamed the carray output files to .carray.c we can now use find to remove them. Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-07-04Makefile: change to using .carray.c for carray filesBen Dooks12-15/+15
We would like to clean any files generated by the carray scripts by just searching for the filename as the current make system turns f.carray into f.o. Change to make the make system turn f.carray into f.carray.o note, command to go through .mk files changing the .o in the .mk files is: find . -type f -name "*.carray" | xargs -t -I fname /bin/bash -x -c ' fn=`basename -s .carray fname`; echo "$fn"; sed -i `dirname fname `/objects.mk -e s/"$fn".o/"$fn".carray.o/g' Link: https://patchwork.ozlabs.org/project/opensbi/patch/20240401213438.590209-2-ivan.orlov0322@gmail.com/ Reported-by: Ivan Orlov <ivan.orlov0322@gmail.com> Suggested-by: Andrew Jones <ajones@ventanamicro.com> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-07-04scripts/carray.sh: Add comment to generated filesIvan Orlov1-0/+1
Add a comment about where auto-generated file came from to the carray.sh output. This should help avoiding confusion for the developers looking at the build artifacts and finding .c files there. Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-07-04lib: sbi_emulate_csr: Do not log illegal CSR accessesSamuel Holland1-9/+0
Illegal CSR accesses from lower privilege modes are delegated to S-mode and do not necessarily indicate a bug. Supervisor software may want to emulate some CSRs, or may intentionally disable access to certain existing CSRs, and thus will expect traps when those CSRs are accessed. For example, Linux disables sstatus.VS by default in order to detect when userspace first accesses vector register state; this includes the CSRs defined by the V extesion. As a result, if the first vector instruction in a process is a CSR access, OpenSBI will log the illegal instruction exception, even though there is no unexpected or erroneous behavior occurring. Since the illegal instruction exception is delegated to S-mode, S-mode software should be responsible for reporting the exception, not OpenSBI. Signed-off-by: Samuel Holland <samuel.holland@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-07-04.github: Add repo lockdown GitHub workflow and update .gitignoreDongdong Zhang2-0/+27
This commit adds a new GitHub Actions workflow for repository lockdown. The workflow triggers when a pull request is opened, and it notifies the contributor to use the OpenSBI mailing list for patch reviews. Additionally, the .gitignore file is updated to include the .github directory. Signed-off-by: Dongdong Zhang <zhangdongdong@eswincomputing.com> Reviewed-by: Anup Patel <anup@branifault.org>
2024-06-30include: Bump-up version to 1.5v1.5Anup Patel1-1/+1
This patch updates OpenSBI version to 1.5 as part of release preparation. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Signed-off-by: Anup Patel <anup@brainfault.org>
2024-06-28lib: sbi: check incoming dbtr shmem addressSergey Matyukevich1-6/+14
Current Debug Trigger SBI extension proposal suggests to activate shmem area and obtain its physical address from S-mode software in the following way: : If both `shmem_phys_lo` and `shmem_phys_hi` parameters are not : all-ones bitwise then `shmem_phys_lo` specifies the lower XLEN : bits and `shmem_phys_hi` specifies the upper XLEN bits of the : shared memory physical base address. The `shmem_phys_lo` MUST : be `(XLEN / 8)` byte aligned and the size of shared memory is : assumed to be `trig_max * (XLEN / 2)` bytes. For more details see the current version of the proposal: - https://lists.riscv.org/g/tech-debug/message/1302 On the other hand, on RV32, the M-mode can only access the first 4GB of the physical address space because M-mode does not have MMU to access full 34-bit physical address space. Similarly, on RV64, the M-mode can only access memory addressed by 64 bits. This commit checks shmem address in function sbi_dbtr_setup_shmem to make sure that shmem_phys_hi part of the valid address is zero. Besides, the macro DBTR_SHMEM_MAKE_PHYS is updated to take into account only low XLEN part. Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com> Reviewed-by: Himanshu Chauhan <hchauhan@ventanamicro.com>
2024-06-28docs: Fix wrong filenameJacob Lin1-1/+1
Correct the compiled FW_PAYLOAD firmware ELF filename. Signed-off-by: Jacob Lin <lovetaeyeon507@gmail.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-26lib: sbi: fwft: return SBI_EINVAL rather than SBI_ERR_INVALID_PARAMClément Léger1-1/+1
Error code returned by the ecall handles should use the defines from sbi_ecall_interface.h rather than sbi_error.h. Signed-off-by: Clément Léger <cleger@rivosinc.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-26lib: sbi: fwft: check feature value to be exactly 1 or 0Clément Léger1-4/+8
As stated by the spec and pointed out by Andrew Jones, the value passed for MISALIGNED_EXC_DELEG and PTE_AD_HW_UPDATING should be either 0 or 1. Add check for these values and return SBI_EINVAL if not. Signed-off-by: Clément Léger <cleger@rivosinc.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-19lib: sbi: implement SBI FWFT extensionClément Léger3-0/+56
The SBI FWFT extension defines a set of function that can be called to control the configuration of some platform features (misaligned trap delegation, etc). This patch implements sbi_fwft_set() and sbi_fwft_get() as defined in the specification [1]. Link: https://lists.riscv.org/g/tech-prs/message/924 [1] Signed-off-by: Clément Léger <cleger@rivosinc.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-19lib: sbi: fwft: add support for SBI_FWFT_PTE_AD_HW_UPDATINGClément Léger2-0/+59
Add support for SBI_FWFT_PTE_AD_HW_UPDATING based on SVADU presence. Signed-off-by: Clément Léger <cleger@rivosinc.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-19lib: sbi: fwft: add support for SBI_FWFT_MISALIGNED_EXC_DELEGClément Léger2-1/+41
Add support for SBI_FWFT_MISALIGNED_EXC_DELEG withing FWFT support. This support allows to delegate misaligned accesses traps. Signed-off-by: Clément Léger <cleger@rivosinc.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-19lib: sbi: add support for firmware features extensionClément Léger5-0/+240
This extension allows the software running in supervisor mode to control the behavior of various features of the SBI [1]. Implement the support for such extension. Link: https://lists.riscv.org/g/tech-prs/message/924 [1] Signed-off-by: Clément Léger <cleger@rivosinc.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-18lib: sbi: Add support for Svade and Svadu extensionsYong-Xuan Wang3-0/+17
Add support for Svade and Svadu extensions. When both are present in the device tree, the M-mode firmware should select the Svade extension to comply with the RVA23 profile, which mandates Svade and lists Svadu as an optional extension. Signed-off-by: Yong-Xuan Wang <yongxuan.wang@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-18platform: generic: andes: Add support for RV32 to set up PMABen Zong-You Xie1-1/+8
Like PMP, the behaviors to configure PMA will be different from RV64 and RV32. RV64 uses two Andes custom CSRs, pmacfg0 and pmacfg2, but RV32 uses four Andes custom CSRs, pmacfg0 ~ pmacfg3. This patch adds support to PMA for RV32. Signed-off-by: Ben Zong-You Xie <ben717@andestech.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-18platform: generic: andes: Refine Andes PMA related codeBen Zong-You Xie2-136/+81
This patch refines the Andes PMA related code. The main change is refactor andes_pma_[read|write]_cfg() and andes_pma_[read|write]_addr() into new functions andes_pma_[read|write]_num(). Also, fix some coding style problems. Signed-off-by: Ben Zong-You Xie <ben717@andestech.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-13lib: serial: fix RX path in litex-uartGabriel Somlo1-2/+8
When used to read characters from the terminal (e.g., when the SBI console is used via ecall from linux with `console=hvc0`), we must acknowledge receipt of each character to "pop" it off the LiteUART hardware queue, and allow the next character to be made available. Fixes: 52af6e4b ("lib: utils: Add LiteX UART support") Suggested-by: Dolu1990 <charles.papon.90@gmail.com> Signed-off-by: Gabriel Somlo <gsomlo@gmail.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-13lib: utils/reset: Try initializing all reset devices in dtXiang W1-5/+5
In DT, multiple reset devices may use the same driver, and they may have different priorities. If rc is returned after the first initialization, the highest priority device may be lost. Fixes: a73ff043e991 (lib: utils/reset: Fix fdt_reset to search for more dt nodes) Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-13sbi: sbi_domain_context: Fix trap context for domain context switchingYu Chien Peter Lin2-6/+5
Save/restore sbi_trap_context during domain context switching to ensure proper trap handling and isolation. This maintains correct domain-specific state, avoiding context corruption. Fixes: abea949721bc ("lib: sbi: Introduce trap context") Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com> Reviewed-by: Alvin Chang <alvinga@andestech.com> Tested-by: Alvin Chang <alvinga@andestech.com> Reviewed-by: Yong Li <yong.li@intel.com> Tested-by: Yong Li <yong.li@intel.com>
2024-06-13lib: utils/reset: Fix fdt_reset to search for more dt nodesXiang W1-13/+15
If there are multiple dt nodes, the previous code only tries to match the first one, which may lose initialization. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-13lib: utils/reset: Skip initialize reset when dt is not enabledXiang W1-0/+3
When the dt node has a status property and the value is not ok or okay, skip initializing reset. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-13lib: utils/serial: Fix fdt_serial to match more dt nodesXiang W1-13/+13
If there are multiple dt nodes, the previous code only tries to match the first one, which may lose initialization. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-13lib: utils/serial: Skip initialize serial when dt is not enabledXiang W1-0/+7
When the dt node has a status property and the value is not ok or okay, skip initializing serial. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-13lib: utils/irqchip: Skip initialize irqchip when dt is not enabledXiang W1-0/+3
When the dt node has a status property and the value is not ok or okay, skip initializing irqchip. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-13lib: utils/timer: Skip initialize timer when dt is not enabledXiang W1-0/+3
When the dt node has a status property and the value is not ok or okay, skip initializing timer. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-13lib: utils/ipi: Skip initialize ipi when dt is not enabledXiang W1-0/+3
When the dt node has a status property and the value is not ok or okay, skip initializing ipi. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-06-05lib: utils/fdt: Fix DT property for APLIC delegationAnup Patel1-1/+3
During Linux AIA driver review, the APLIC DT property for interrupt delegation was renamed to "riscv,delegation" so let's use the new DT property name and fallback to old DT property name if the new DT property name is not available. Fixes: 34612193af92 ("lib: utils/irqchip: Add FDT based driver for APLIC") Signed-off-by: Anup Patel <apatel@ventanamicro.com>
2024-05-23lib: utils/gpio: respect flag GPIO_FLAG_ACTIVE_LOWInochi Amaoto1-1/+13
"gpio-poweroff" and "gpio-restart" always set gpio to high to active the function, but some chips need a low signal to active. Fortunately, it can be achieved by setting GPIO_FLAG_ACTIVE_LOW for the gpio. Implement this flag support for the gpio library so the gpio reset can function well. Signed-off-by: Inochi Amaoto <inochiama@outlook.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-05-23lib: sbi: sse: handle missing writable attributesClément Léger1-19/+47
The spec states that a6, a7, flags and sepc are writable but the implementation was not allowing that. Add support for these 4 writable attributes. Signed-off-by: Clément Léger <cleger@rivosinc.com> Reviewed-by: Samuel Holland <samuel.holland@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-05-23lib: utils/irqchip: Add sanity checks in imsic_get_data() and ↵Cyan Yang1-0/+6
imsic_get_target_file() Add extra sanity checks to prevent the caller getting the invalid result from imsic_get_data() or imsic_get_target_file() when imsic is not initialized correctly. Signed-off-by: Cyan Yang <cyan.yang@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-05-23firmware: Bring back FW_TEXT_START as an optional parameterAnup Patel6-4/+16
Bring back FW_TEXT_START as an optional parameter to allow users explicitly specify compile time address for loading debug symbols. When not specified, the FW_TEXT_START is assumed to be 0. Fixes: d4d2582eef7a ("firmware: remove FW_TEXT_START") Signed-off-by: Anup Patel <apatel@ventanamicro.com> Tested-by: Clément Léger <cleger@rivosinc.com>
2024-05-16lib: utils/irqchip: Check before initializing imsicCheng Yang1-0/+8
The current mlevel imsic check is only for the platform, which may cause hart without imsic in the platform to trigger an illegal instruction exception when initializing imsic. For example, the platform contains a management hart that only supports wired interrupts. This patch will check if each hart supports Smaia extension before doing imsic initialization to avoid triggering illegal instruction exceptions. Signed-off-by: Cheng Yang <yangcheng.work@foxmail.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-05-16platform: generic: thead: add Sophgo CV18XX/SG200X seriesInochi Amaoto1-0/+8
The Sophgo CV18XX/SG200X series SoCs have a standard C906 core. Add support for it. Signed-off-by: Inochi Amaoto <inochiama@outlook.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-05-15lib: sbi: Put event after use in sbi_sse_exit() loopAnup Patel1-2/+7
Currently, the sbi_sse_exit() gets event in a loop but does not put it back after use. This results in global events remaining locked causing hangs on sub-sequent calls to sse_event_get() for global events. Fixes: c8cdf01d8f3a ("lib: sbi: Add support for Supervisor Software Events extension") Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Himanshu Chauhan <hchauhan@ventanamicro.com>
2024-05-15utils/reset: Add SG2042 hwmon MCU support.Inochi Amaoto4-0/+122
SG2042 uses an onboard MCU to provide reset function. Add reset driver to support this onboard MCU. Signed-off-by: Inochi Amaoto <inochiama@outlook.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-05-13lib: sbi: simplify inline function in sbi_dtbr.cXiang W1-46/+32
The inline function can simplify the code by setting some call restrictions. This ensures logical smoothness Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>
2024-05-13lib: sbi: fix return type of sbi_dbtr_shmem_disabledXiang W1-3/+3
Modify the return value of the sbi_dbtr_shmem_disabled function to bool to make the semantics clearer. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org>