/**@file Common library to build upfirmware context processor-specific information Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ // // The package level header files this module uses // #include // // The Library classes this module consumes // #include #include #include #include #include #include #include /** Build up common firmware context processor-specific information @param FirmwareContextHartSpecific Pointer to EFI_RISCV_FIRMWARE_CONTEXT_HART_SPECIFIC @param ParentProcessorGuid Pointer to GUID of Processor which contains this core @param ParentProcessorUid Unique ID of pysical processor which owns this core. @param CoreGuid Pointer to GUID of core @param HartId Hart ID of this core. @param IsBootHart This is boot hart or not @param ProcessorSpecificDataHob Pointer to RISC_V_PROCESSOR_SPECIFIC_DATA_HOB @return EFI_STATUS **/ EFI_STATUS EFIAPI CommonFirmwareContextHartSpecificInfo ( EFI_RISCV_FIRMWARE_CONTEXT_HART_SPECIFIC *FirmwareContextHartSpecific, EFI_GUID *ParentProcessorGuid, UINTN ParentProcessorUid, EFI_GUID *CoreGuid, UINTN HartId, BOOLEAN IsBootHart, RISC_V_PROCESSOR_SPECIFIC_HOB_DATA *ProcessorSpecificDataHob ) { // // Build up RISC_V_PROCESSOR_SPECIFIC_DATA_HOB. // CopyGuid (&ProcessorSpecificDataHob->ParentPrcessorGuid, ParentProcessorGuid); ProcessorSpecificDataHob->ParentProcessorUid = ParentProcessorUid; CopyGuid (&ProcessorSpecificDataHob->CoreGuid, CoreGuid); ProcessorSpecificDataHob->Context = NULL; ProcessorSpecificDataHob->ProcessorSpecificData.Revision = SMBIOS_RISC_V_PROCESSOR_SPECIFIC_DATA_REVISION; ProcessorSpecificDataHob->ProcessorSpecificData.Length = sizeof (SMBIOS_RISC_V_PROCESSOR_SPECIFIC_DATA); ProcessorSpecificDataHob->ProcessorSpecificData.HartId.Value64_L = (UINT64)HartId; ProcessorSpecificDataHob->ProcessorSpecificData.HartId.Value64_H = 0; ProcessorSpecificDataHob->ProcessorSpecificData.BootHartId = (UINT8)IsBootHart; ProcessorSpecificDataHob->ProcessorSpecificData.InstSetSupported = FirmwareContextHartSpecific->IsaExtensionSupported; ProcessorSpecificDataHob->ProcessorSpecificData.PrivilegeModeSupported = SMBIOS_RISC_V_PSD_MACHINE_MODE_SUPPORTED; if ((ProcessorSpecificDataHob->ProcessorSpecificData.InstSetSupported & RISC_V_ISA_SUPERVISOR_MODE_IMPLEMENTED) != 0) { ProcessorSpecificDataHob->ProcessorSpecificData.PrivilegeModeSupported |= SMBIOS_RISC_V_PSD_SUPERVISOR_MODE_SUPPORTED; } if ((ProcessorSpecificDataHob->ProcessorSpecificData.InstSetSupported & RISC_V_ISA_USER_MODE_IMPLEMENTED) != 0) { ProcessorSpecificDataHob->ProcessorSpecificData.PrivilegeModeSupported |= SMBIOS_RISC_V_PSD_USER_MODE_SUPPORTED; } ProcessorSpecificDataHob->ProcessorSpecificData.MachineVendorId.Value64_L = FirmwareContextHartSpecific->MachineVendorId.Value64_L; ProcessorSpecificDataHob->ProcessorSpecificData.MachineVendorId.Value64_H = FirmwareContextHartSpecific->MachineVendorId.Value64_H; ProcessorSpecificDataHob->ProcessorSpecificData.MachineArchId.Value64_L = FirmwareContextHartSpecific->MachineArchId.Value64_L; ProcessorSpecificDataHob->ProcessorSpecificData.MachineArchId.Value64_H = FirmwareContextHartSpecific->MachineArchId.Value64_H; ProcessorSpecificDataHob->ProcessorSpecificData.MachineImplId.Value64_L = FirmwareContextHartSpecific->MachineImplId.Value64_L; ProcessorSpecificDataHob->ProcessorSpecificData.MachineImplId.Value64_H = FirmwareContextHartSpecific->MachineImplId.Value64_H; return EFI_SUCCESS; } /** Print debug information of the processor specific data for a hart @param ProcessorSpecificDataHob Pointer to RISC_V_PROCESSOR_SPECIFIC_DATA_HOB **/ VOID EFIAPI DebugPrintHartSpecificInfo ( RISC_V_PROCESSOR_SPECIFIC_HOB_DATA *ProcessorSpecificDataHob ) { DEBUG ((DEBUG_INFO, " *HartId = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.HartId.Value64_L)); DEBUG ((DEBUG_INFO, " *Is Boot Hart? = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.BootHartId)); DEBUG ((DEBUG_INFO, " *PrivilegeModeSupported = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.PrivilegeModeSupported)); DEBUG ((DEBUG_INFO, " *MModeExcepDelegation = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.MModeExcepDelegation.Value64_L)); DEBUG ((DEBUG_INFO, " *MModeInterruptDelegation = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.MModeInterruptDelegation.Value64_L)); DEBUG ((DEBUG_INFO, " *HartXlen = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.HartXlen )); DEBUG ((DEBUG_INFO, " *MachineModeXlen = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.MachineModeXlen)); DEBUG ((DEBUG_INFO, " *SupervisorModeXlen = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.SupervisorModeXlen)); DEBUG ((DEBUG_INFO, " *UserModeXlen = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.UserModeXlen)); DEBUG ((DEBUG_INFO, " *InstSetSupported = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.InstSetSupported)); DEBUG ((DEBUG_INFO, " *MachineVendorId = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.MachineVendorId.Value64_L)); DEBUG ((DEBUG_INFO, " *MachineArchId = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.MachineArchId.Value64_L)); DEBUG ((DEBUG_INFO, " *MachineImplId = 0x%x\n", ProcessorSpecificDataHob->ProcessorSpecificData.MachineImplId.Value64_L)); }