Skip to content

Latest commit

 

History

History
272 lines (233 loc) · 11.7 KB

ext-rfence.adoc

File metadata and controls

272 lines (233 loc) · 11.7 KB

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_addr and size are both 0, or

  • size is equal to 2^XLEN-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 RFENCE Remote FENCE.I Errors below.

Table 1. RFENCE Remote FENCE.I Errors
Error code Description

SBI_SUCCESS

IPI was sent to all the targeted harts successfully.

SBI_ERR_INVALID_PARAM

Either hart_mask_base or at least one hartid from hart_mask is not valid, i.e., either the hartid is not enabled by the platform or is not available to the supervisor.

SBI_ERR_FAILED

The request failed for unspecified or unknown other reasons.

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 RFENCE Remote SFENCE.VMA Errors below.

Table 2. RFENCE Remote SFENCE.VMA Errors
Error code Description

SBI_SUCCESS

IPI was sent to all the targeted harts successfully.

SBI_ERR_INVALID_ADDRESS

start_addr or size is not valid.

SBI_ERR_INVALID_PARAM

Either hart_mask_base or at least one hartid from hart_mask is not valid, i.e., either the hartid is not enabled by the platform or is not available to the supervisor.

SBI_ERR_FAILED

The request failed for unspecified or unknown other reasons.

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 RFENCE Remote SFENCE.VMA with ASID Errors below.

Table 3. RFENCE Remote SFENCE.VMA with ASID Errors
Error code Description

SBI_SUCCESS

IPI was sent to all the targeted harts successfully.

SBI_ERR_INVALID_ADDRESS

start_addr or size is not valid.

SBI_ERR_INVALID_PARAM

Either asid, hart_mask_base, or at least one hartid from hart_mask is not valid, i.e., either the hartid is not enabled by the platform or is not available to the supervisor.

SBI_ERR_FAILED

The request failed for unspecified or unknown other reasons.

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 RFENCE Remote HFENCE.GVMA with VMID Errors below.

Table 4. RFENCE Remote HFENCE.GVMA with VMID Errors
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

start_addr or size is not valid.

SBI_ERR_INVALID_PARAM

Either vmid, hart_mask_base, or at least one hartid from hart_mask is not valid, i.e., either the hartid is not enabled by the platform or is not available to the supervisor.

SBI_ERR_FAILED

The request failed for unspecified or unknown other reasons.

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 RFENCE Remote HFENCE.GVMA Errors below.

Table 5. RFENCE Remote HFENCE.GVMA Errors
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

start_addr or size is not valid.

SBI_ERR_INVALID_PARAM

Either hart_mask_base or at least one hartid from hart_mask is not valid, i.e., either the hartid is not enabled by the platform or is not available to the supervisor.

SBI_ERR_FAILED

The request failed for unspecified or unknown other reasons.

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 RFENCE Remote HFENCE.VVMA with ASID Errors below.

Table 6. RFENCE Remote HFENCE.VVMA with ASID Errors
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

start_addr or size is not valid.

SBI_ERR_INVALID_PARAM

Either asid, hart_mask_base, or at least one hartid from hart_mask is not valid, i.e., either the hartid is not enabled by the platform or is not available to the supervisor.

SBI_ERR_FAILED

The request failed for unspecified or unknown other reasons.

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 RFENCE Remote HFENCE.VVMA Errors below.

Table 7. RFENCE Remote HFENCE.VVMA Errors
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

start_addr or size is not valid.

SBI_ERR_INVALID_PARAM

Either hart_mask_base or at least one hartid from hart_mask is not valid, i.e., either the hartid is not enabled by the platform or is not available to the supervisor.

SBI_ERR_FAILED

The request failed for unspecified or unknown other reasons.

Function Listing

Table 8. RFENCE Function List
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