Organización de la estructura del conocimiento OpenSBI

Referencias

Introducción al OSE

SBIEs decir , agrega una capa intermedia a la RISC-V Supervisor Binary Interfacearquitectura original al abstraer la funcionalidad específica de la plataforma , lo que permite que la aplicación sea portátil en todas las implementaciones.s-u modehs modes-moderisc-v

qemuInstalado por defecto en nuevas versiones.opensbi

$ qemu-system-riscv64 \
  --machine virt \
  --nographic \
  --bios default

OpenSBI v0.4 (Jul  2 2023 11:53:53)
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name          : QEMU Virt Machine
Platform HART Features : RV64ACDFIMSU
Platform Max HARTs     : 8
Current Hart           : 0
Firmware Base          : 0x80000000
Firmware Size          : 112 KB
Runtime SBI Version    : 0.1

PMP0: 0x0000000080000000-0x000000008001ffff (A)
PMP1: 0x0000000000000000-0xffffffffffffffff (A,R,W,X)

Convención de llamada

SBISiga las siguientes especificaciones de convención de llamadas:

  • ecallinstrucción como instrucción de transferencia de control de HS-ModeaSEE
  • a7DefinidoSBI extension ID(EID)
  • a6DefinidoSBI function ID (FID)
  • Cuando se llama, el destinatario debe conservar todos los valores de registro a0exceptoa1
  • La función devuelve: una estructura con a0suma como estructura, donde está el código de errora1a0
    struct sbiret {
    
    
        long error;
        long value;
    };

SBICódigo de error de retorno estándar

Tipo de error Valor
OSE_ÉXITO 0
SBI_ERR_FAILED -1
SBI_ERR_NOT_SUPPORTED -2
SBI_ERR_INVALID_PARAM -3
SBI_ERR_DENIED -4
SBI_ERR_INVALID_ADDRESS -5
SBI_ERR_ALREADY_AVAILABLE -6
SBI_ERR_ALREADY_STARTED -7
SBI_ERR_ALREADY_STOPPED -8

Parámetro de lista HART

hart¿Qué es? Generalmente denominado mecanismo que gestiona RISC-Vel procesador, lo que en riscvel modelo se denominará riscv, corey harten ocasiones también denominado hardware thread, hilos de hardware.

Hart State Management Extension (EID #0x48534D “HSM”)visible desde

Si SBIuna función necesita pasar una lista al modo de privilegios más altos, debe usar una máscara hartdefinida de la siguiente manerahart

  • unsigned long hart_maskes un hartidsescalar que contiene
  • unsigned long hart_mask_base: es el inicio del vector de bits que debe calcularsehartid

El número máximo de corazones que se pueden configurar en una sola SBIllamada de función es siempreXLEN

hart_mask_baseSe puede establecer en -1, lo que significa que se puede ignorar hart_masky todo está disponible.hart


RISC-VLos registros de nivel de privilegio mencionados aquí

Primero, veamos el registro general: RV32Ies uno de los conjuntos de instrucciones de números enteros, que admite 32 registros enteros generales. Cada registro tiene 32 bits, representados por, x0~x31donde x0el registro está reservado como una constante 0. En lenguaje ensamblador, en general grupo de registros Cada registro de

Registro Nombre ABI Descripción
x0 cero Cero cableado
x1 real academia de bellas artes Dirección del remitente
x2 sp puntero de pila
x3 GP puntero global
x4 tp puntero de hilo
x5-7 t0-2 Temporales
x8 s0/fp Registro guardado/puntero de fotograma
x9 s1 Registro guardado
x10-11 a0-1 Argumentos de función/valores de retorno
x12-17 a2-7 Argumentos de función
x18-27 T2-11 Registro guardado
x28-31 t3-6 Temporales

Además de los registros generales, RISC-Vtambién se definen una serie de registros de estado de control de niveles de privilegios para cada nivel de privilegios.

  • misa: Indica las extensiones de arquitectura admitidas por hart, incluidas extensiones de números enteros, multiplicación y división, atómicas, de punto flotante, de punto flotante de doble precisión y de instrucciones comprimidas, etc.
  • mhartid: El código que se está ejecutando actualmente.hartid
  • medeleg: De forma predeterminada, todas las excepciones se Mmanejan en modo. Cuando se establece el medelegbit correspondiente, la excepción es manejada directamente por Sel modo o Umodo
  • mideleg: De forma predeterminada, todas las interrupciones se Mmanejan en modo. Cuando se establece el bit correspondiente mideleg, esta interrupción es manejada directamente por Sel modo o Umodo
  • mtime:Almacenar el valor de conteo del reloj actual
  • mtimecmp: Comparador de conteo de relojes. mtimeCuando el valor en el registro actual es mayor que mtimecmpel valor en, se activa una interrupción del reloj
  • mstatus: Indica el estado actual de control del procesador, incluido el bit de habilitación de interrupción global. Nivel de privilegio de memoria, bits de control de orden de bytes, etc.
  • mtvec: guarde trapla dirección a la que el procesador debe saltar cuando esto ocurra
  • mip: Indica el tipo de interrupción que se está procesando. EIPRepresenta una interrupción externa, TIPrepresenta una interrupción del reloj y SIPrepresenta una interrupción del software. Cuando el bit de interrupción correspondiente es 1, indica que hay una interrupción de este tipo para procesar.
  • mie: Indica los tipos de interrupción actualmente habilitados e ignorados por el procesador. EIPRepresenta una interrupción externa, TIPrepresenta una interrupción del reloj y SIPrepresenta una interrupción del software. Cuando el bit de interrupción correspondiente se establece en 1, indica que el procesador puede responder a este tipo de interrupción.
  • mscratch: Guarda hartun puntero al contexto actual.
  • mepc: Guarde la instrucción que provocó la excepción.
  • mtval: Guarda trapinformación adicional: la dirección del error en la dirección de excepción, la instrucción misma donde ocurrió la excepción de instrucción ilegal y para otras trap, su valor es 0
  • mcause: Indica trapel tipo de ocurrencia. Cuando el bit más alto es 1, el campo de orden inferior indica el tipo de interrupción; cuando el bit más alto es 0, el campo de orden inferior indica el tipo de excepción o llamada al sistema.

opensbiEs Muna implementación del patrón. Cada uno harttiene su propio estado de contexto. El puntero del estado de contexto se almacena en mscratchel registro. opensbiPrimero, el espacio de la pila se asigna de acuerdo con el número de harts definidos por la plataforma y el tamaño del hart stack, y luego hartse inicializasbi scratch la estructura para cada uno de ellos, incluyendo la dirección del firmware en la memoria, la dirección de entrada del código que se ejecutará en la siguiente fase de inicio, los parámetros, el nivel de privilegio y otra información, y se asigna sbi scratchel dirección mscratchal registro

Modo de ejecución

RISC-V Se definen tres modos de privilegios.

  • Machine Mode: El modo máquina, denominado M modo, corresponde al nivel de privilegio 3. Este es el modo de mayor privilegio que se puede ejecutar RISC-V enhart
  • Supervisor Mode: Modo supervisor, denominado Smodo, correspondiente al nivel de privilegio 1
  • User Mode: Modo de usuario, denominado Umodo, correspondiente al nivel de privilegio 0

Además, se define un nivel de privilegio reservado 2 y el modo se expandirá al modo Hen la extensión S HS

Generalmente hay tres combinaciones:

  • M Mode: Generalmente sistemas integrados simples
  • M Mode + U Mode: Este sistema puede distinguir entre los modos de usuario y máquina para lograr la protección de recursos.
  • M Mode + U Mode + U Mode: Este sistema puede implementar un sistema operativo tipo Unix

Extensión del OSE

Extensión de base (EID #0x10)

Base ExtensionLas secciones están diseñadas para ser lo más pequeñas posible. Por lo tanto, solo contiene la funcionalidad de detectar qué SBIextensiones están disponibles y consultar SBIla versión.

Todas SBIlas implementaciones deben admitir todas las funciones de la extensión base, por lo que no se definen retornos de error.

Get SBI specification version (FID #0): Devuelve la SBIversión de especificación actual

struct sbiret sbi_get_spec_version(void);

Get SBI implementation ID (FID #1): Devuelve la SBIimplementación actual ID, cada SBIimplementación IDes diferente

struct sbiret sbi_get_impl_id(void);

Get SBI implementation version (FID #2): Devuelve la SBIversión de implementación actual

struct sbiret sbi_get_impl_version(void);

Probe SBI extension (FID #3): Devuelve 0 si la SBIextensión dada no está disponible, o 1 si está disponible, a menos que la implementación defina que sea cualquier otro valor distinto de ceroID (EID)

struct sbiret sbi_probe_extension(long extension_id);

Get machine vendor ID (FID #4): Devuelve un mvendorid CSRvalor legal, 0 es siempre CSRun valor legal de esto

struct sbiret sbi_get_mvendorid(void);

Get machine architecture ID (FID #5): Devuelve un marchid CSRvalor legal, y 0 es siempre CSRun valor legal para esto

struct sbiret sbi_get_marchid(void);

Get machine implementation ID (FID #6): Devuelve un mimpid CSRvalor legal, y 0 es siempre CSRun valor legal para esto

struct sbiret sbi_get_mimpid(void);

Extensiones heredadas (EID #0x00 - #0x0F)

Legacy Extensionusado diferenteCall Convention

  • a6SBILos campos de función en los registros IDse ignoran porque están codificados como múltiples SBIextensionesID
  • a1No devolver nada en el registro
  • En SBIuna llamada, el destinatario debe conservar a0todos los registros excepto
  • a0El valor devuelto en el registro es específico SBI Legacy Extensionsde

SBI Legacy ExtensionsEn desuso en favor de otras extensiones que se enumeran a continuación

Extension: Set Timer (EID #0x00):

long sbi_set_timer(uint64_t stime_value)

Extension: Console Putchar (EID #0x01): chEscribe los datos que aparecen en la consola de depuración.

long sbi_console_putchar(int ch)

Extension: Console Getchar (EID #0x02): Lee un byte desde la consola de depuración

long sbi_console_getchar(void)

Extension: Clear IPI (EID #0x03):

Extension: Send IPI (EID #0x04): Envía una interrupción entre procesadores a hart_masktodos los definidos en . hartLas interrupciones entre procesadores aparecen en el extremo receptor como interrupciones de software administrado.

long sbi_send_ipi(const unsigned long *hart_mask)

Extension: Remote FENCE.I (EID #0x05): Indica hartla ejecución remota FENCE.Ide instrucciones.

long sbi_remote_fence_i(const unsigned long *hart_mask)

Extension: Remote SFENCE.VMA (EID #0x06): Indica la ejecución remota hartde una o más SFENCE.VMAinstrucciones que cubren el rango de direcciones virtuales entre la dirección de inicio y el tamaño.

long sbi_remote_sfence_vma(const unsigned long *hart_mask,
                           unsigned long start,
                           unsigned long size)

Extension: Remote SFENCE.VMA with ASID (EID #0x07): Indica al corazón remoto que ejecute una o más SFENCE.VMAinstrucciones que cubran el rango de direcciones virtuales entre la dirección inicial y el tamaño. Esto solo incluye lo dadoASID

long sbi_remote_sfence_vma_asid(const unsigned long *hart_mask,
                                unsigned long start,
                                unsigned long size,
                                unsigned long asid)

Extension: System Shutdown (EID #0x08): Ponga todos los dispositivos en estado de apagado desde la perspectiva del administrador

void sbi_shutdown(void)

Extensión del temporizador (EID #0x54494D45 “TIEMPO”)

Esto reemplazará el legado, legacy timer extension (EID #0x00)es decir.Extension: Set Timer (EID #0x00)

Function: Set Timer (FID #0):

struct sbiret sbi_set_timer(uint64_t stime_value)

Extensión IPI (EID #0x735049 “sPI: IPI en modo s”)

Esto Extensionreemplazó legacy extension (EID #0x04)

Extensión RFENCE (EID #0x52464E43 “RFNC”)

Esto Extensionreemplazólegacy extensions (EIDs #0x05 - #0x07)

Extensión de administración de Hart State (EID #0x48534D “HSM”)

Hart State Management(HSM)La extensión introduce un conjunto Hart Statey un conjunto de Hart Statefunciones que permiten que el software del modo de gestión solicite cambios.

El estado Hart que se muestra a continuación HSMdescribe todos los estados posibles y el estado HSMúnico de cada estado.HSMid

identificación estatal Nombre del Estado Descripción
0 COMENZÓ Hart está físicamente iniciado y funcionando normalmente.
1 INTERRUMPIDO hart no se ejecuta en modo S ni en ningún modo con privilegios inferiores. Si la plataforma tiene un mecanismo para cerrar hart, esto puede deberse a que fue cerrada por una instancia de SBI.
2 START_PENDING Otros Harts requieren continuar o iniciar este Hart desde el estado DETENIDO, y la instancia de SBI está intentando que este Hart entre en el estado INICIADO.
3 DETENER_PENDING El corazón solicitó ser detenido o apagado desde el estado INICIADO y la instancia de SBI está intentando poner el corazón en el estado DETENIDO.
4 SUSPENDIDO El corazón está en un estado de suspensión (o de bajo consumo) específico de la plataforma
5 SUSPENDER_PENDING El corazón solicita pasar del estado INICIADO a un estado de bajo consumo de energía específico de la plataforma, y ​​la instancia de SBI está tratando de llevarlo al estado SUSPENDIDO específico de la plataforma.
6 RESUME_PENDING Una interrupción o un evento de hardware específico de la plataforma provocó que el corazón pasara del estado SUSPENDIDO a la ejecución normal, y la instancia de SBI está intentando hacer la transición del corazón al estado INICIADO.

El estado en cualquier momento hart sólo puede ser uno de los de la tabla anterior.

Function: HART start (FID #0): Ejecute el modo especificado start_addr y guárdelo en el registro cuando comience la ejecución . donde es un valor de bit, que se refiere al número de dígitos de la máquinaShartid hartopaquea1opaque XLENXLEN

struct sbiret sbi_hart_start(unsigned long hartid,
                             unsigned long start_addr,
                             unsigned long opaque)

Function: HART stop (FID #1): Solicita SBIa la implementación que deje de ejecutar llamadas en modo de supervisión harty devuelva la propiedad de las mismas a SBIla implementación.

struct sbiret sbi_hart_stop(void)

Function: HART get status (FID #2): Devuelve el estado del hartid especificado hart

struct sbiret sbi_hart_get_status(unsigned long hartid)

Function: HART suspend (FID #3): Requiere que SBI la implementación coloque a la persona que llama de esta función hart en suspend_type el estado de suspensión (o de bajo consumo) específico de la plataforma especificada. resume_addr Es la dirección que regresa al modo para continuar la ejecución hart después de que se completa la suspensión . Es un valor de bit que se utilizará cuando se complete la suspensión se colocará en el registroSopaqueXLEN hart a1

struct sbiret sbi_hart_suspend(uint32_t suspend_type,
                               unsigned long resume_addr,
                               unsigned long opaque)

Extensión de reinicio del sistema (EID #0x53525354 “SRST”)

La extensión System Reset proporciona una funcionalidad que permite que el software de administración solicite un reinicio o apagado a nivel del sistema.

Function: System reset (FID #0)reset_type: Reinicie reset_reasonel sistema según las instrucciones proporcionadas.

struct sbiret sbi_system_reset(uint32_t reset_type, uint32_t reset_reason)

Extensión de la Unidad de Monitoreo del Rendimiento (EID #0x504D55 “PMU”)

RISC-V硬Los contadores de rendimiento del software, como mcycle、minstrety mhpmcounterX csr, se pueden utilizar en modo administrativo cycle、instrety hpmcounterX csrse puede acceder a ellos como de solo lectura.

SBILa extensión Performance Monitoring Unit ( PMU PMU) es una interfaz para configurar y utilizar contadores de rendimiento de hardware con la ayuda desupervisor-mode在machine-modehypervisor-modeRISC-V

SBI PMUExtensiones proporcionadas

  • El software del modo de gestión se utiliza para descubrir y configurar hartla interfaz para cada contador de hardware/firmware.
  • perfUna interfaz compatible típica

Extensión de la consola de depuración (EID n.º 0x4442434E “DBCN”)

La extensión de la consola de depuración define un mecanismo común para la impresión temprana al depurar y arrancar desde software en modo de administración.

Esta extensión reemplaza the legacy console putchar (EID #0x01)yconsole getchar (EID #0x02) extensions

La extensión de la consola de depuración permite que el software del modo de administración SBIescriba o lea varios bytes en una sola llamada

Function: Console Write (FID #0):Escribir bytes desde la memoria de entrada a la consola de depuración

struct sbiret sbi_debug_console_write(unsigned long num_bytes,
                                      unsigned long base_addr_lo,
                                      unsigned long base_addr_hi)

Function: Console Read (FID #1): Lee bytes de la consola de depuración en la memoria de salida.

struct sbiret sbi_debug_console_read(unsigned long num_bytes,
                                      unsigned long base_addr_lo,
                                      unsigned long base_addr_hi)

Function: Console Write Byte (FID #2):Escribe un byte en la consola de depuración

struct sbiret sbi_debug_console_write_byte(uint8_t byte)

Extensión de suspensión del sistema SBI (EID #0x53555350 “SUSP”)

system suspend extensionDefine un conjunto de estados de suspensión a nivel del sistema y una función que permite que el software del modo de administración solicite que el sistema pase a estados de suspensión.

Extensión CPPC (EID n.º 0x43505043 “CPPC”)

ACPIDefine Collaborative Processor Performance Control (CPPC)un mecanismo, un mecanismo abstracto y flexible para que el software de administración de energía en modo de supervisión coopere con entidades en la plataforma para administrar el rendimiento del procesador.

Espacio de extensión experimental de SBI (EID #0x08000000 - #0x08FFFFFF)

Espacio de extensión SBI específico del proveedor (EID #0x09000000 - #0x09FFFFFF)

Espacio de extensión SBI específico del firmware (EID #0x0A000000 - #0x0AFFFFFF)

Supongo que te gusta

Origin blog.csdn.net/qq_48322523/article/details/129978885
Recomendado
Clasificación