VirtualBox

Changeset 108829 in vbox for trunk/src


Ignore:
Timestamp:
Apr 2, 2025 12:10:45 PM (13 days ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168275
Message:

VMM/GIC: bugref:10877 GITS work-in-progress. Debug info.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/GITSAll.cpp

    r108828 r108829  
    3535#include <VBox/log.h>
    3636#include <VBox/gic.h>
     37#include <VBox/vmm/dbgf.h>
    3738#include <iprt/errcore.h>       /* VINF_SUCCESS */
    3839#include <iprt/string.h>        /* RT_ZERO */
     
    300301DECL_HIDDEN_CALLBACK(void) gitsR3DbgInfo(PCGITSDEV pGitsDev, PCDBGFINFOHLP pHlp, const char *pszArgs)
    301302{
    302     RT_NOREF(pGitsDev, pHlp, pszArgs);
    303     /** @todo Debug info dump. */
     303    RT_NOREF(pszArgs);
     304
     305    pHlp->pfnPrintf(pHlp, "GIC ITS:\n");
     306    pHlp->pfnPrintf(pHlp, "  uArchRev              = %u\n",      pGitsDev->uArchRev);
     307    pHlp->pfnPrintf(pHlp, "  fEnabled              = %RTbool\n", pGitsDev->fEnabled);
     308    pHlp->pfnPrintf(pHlp, "  fUnmappedMsiReporting = %RTbool\n", pGitsDev->fUnmappedMsiReporting);
     309    pHlp->pfnPrintf(pHlp, "  fQuiescent            = %RTbool\n", pGitsDev->fQuiescent);
     310
     311    /* GITS_BASER<n>. */
     312    for (unsigned i = 0; i < RT_ELEMENTS(pGitsDev->aItsTableRegs); i++)
     313    {
     314        static uint32_t const s_acbPageSize[] = { _4K, _16K, _64K, _64K };
     315        static const char* const s_apszType[] = { "UnImpl", "Devices", "vPEs", "Intr Collections" };
     316        uint64_t const uReg        = pGitsDev->aItsTableRegs[8].u;
     317        uint16_t const cPages      = RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_SIZE) + 1;
     318        uint8_t const  idxPageSize = RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_PAGESIZE);
     319        uint64_t const cbItsTable  = cPages * s_acbPageSize[idxPageSize];
     320        uint8_t const  uEntrySize  = RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_ENTRY_SIZE);
     321        uint8_t const  idxType     = RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_TYPE);
     322        const char *pszType        = s_apszType[idxType];
     323        pHlp->pfnPrintf(pHlp, "  aItsTableReg[%u]      = %#RX64\n", i, uReg);
     324        pHlp->pfnPrintf(pHlp, "    Size                  = %#x (%u page(s) of %.Rhcb each)\n", cPages - 1, cPages, cbItsTable);
     325        pHlp->pfnPrintf(pHlp, "    Page size             = %#x (%.Rhcb)\n", idxPageSize, s_acbPageSize[idxPageSize]);
     326        pHlp->pfnPrintf(pHlp, "    Shareability          = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_SHAREABILITY));
     327        pHlp->pfnPrintf(pHlp, "    Phys addr             = %#RX64\n", uReg & GITS_BF_CTRL_REG_BASER_PHYS_ADDR_MASK);
     328        pHlp->pfnPrintf(pHlp, "    Entry size            = %#x (%u bytes)\n", uEntrySize, uEntrySize > 0 ? uEntrySize + 1 : 0);
     329        pHlp->pfnPrintf(pHlp, "    Outer cache           = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_OUTER_CACHE));
     330        pHlp->pfnPrintf(pHlp, "    Type                  = %#x %s\n", idxType, pszType);
     331        pHlp->pfnPrintf(pHlp, "    Inner cache           = %#x\n", RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INNER_CACHE));
     332        pHlp->pfnPrintf(pHlp, "    Indirect              = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_INDIRECT)));
     333        pHlp->pfnPrintf(pHlp, "    Valid                 = %RTbool\n", RT_BOOL(RT_BF_GET(uReg, GITS_BF_CTRL_REG_BASER_VALID)));
     334    }
     335    pHlp->pfnPrintf(pHlp, "\n");
     336
     337    /* GITS_CBASER. */
     338    {
     339        uint64_t const uReg = pGitsDev->uCmdBaseReg.u;
     340        uint8_t const uSize = RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_SIZE);
     341        pHlp->pfnPrintf(pHlp, "  uCmdBaseReg           = %#RX64\n", uReg);
     342        pHlp->pfnPrintf(pHlp, "    Size                  = %#x (%u %.Rhcb pages)\n", uSize, uSize + 1, _4K * (uSize + 1));
     343        pHlp->pfnPrintf(pHlp, "    Shareability          = %#x\n",      RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_SHAREABILITY));
     344        pHlp->pfnPrintf(pHlp, "    Phys addr             = %#RX64\n",   uReg & GITS_BF_CTRL_REG_CBASER_PHYS_ADDR_MASK);
     345        pHlp->pfnPrintf(pHlp, "    Outer cache           = %#x\n",      RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_OUTER_CACHE));
     346        pHlp->pfnPrintf(pHlp, "    Inner cache           = %#x\n",      RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_INNER_CACHE));
     347        pHlp->pfnPrintf(pHlp, "    Valid                 = %RTbool\n",  RT_BF_GET(uReg, GITS_BF_CTRL_REG_CBASER_VALID));
     348    }
     349
     350    /* GITS_CREADR. */
     351    {
     352        uint32_t const uReg = pGitsDev->uCmdReadReg;
     353        pHlp->pfnPrintf(pHlp, "  uCmdReadReg           = 0x%05RX32 (stalled=%RTbool offset=%RU32)\n", uReg,
     354                        RT_BF_GET(uReg, GITS_BF_CTRL_REG_CREADR_STALLED), uReg & GITS_BF_CTRL_REG_CREADR_OFFSET_MASK);
     355    }
     356
     357    /* GITS_CWRITER. */
     358    {
     359        uint32_t const uReg = pGitsDev->uCmdWriteReg;
     360        pHlp->pfnPrintf(pHlp, "  uCmdWriteReg          = 0x%05RX32 (  retry=%RTbool offset=%RU32)\n", uReg,
     361                        RT_BF_GET(uReg, GITS_BF_CTRL_REG_CWRITER_RETRY), uReg & GITS_BF_CTRL_REG_CWRITER_OFFSET_MASK);
     362    }
    304363}
    305364#endif /* IN_RING3 */
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