VirtualBox

Changeset 108751 in vbox for trunk/src


Ignore:
Timestamp:
Mar 26, 2025 10:33:33 AM (3 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168176
Message:

VMM/GIC: bugref:10877 GITS PIDR2 register reads and related nits.

Location:
trunk/src/VBox/VMM
Files:
4 edited

Legend:

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

    r108745 r108751  
    20332033        }
    20342034        case GIC_DIST_REG_PIDR2_OFF:
    2035             Assert(pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCH_REV_GICV4);
    2036             *puValue = GIC_DIST_REG_PIDR2_ARCH_REV_SET(pGicDev->uArchRev);
     2035            Assert(pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCHREV_GICV4);
     2036            *puValue = GIC_DIST_REG_PIDR2_ARCHREV_SET(pGicDev->uArchRev);
    20372037            break;
    20382038        case GIC_DIST_REG_IIDR_OFF:
     
    22832283            break;
    22842284        case GIC_REDIST_REG_PIDR2_OFF:
    2285             Assert(pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCH_REV_GICV4);
    2286             *puValue = GIC_REDIST_REG_PIDR2_ARCH_REV_SET(pGicDev->uArchRev);
     2285            Assert(pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCHREV_GICV4);
     2286            *puValue = GIC_REDIST_REG_PIDR2_ARCHREV_SET(pGicDev->uArchRev);
    22872287            break;
    22882288        case GIC_REDIST_REG_CTLR_OFF:
     
    30263026    LogFlowFunc(("\n"));
    30273027    PGICDEV  pGicDev  = PDMDEVINS_2_DATA(pDevIns, PGICDEV);
    3028     PGITSDEV pGitsDev = &pGicDev->Gits;
    30293028
    30303029    RT_ZERO(pGicDev->bmIntrGroup);
     
    30413040    RT_ZERO(pGicDev->bmLpiPending);
    30423041    RT_ZERO(pGicDev->abLpiConfig);
     3042
     3043    PGITSDEV pGitsDev = &pGicDev->Gits;
    30433044    gitsInit(pGitsDev);
    30443045}
     
    32423243    Assert(!(off & 0x3));
    32433244    Assert(cb == 4); RT_NOREF_PV(cb);
    3244 
    3245     AssertReleaseFailed();
    32463245
    32473246    PCGICDEV  pGicDev  = PDMDEVINS_2_DATA(pDevIns, PCGICDEV);
  • trunk/src/VBox/VMM/VMMAll/GITSAll.cpp

    r108743 r108751  
    3434
    3535#include <VBox/log.h>
     36#include <VBox/gic.h>
    3637#include <iprt/errcore.h>       /* VINF_SUCCESS */
    3738#include <iprt/string.h>        /* RT_ZERO */
     
    104105            *puValue = pGitsDev->fUnmappedMsiReporting;
    105106            break;
     107        case GITS_CTRL_REG_PIDR2_OFF:
     108        {
     109            Assert(pGitsDev->uArchRev <= GITS_CTRL_REG_PIDR2_ARCHREV_GICV4);
     110            uint8_t const uIdCodeDes1 = GIC_JEDEC_JEP10_DES_1(GIC_JEDEC_JEP106_IDENTIFICATION_CODE);
     111            *puValue = RT_BF_MAKE(GITS_BF_CTRL_REG_PIDR2_DES_1,   uIdCodeDes1)
     112                     | RT_BF_MAKE(GITS_BF_CTRL_REG_PIDR2_JEDEC,   1)
     113                     | RT_BF_MAKE(GITS_BF_CTRL_REG_PIDR2_ARCHREV, pGitsDev->uArchRev);
     114            break;
     115        }
    106116        default:
    107             AssertReleaseFailed();
     117            AssertReleaseMsgFailed(("offReg=%#x\n", offReg));
     118            break;
    108119    }
    109120
     
    115126{
    116127    RT_NOREF(pGitsDev, offReg, puValue);
     128    AssertReleaseMsgFailed(("offReg=%#x\n", offReg));
    117129    return VERR_NOT_IMPLEMENTED;
    118130}
     
    122134{
    123135    RT_NOREF(pGitsDev, offReg, uValue);
     136    AssertReleaseMsgFailed(("offReg=%#x uValue=%#RX32\n", offReg, uValue));
    124137    return VERR_NOT_IMPLEMENTED;
    125138}
     
    129142{
    130143    RT_NOREF(pGitsDev, offReg, uValue);
     144    AssertReleaseMsgFailed(("offReg=%#x uValue=%#RX32\n", offReg, uValue));
    131145    return VERR_NOT_IMPLEMENTED;
    132146}
  • trunk/src/VBox/VMM/VMMR3/GICR3.cpp

    r108747 r108751  
    499499     * Finally, perform sanity checks.
    500500     */
    501     if (pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCH_REV_GICV4)
     501    if (pGicDev->uArchRev <= GIC_DIST_REG_PIDR2_ARCHREV_GICV4)
    502502    { /* likely */ }
    503503    else
    504504        return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, N_("Invalid uArchRev, got %u expected range [1,31]"), pGicDev->uArchRev,
    505                                        GIC_DIST_REG_PIDR2_ARCH_REV_GICV1, GIC_DIST_REG_PIDR2_ARCH_REV_GICV4);
     505                                       GIC_DIST_REG_PIDR2_ARCHREV_GICV1, GIC_DIST_REG_PIDR2_ARCHREV_GICV4);
    506506    if (pGicDev->uMaxSpi - 1 < 31)
    507507    { /* likely */ }
     
    611611
    612612    /** @devcfgm{gic, ArchRev, uint8_t, 3}
    613      * Configures the GIC architecture revision (GICD_PIDR2.ArchRev and
    614      * GICR_PIDR2.ArchRev).
     613     * Configures the GIC architecture revision (GICD_PIDR2.ArchRev, GICR_PIDR2.ArchRev
     614     * and GITS_PIDR2.ArchRev).
    615615     *
    616      * Currently we only support GICv3. */
     616     * Currently we only support GICv3 and the architecture revision reported is the
     617     * same for both the GIC and the ITS. */
    617618    int rc = pHlp->pfnCFGMQueryU8Def(pCfg, "ArchRev", &pGicDev->uArchRev, 3);
    618619    AssertLogRelRCReturn(rc, rc);
    619620    if (pGicDev->uArchRev == 3)
    620     { /* likely */ }
     621        pGicDev->Gits.uArchRev = pGicDev->uArchRev;
    621622    else
    622623        return PDMDevHlpVMSetError(pDevIns, VERR_INVALID_PARAMETER, RT_SRC_POS,
     
    696697     * Configures whether non-maskable interrupts (NMIs) are supported
    697698     * (GICD_TYPER.NMI). */
     699    /** @todo NMIs are currently not implemented. */
    698700    rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Nmi", &pGicDev->fNmi, false);
    699701    AssertLogRelRCReturn(rc, rc);
    700702
    701     /** @devcfgm{gic, Mbi, bool, true}
     703    /** @devcfgm{gic, Mbi, bool, false}
    702704     * Configures whether message-based interrupts (MBIs) are supported
    703      * (GICD_TYPER.MBIS). */
    704     rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Mbi", &pGicDev->fMbi, true);
     705     * (GICD_TYPER.MBIS).
     706     *
     707     * Guests typically can't use MBIs without an ITS. */
     708    rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Mbi", &pGicDev->fMbi, false);
    705709    AssertLogRelRCReturn(rc, rc);
    706710
     
    711715    AssertLogRelRCReturn(rc, rc);
    712716
    713     /** @devcfgm{gic, Lpi, bool, true}
     717    /** @devcfgm{gic, Lpi, bool, false}
    714718     * Configures whether physical LPIs are supported (GICD_TYPER.LPIS and
    715      * GICR_TYPER.PLPIS). */
    716     rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Lpi", &pGicDev->fLpi, true);
     719     * GICR_TYPER.PLPIS).
     720     *
     721     * This currently requires an ITS as we do not support direction injection of
     722     * LPIs as most guests do not use them anyway. */
     723    rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "Lpi", &pGicDev->fLpi, false);
    717724    AssertLogRelRCReturn(rc, rc);
    718725
  • trunk/src/VBox/VMM/include/GITSInternal.h

    r108682 r108751  
    8484     * @{ */
    8585    /** @} */
     86
     87    /** @name Configurables.
     88     * @{ */
     89    /** The ITS architecture (GITS_PIDR2.ArchRev). */
     90    uint8_t                 uArchRev;
     91    /** Padding. */
     92    uint8_t                 afPadding0[7];
     93    /** @} */
    8694} GITSDEV;
    8795/** Pointer to a GITS device. */
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