This extension defines all remote fence related functions and replaces
the legacy extensions (EIDs #0x05 - #0x07). All the functions follow the
hart_mask
as defined in binary encoding section. Any function which
accepts a range of addresses (i.e. start_addr
and size
) must abide by
the below constraints on range parameters.
The remote fence operation applies to the entire address space if either:
-
start_addr
andsize
are both 0, or -
size
is equal to 2^XLEN-1.
struct sbiret sbi_remote_fence_i(unsigned long hart_mask,
unsigned long hart_mask_base)
Instructs remote harts to execute FENCE.I
instruction.
The possible error codes returned in sbiret.error
are shown in the
RFENCE Remote FENCE.I Errors below.
Error code | Description |
---|---|
SBI_SUCCESS |
IPI was sent to all the targeted harts successfully. |
SBI_ERR_INVALID_PARAM |
Either |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
struct sbiret sbi_remote_sfence_vma(unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size)
Instructs the remote harts to execute one or more SFENCE.VMA
instructions,
covering the range of virtual addresses between start_addr
and
start_addr + size
.
The possible error codes returned in sbiret.error
are shown in the
RFENCE Remote SFENCE.VMA Errors below.
Error code | Description |
---|---|
SBI_SUCCESS |
IPI was sent to all the targeted harts successfully. |
SBI_ERR_INVALID_ADDRESS |
|
SBI_ERR_INVALID_PARAM |
Either |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
struct sbiret sbi_remote_sfence_vma_asid(unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size,
unsigned long asid)
Instruct the remote harts to execute one or more SFENCE.VMA
instructions,
covering the range of virtual addresses between start_addr
and
start_addr + size
. This covers only the given ASID
.
The possible error codes returned in sbiret.error
are shown in the
RFENCE Remote SFENCE.VMA with ASID Errors below.
Error code | Description |
---|---|
SBI_SUCCESS |
IPI was sent to all the targeted harts successfully. |
SBI_ERR_INVALID_ADDRESS |
|
SBI_ERR_INVALID_PARAM |
Either |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
struct sbiret sbi_remote_hfence_gvma_vmid(unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size,
unsigned long vmid)
Instruct the remote harts to execute one or more HFENCE.GVMA
instructions,
covering the range of guest physical addresses between start_addr
and
start_addr + size
only for the given VMID
. This function call is only valid
for harts implementing hypervisor extension.
The possible error codes returned in sbiret.error
are shown in the
RFENCE Remote HFENCE.GVMA with VMID Errors below.
Error code | Description |
---|---|
SBI_SUCCESS |
IPI was sent to all the targeted harts successfully. |
SBI_ERR_NOT_SUPPORTED |
This function is not supported as it is not implemented or one of the target hart doesn’t support hypervisor extension. |
SBI_ERR_INVALID_ADDRESS |
|
SBI_ERR_INVALID_PARAM |
Either |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
struct sbiret sbi_remote_hfence_gvma(unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size)
Instruct the remote harts to execute one or more HFENCE.GVMA
instructions,
covering the range of guest physical addresses between start_addr
and
start_addr + size
for all the guests. This function call is only valid for
harts implementing hypervisor extension.
The possible error codes returned in sbiret.error
are shown in the
RFENCE Remote HFENCE.GVMA Errors below.
Error code | Description |
---|---|
SBI_SUCCESS |
IPI was sent to all the targeted harts successfully. |
SBI_ERR_NOT_SUPPORTED |
This function is not supported as it is not implemented or one of the target hart doesn’t support hypervisor extension. |
SBI_ERR_INVALID_ADDRESS |
|
SBI_ERR_INVALID_PARAM |
Either |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
struct sbiret sbi_remote_hfence_vvma_asid(unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size,
unsigned long asid)
Instruct the remote harts to execute one or more HFENCE.VVMA
instructions,
covering the range of guest virtual addresses between start_addr
and
start_addr + size
for the given ASID
and current VMID
(in hgatp
CSR) of
calling hart. This function call is only valid for harts implementing
hypervisor extension.
The possible error codes returned in sbiret.error
are shown in the
RFENCE Remote HFENCE.VVMA with ASID Errors below.
Error code | Description |
---|---|
SBI_SUCCESS |
IPI was sent to all the targeted harts successfully. |
SBI_ERR_NOT_SUPPORTED |
This function is not supported as it is not implemented or one of the target hart doesn’t support hypervisor extension. |
SBI_ERR_INVALID_ADDRESS |
|
SBI_ERR_INVALID_PARAM |
Either |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
struct sbiret sbi_remote_hfence_vvma(unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size)
Instruct the remote harts to execute one or more HFENCE.VVMA
instructions,
covering the range of guest virtual addresses between start_addr
and
start_addr + size
for current VMID
(in hgatp
CSR) of calling hart. This
function call is only valid for harts implementing hypervisor extension.
The possible error codes returned in sbiret.error
are shown in the
RFENCE Remote HFENCE.VVMA Errors below.
Error code | Description |
---|---|
SBI_SUCCESS |
IPI was sent to all the targeted harts successfully. |
SBI_ERR_NOT_SUPPORTED |
This function is not supported as it is not implemented or one of the target hart doesn’t support hypervisor extension. |
SBI_ERR_INVALID_ADDRESS |
|
SBI_ERR_INVALID_PARAM |
Either |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
Function Name | SBI Version | FID | EID |
---|---|---|---|
sbi_remote_fence_i |
0.2 |
0 |
0x52464E43 |
sbi_remote_sfence_vma |
0.2 |
1 |
0x52464E43 |
sbi_remote_sfence_vma_asid |
0.2 |
2 |
0x52464E43 |
sbi_remote_hfence_gvma_vmid |
0.2 |
3 |
0x52464E43 |
sbi_remote_hfence_gvma |
0.2 |
4 |
0x52464E43 |
sbi_remote_hfence_vvma_asid |
0.2 |
5 |
0x52464E43 |
sbi_remote_hfence_vvma |
0.2 |
6 |
0x52464E43 |