VirtualBox

Changeset 108946 in vbox


Ignore:
Timestamp:
Apr 11, 2025 9:44:17 AM (4 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168457
Message:

VMM/GIC: bugref:10877 LPI work-in-progress.

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/include/VBox/gic.h

    r108877 r108946  
    723723/** @} */
    724724
     725
     726/** @name LPI configuration table entry.
     727 * @{ */
     728/** GITS LPI Configuration   */
     729/** GITS LPI CTE: Enable. */
     730#define GITS_BF_LPI_CTE_ENABLE_SHIFT                            0
     731#define GITS_BF_LPI_CTE_ENABLE_MASK                             UINT8_C(0x1)
     732/** GITS LPI CTE: Reserved (bit 1). */
     733#define GITS_BF_LPI_CTE_RSVD_1_SHIFT                            1
     734#define GITS_BF_LPI_CTE_RSVD_1_MASK                             UINT8_C(0x2)
     735/** GITS LPI CTE: Priority. */
     736#define GITS_BF_LPI_CTE_PRIORITY_SHIFT                          2
     737#define GITS_BF_LPI_CTE_PRIORITY_MASK                           UINT8_C(0xfc)
     738RT_BF_ASSERT_COMPILE_CHECKS(GITS_BF_LPI_CTE_, UINT8_C(0), UINT8_MAX,
     739                            (ENABLE, RSVD_1, PRIORITY));
     740/** @} */
     741
    725742#endif /* !VBOX_INCLUDED_gic_h */
    726743
  • TabularUnified trunk/src/VBox/VMM/VMMAll/GICAll.cpp

    r108941 r108946  
    31103110    RT_ZERO(pGicDev->bmLpiPending);
    31113111    pGicDev->uLpiConfigBaseReg.u = 0;
     3112    pGicDev->uLpiPendingBaseReg.u = 0;
    31123113    pGicDev->fEnableLpis = false;
    31133114}
  • TabularUnified trunk/src/VBox/VMM/VMMAll/GITSAll.cpp

    r108941 r108946  
    180180
    181181
    182 #if 1
    183182static const char *gitsGetCommandName(uint8_t uCmdId)
    184183{
     
    210209    }
    211210}
    212 #endif
    213 
    214 
    215 static void gitsCmdQueueSetError(PPDMDEVINS pDevIns, PGITSDEV pGitsDev, GITSDIAG enmError, bool fStallQueue)
    216 {
     211
     212
     213DECL_FORCE_INLINE(const char *) gitsGetDiagDescription(GITSDIAG enmDiag)
     214{
     215    if (enmDiag < RT_ELEMENTS(g_apszGitsDiagDesc))
     216        return g_apszGitsDiagDesc[enmDiag];
     217    return "<Unknown>";
     218}
     219
     220
     221static void gitsCmdQueueSetError(PPDMDEVINS pDevIns, PGITSDEV pGitsDev, GITSDIAG enmDiag, bool fStallQueue)
     222{
     223    Log4Func(("enmDiag=%#RX32 (%s) fStallQueue=%RTbool\n", enmDiag, gitsGetDiagDescription(enmDiag)));
    217224    GITS_CRIT_SECT_ENTER(pDevIns);
    218225
    219226    /* Record the error and stall the queue. */
    220     pGitsDev->enmDiag = enmError;
     227    pGitsDev->enmDiag = enmDiag;
    221228    pGitsDev->cCmdQueueErrors++;
    222229    if (fStallQueue)
     
    258265static void gitsCmdQueueThreadWakeUpIfNeeded(PPDMDEVINS pDevIns, PGITSDEV pGitsDev)
    259266{
     267    Log4Func(("\n"));
    260268    Assert(GITS_CRIT_SECT_IS_OWNER(pDevIns));
    261269    if (    gitsCmdQueueCanProcessRequests(pGitsDev)
    262270        && !gitsCmdQueueIsEmpty(pGitsDev))
    263271    {
     272        Log4Func(("Waking up command-queue thread\n"));
    264273        int const rc = PDMDevHlpSUPSemEventSignal(pDevIns, pGitsDev->hEvtCmdQueue);
    265274        AssertRC(rc);
     
    294303
    295304        case GITS_CTRL_REG_PIDR2_OFF:
    296         {
    297305            Assert(cb == 4);
    298306            Assert(pGitsDev->uArchRev <= GITS_CTRL_REG_PIDR2_ARCHREV_GICV4);
    299             uint8_t const uIdCodeDes1 = GIC_JEDEC_JEP10_DES_1(GIC_JEDEC_JEP106_IDENTIFICATION_CODE);
    300             uReg = RT_BF_MAKE(GITS_BF_CTRL_REG_PIDR2_DES_1,   uIdCodeDes1)
     307            uReg = RT_BF_MAKE(GITS_BF_CTRL_REG_PIDR2_DES_1,   GIC_JEDEC_JEP10_DES_1(GIC_JEDEC_JEP106_IDENTIFICATION_CODE))
    301308                 | RT_BF_MAKE(GITS_BF_CTRL_REG_PIDR2_JEDEC,   1)
    302309                 | RT_BF_MAKE(GITS_BF_CTRL_REG_PIDR2_ARCHREV, pGitsDev->uArchRev);
    303310            break;
    304         }
    305311
    306312        case GITS_CTRL_REG_IIDR_OFF:
     
    312318        case GITS_CTRL_REG_TYPER_OFF:
    313319        case GITS_CTRL_REG_TYPER_OFF + 4:
    314         {
    315320            uReg = pGitsDev->uTypeReg.u >> ((offReg & 7) << 3 /* to bits */);
    316321            break;
    317         }
    318322
    319323        case GITS_CTRL_REG_CBASER_OFF:
     
    361365    Assert(cb == 8 || cb == 4);
    362366    Assert(!(offReg & 3));
     367    Log4Func(("offReg=%u uValue=%#RX64 cb=%u\n", offReg, uValue, cb));
    363368
    364369    /*
     
    435440    Assert(cb == 8 || cb == 4);
    436441    Assert(!(offReg & 3));
     442    Log4Func(("offReg=%u uValue=%#RX64 cb=%u\n", offReg, uValue, cb));
    437443    AssertReleaseMsgFailed(("offReg=%#x uValue=%#RX64 [%u-bit]\n", offReg, uValue, cb << 3));
    438444}
     
    496502    /* Basic info, GITS_CTLR and GITS_TYPER. */
    497503    {
    498         GITSDIAG const    enmDiag  = pGitsDev->enmDiag;
    499         const char *const pszDiag  = enmDiag < RT_ELEMENTS(g_apszGitsDiagDesc) ? g_apszGitsDiagDesc[enmDiag] : "(Unknown)";
    500         uint32_t const    uCtrlReg = pGitsDev->uCtrlReg;
     504        uint32_t const uCtrlReg = pGitsDev->uCtrlReg;
     505        GITSDIAG const enmDiag  = pGitsDev->enmDiag;
    501506        pHlp->pfnPrintf(pHlp, "  uArchRev           = %u\n",          pGitsDev->uArchRev);
    502         pHlp->pfnPrintf(pHlp, "  Errors             = %RU64\n",       pGitsDev->cCmdQueueErrors);
    503         pHlp->pfnPrintf(pHlp, "  Diagnostic         = %#RX32 (%s)\n", enmDiag, pszDiag);
     507        pHlp->pfnPrintf(pHlp, "  Cmd queue errors   = %RU64\n",       pGitsDev->cCmdQueueErrors);
     508        pHlp->pfnPrintf(pHlp, "  Last error         = %#RX32 (%s)\n", enmDiag, gitsGetDiagDescription(enmDiag));
    504509        pHlp->pfnPrintf(pHlp, "  GITS_CTLR          = %#RX32\n",      uCtrlReg);
    505510        pHlp->pfnPrintf(pHlp, "    Enabled            = %RTbool\n",   RT_BF_GET(uCtrlReg, GITS_BF_CTRL_REG_CTLR_ENABLED));
     
    584589DECL_HIDDEN_CALLBACK(int) gitsR3CmdQueueProcess(PPDMDEVINS pDevIns, PGITSDEV pGitsDev, void *pvBuf, uint32_t cbBuf)
    585590{
     591    Log4Func(("cbBuf=%RU32\n", cbBuf));
     592
    586593    /* Hold the critical section as we could be accessing the device state simultaneously with MMIO accesses. */
    587594    GITS_CRIT_SECT_ENTER(pDevIns);
     
    710717DECL_HIDDEN_CALLBACK(int) gitsSendMsi(PVMCC pVM, PCIBDF uBusDevFn, PCMSIMSG pMsi, uint32_t uEventId, uint32_t uTagSrc)
    711718{
     719    Log4Func(("uBusDevFn=%#RX32 uEventId=%#RX32\n", uBusDevFn, uEventId));
    712720    RT_NOREF(pVM, uBusDevFn, pMsi, uEventId, uTagSrc);
    713721    return VERR_NOT_IMPLEMENTED;
  • TabularUnified trunk/src/VBox/VMM/VMMR3/GICR3.cpp

    r108941 r108946  
    5252*********************************************************************************************************************************/
    5353/** GIC saved state version. */
    54 #define GIC_SAVED_STATE_VERSION                     8
     54#define GIC_SAVED_STATE_VERSION                     9
    5555
    5656# define GIC_SYSREGRANGE(a_uFirst, a_uLast, a_szName) \
     
    341341        pHlp->pfnPrintf(pHlp, "    Outer cache        = %#x\n",    RT_BF_GET(uReg, GIC_BF_REDIST_REG_PROPBASER_OUTER_CACHE));
    342342    }
     343
     344    /* */
     345    {
     346
     347    }
    343348    /** @todo Dump LPI config and LPI pending registers. */
    344349}
     
    462467    pHlp->pfnSSMPutMem(pSSM,  &pGicDev->bmIntrRoutingMode[0], sizeof(pGicDev->bmIntrRoutingMode));
    463468
     469    /* LPI state. */
    464470    /* We store the size followed by the data because we currently do not support the full LPI range. */
    465471    pHlp->pfnSSMPutU32(pSSM,  sizeof(pGicDev->abLpiConfig));
     
    467473    pHlp->pfnSSMPutU32(pSSM,  sizeof(pGicDev->bmLpiPending));
    468474    pHlp->pfnSSMPutMem(pSSM,  &pGicDev->bmLpiPending[0],      sizeof(pGicDev->bmLpiPending));
     475    pHlp->pfnSSMPutU64(pSSM,  pGicDev->uLpiConfigBaseReg.u);
     476    pHlp->pfnSSMPutU64(pSSM,  pGicDev->uLpiPendingBaseReg.u);
     477    pHlp->pfnSSMPutBool(pSSM, pGicDev->fEnableLpis);
    469478
    470479    /** @todo GITS data. */
     
    578587                                           cbData, sizeof(pGicDev->bmLpiPending));
    579588    }
     589    pHlp->pfnSSMGetU64(pSSM,  &pGicDev->uLpiConfigBaseReg.u);
     590    pHlp->pfnSSMGetU64(pSSM,  &pGicDev->uLpiPendingBaseReg.u);
     591    pHlp->pfnSSMGetBool(pSSM, &pGicDev->fEnableLpis);
    580592
    581593    /** @todo GITS data. */
  • TabularUnified trunk/src/VBox/VMM/include/GICInternal.h

    r108882 r108946  
    170170typedef GICDEV const *PCGICDEV;
    171171AssertCompileMemberSizeAlignment(GICDEV, Gits, 8);
     172AssertCompileMemberAlignment(GICDEV, abLpiConfig, 8);
     173AssertCompileMemberAlignment(GICDEV, hMmioDist, 8);
    172174
    173175/**
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette