9.1. RFENCE Extension (EID #0x52464E43 "RFNC")
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_addrandsizeare both 0, or -
sizeis equal to 2^XLEN-1.
9.1.1. Function: Remote FENCE.I (FID #0)
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
Table 8 below.
| Error code | Description |
|---|---|
SBI_SUCCESS |
IPI was sent to all the targeted harts successfully. |
SBI_ERR_INVALID_PARAM |
At least one hartid constructed from |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
9.1.2. Function: Remote SFENCE.VMA (FID #1)
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
Table 9 below.
| Error code | Description |
|---|---|
SBI_SUCCESS |
IPI was sent to all the targeted harts successfully. |
SBI_ERR_INVALID_ADDRESS |
|
SBI_ERR_INVALID_PARAM |
At least one hartid constructed from |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
9.1.3. Function: Remote SFENCE.VMA with ASID (FID #2)
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
Table 10 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. |
9.1.4. Function: Remote HFENCE.GVMA with VMID (FID #3)
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
Table 11 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. |
9.1.5. Function: Remote HFENCE.GVMA (FID #4)
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
Table 12 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 |
At least one hartid constructed from |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
9.1.6. Function: Remote HFENCE.VVMA with ASID (FID #5)
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
Table 13 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. |
9.1.7. Function: Remote HFENCE.VVMA (FID #6)
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
Table 14 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 |
At least one hartid constructed from |
SBI_ERR_FAILED |
The request failed for unspecified or unknown other reasons. |
9.1.8. Function Listing
| 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 |