#
e9fa3991 |
| 21-Nov-2024 |
Mitchell Horne <mhorne@FreeBSD.org> |
riscv: T-HEAD early locore workaround
The T-HEAD custom PTE bits are defined in such a way that the default/normal memory type is non-zero value. This _unthoughtful_ choice means that, unlike the Sv
riscv: T-HEAD early locore workaround
The T-HEAD custom PTE bits are defined in such a way that the default/normal memory type is non-zero value. This _unthoughtful_ choice means that, unlike the Svpbmt and non-Svpbmt cases, this field cannot be left bare in our bootstrap PTEs, or the hardware will fail to proceed far enough in boot (cache strangeness). On the other hand, we cannot unconditionally apply the PTE_THEAD_MA_NONE attributes, as this is not compatible with spec-compliant RISC-V hardware, and will result in a fatal exception.
Therefore, in order to handle this errata, we are forced to perform a check of the CPU type at the first moment possible. Do so, and fix up the PTEs with the correct memory attribute bits in the T-HEAD case.
Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D47458
show more ...
|
#
d3916eac |
| 31-Oct-2024 |
Ruslan Bukin <br@FreeBSD.org> |
riscv/vmm: Initial import.
Add kernel code for 'H' — Hypervisor Extension[1] to support virtualization on RISC-V ISA.
This comes with a separate userspace patch allowing us to boot unmodified freeb
riscv/vmm: Initial import.
Add kernel code for 'H' — Hypervisor Extension[1] to support virtualization on RISC-V ISA.
This comes with a separate userspace patch allowing us to boot unmodified freebsd/riscv guest. Other operating systems are untested.
This also comes with a U-Boot port that is configured to run in bhyve guest environment — in RISC-V virtual supervisor mode. The vmm SBI code emulates RISC-V machine-mode for the guest, handling SBI calls partly in vmm kernel and partly in bhyve userspace.
Developed in Spike simulator during short period of time, the support is considered experimental. The first real hardware with hypervisor spec included should have just reached the market, so this was tested in Spike and QEMU only. Note that this depends on Sstc extension presence in the hardware (both Spike and QEMU have it).
Note that booting multiple guests at the same time is not tested and may require additional work. Some TODOs are indicated within the code, and some listed in the project's home page[2].
Many thanks to Jessica Clarke, Mitchell Horne and Mark Johnston for help with parts, test and review.
1. https://riscv.org/technical/specifications/ 2. https://wiki.freebsd.org/riscv/bhyve
Sponsored by: UK Research and Innovation Differential Revision: https://reviews.freebsd.org/D45553
show more ...
|
Revision tags: release/13.4.0, release/14.1.0, release/13.3.0, release/14.0.0 |
|
#
95ee2897 |
| 16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: two-line .h pattern
Remove /^\s*\*\n \*\s+\$FreeBSD\$$\n/
|
#
7245ffd1 |
| 23-May-2023 |
Mitchell Horne <mhorne@FreeBSD.org> |
riscv: MMU detection
Detect and report the supported MMU for each CPU. Export the capabilities to the rest of the kernel and use it in pmap_bootstrap() to check for Sv48 support.
Reviewed by: markj
riscv: MMU detection
Detect and report the supported MMU for each CPU. Export the capabilities to the rest of the kernel and use it in pmap_bootstrap() to check for Sv48 support.
Reviewed by: markj MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39814
show more ...
|
#
b37dc090 |
| 23-May-2023 |
Mitchell Horne <mhorne@FreeBSD.org> |
riscv: Rework CPU identification (second part)
Modify when and how we perform parsing and reporting. Most notably, everything now executes on CPU 0.
The de-facto standard way to enumerate CPU featu
riscv: Rework CPU identification (second part)
Modify when and how we perform parsing and reporting. Most notably, everything now executes on CPU 0.
The de-facto standard way to enumerate CPU features (ISA extensions) on RISC-V is by parsing each CPU's ISA string. We currently obtain this information from the device tree, and in the future will be able to pull it from ACPI tables.
Eliminate the SYSINIT from identcpu.c. We still need to walk the /cpus list in the device tree, but now do this one CPU at a time, as a step in the identify_cpu() procedure. This is slightly less error prone, and allows us to parse ISA features for CPU 0 much earlier.
Make use of the SMP hooks cpu_mp_start() and cpu_mp_announce() to identify and print secondary CPU info, respectively. This causes secondary processor identification to be printed much earlier in boot; everything is done by SI_SUB_CPU, SI_ORDER_THIRD. Adjust some other printf() calls so that we get enough useful info to debug under bootverbose.
Reviewed by: markj (slightly earlier version) MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39811
show more ...
|
#
b0d45b02 |
| 23-May-2023 |
Mitchell Horne <mhorne@FreeBSD.org> |
riscv: Call identify_cpu() earlier for CPU 0
It is advantageous to have knowledge of ISA features as early as possible. For example, the presence of newer virtual memory extensions may be useful to
riscv: Call identify_cpu() earlier for CPU 0
It is advantageous to have knowledge of ISA features as early as possible. For example, the presence of newer virtual memory extensions may be useful to pmap_bootstrap().
To achieve this, split out the printf() parts of identify_cpu() into a separate function, printcpuinfo(). This latter function will be called later in boot after the console has been initialized.
Reviewed by: markj MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39810
show more ...
|
#
88b4d124 |
| 23-May-2023 |
Mitchell Horne <mhorne@FreeBSD.org> |
riscv: Rework CPU identification (first part)
Make better use of the RISC-V identification CSRs: mvendorid, marchid, and mimpid. This code was written before these registers were well-specified, or
riscv: Rework CPU identification (first part)
Make better use of the RISC-V identification CSRs: mvendorid, marchid, and mimpid. This code was written before these registers were well-specified, or even available to the kernel. It currently fails to recognize any CPU or platform.
Per the privileged specification, mvendorid contains the JEDEC vendor ID, or zero.
The marchid register denotes the CPU microarchitecture. This is either one of the globally allocated open-source implementation IDs, or the field has a custom encoding. Therefore, for known vendors (SiFive) we can also maintain a list of known marchid values. If we can not give a name to the CPU but marchid is non-zero, then just print its value in the report.
The mimpid (implementation ID) could be used in the future to more uniquely identify the micro-architecture, but it really remains to be seen how it gets used. For now we just print its value.
Thank you to Danjel Qyteza <danq1222@gmail.com> who submitted an early version of this change to me, although it has been almost entirely rewritten.
MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39809
show more ...
|
Revision tags: release/13.2.0, release/12.4.0, release/13.1.0 |
|
#
254e4e5b |
| 28-Dec-2021 |
John Baldwin <jhb@FreeBSD.org> |
Simplify swi for bus_dma.
When a DMA request using bounce pages completes, a swi is triggered to schedule pending DMA requests using the just-freed bounce pages. For a long time this bus_dma swi ha
Simplify swi for bus_dma.
When a DMA request using bounce pages completes, a swi is triggered to schedule pending DMA requests using the just-freed bounce pages. For a long time this bus_dma swi has been tied to a "virtual memory" swi (swi_vm). However, all of the swi_vm implementations are the same and consist of checking a flag (busdma_swi_pending) which is always true and if set calling busdma_swi. I suspect this dates back to the pre-SMPng days and that the intention was for swi_vm to serve as a mux. However, in the current scheme there's no need for the mux.
Instead, remove swi_vm and vm_ih. Each bus_dma implementation that uses bounce pages is responsible for creating its own swi (busdma_ih) which it now schedules directly. This swi invokes busdma_swi directly removing the need for busdma_swi_pending.
One consequence is that the swi now works on RISC-V which had previously failed to invoke busdma_swi from swi_vm.
Reviewed by: imp, kib Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D33447
show more ...
|
Revision tags: release/12.3.0 |
|
#
01771021 |
| 01-Oct-2021 |
John Baldwin <jhb@FreeBSD.org> |
arm64, riscv: Fix TRAF_PC() to return the PC, not the return address.
Reviewed by: mhorne Obtained from: CheriBSD Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D31969
|
Revision tags: release/13.0.0, release/12.2.0, release/11.4.0, release/12.1.0, release/11.3.0, release/12.0.0 |
|
#
6149ed01 |
| 14-Nov-2018 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r340368 through r340426.
|
#
6f8ba916 |
| 13-Nov-2018 |
Mark Johnston <markj@FreeBSD.org> |
RISC-V: Implement get_cyclecount(9).
Add the missing implementation for get_cyclecount(9) on RISC-V by reading the cycle CSR.
Submitted by: Mitchell Horne <mhorne063@gmail.com> Reviewed by: jhb MFC
RISC-V: Implement get_cyclecount(9).
Add the missing implementation for get_cyclecount(9) on RISC-V by reading the cycle CSR.
Submitted by: Mitchell Horne <mhorne063@gmail.com> Reviewed by: jhb MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D17953
show more ...
|
#
c06e7b66 |
| 07-Nov-2018 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r340126 through r340212.
|
#
4cbbb748 |
| 05-Nov-2018 |
John Baldwin <jhb@FreeBSD.org> |
Add a KPI for the delay while spinning on a spin lock.
Replace a call to DELAY(1) with a new cpu_lock_delay() KPI. Currently cpu_lock_delay() is defined to DELAY(1) on all platforms. However, plat
Add a KPI for the delay while spinning on a spin lock.
Replace a call to DELAY(1) with a new cpu_lock_delay() KPI. Currently cpu_lock_delay() is defined to DELAY(1) on all platforms. However, platforms with a DELAY() implementation that uses spin locks should implement a custom cpu_lock_delay() doesn't use locks.
Reviewed by: kib MFC after: 3 days
show more ...
|
#
14b841d4 |
| 11-Aug-2018 |
Kyle Evans <kevans@FreeBSD.org> |
MFH @ r337607, in preparation for boarding
|
#
b51092c7 |
| 27-Jul-2018 |
Ruslan Bukin <br@FreeBSD.org> |
Use SPP (Supervisor Previous Privilege) bit in the sstatus register to determine if trap is from userspace.
Otherwise if we jump to kernel address from userspace, then TRAPF_USERMODE failed to detec
Use SPP (Supervisor Previous Privilege) bit in the sstatus register to determine if trap is from userspace.
Otherwise if we jump to kernel address from userspace, then TRAPF_USERMODE failed to detect usermode and then do_ast triggers a panic "ast in kernel mode".
Reviewed by: markj@ Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D16469
show more ...
|
Revision tags: release/11.2.0, release/10.4.0, release/11.1.0, release/11.0.1, release/11.0.0 |
|
#
27067774 |
| 16-Aug-2016 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r303250 through r304235.
|
#
98f50c44 |
| 02-Aug-2016 |
Ruslan Bukin <br@FreeBSD.org> |
Update RISC-V port to Privileged Architecture Version 1.9.
Sponsored by: DARPA, AFRL Sponsored by: HEIF5
|
Revision tags: release/10.3.0 |
|
#
b626f5a7 |
| 04-Jan-2016 |
Glen Barber <gjb@FreeBSD.org> |
MFH r289384-r293170
Sponsored by: The FreeBSD Foundation
|
#
9a7cd2e6 |
| 22-Dec-2015 |
Bjoern A. Zeeb <bz@FreeBSD.org> |
MFH @r292599
This includes the pluggable TCP framework and other chnages to the netstack to track for VNET stability.
Security: The FreeBSD Foundation
|
#
8d7e7a98 |
| 17-Dec-2015 |
Ruslan Bukin <br@FreeBSD.org> |
Import RISC-V machine headers. This is a minimal set required to compile kernel and userland.
Reviewed by: andrew, imp, kib Sponsored by: DARPA, AFRL Sponsored by: HEIF5 Differential Revision: https
Import RISC-V machine headers. This is a minimal set required to compile kernel and userland.
Reviewed by: andrew, imp, kib Sponsored by: DARPA, AFRL Sponsored by: HEIF5 Differential Revision: https://reviews.freebsd.org/D4554
show more ...
|