VirtualBox

Changeset 108826 in vbox


Ignore:
Timestamp:
Apr 2, 2025 9:12:22 AM (5 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168272
Message:

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

Location:
trunk
Files:
3 edited

Legend:

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

    r108824 r108826  
    419419#define GIC_REDIST_REG_CTLR_OFF                         0x0000
    420420/** Bit 0 - Enable LPIs. */
    421 #define GIC_DIST_REG_CTLR_ENABLE_LPI_BIT                0
    422 #define GIC_DIST_REG_CTLR_ENABLE_LPI                    RT_BIT_32(0)
     421#define GIC_REDIST_REG_CTLR_ENABLE_LPI_BIT              0
     422#define GIC_REDIST_REG_CTLR_ENABLE_LPI                  RT_BIT_32(0)
    423423/** Bit 1 - Clear Enable Support. */
    424 #define GIC_DIST_REG_CTLR_CES_BIT                       1
    425 #define GIC_DIST_REG_CTLR_CES                           RT_BIT_32(1)
    426 #define GIC_REDIST_REG_CTLR_CES_SET(a_Ces)              (((a_Ces) << GIC_DIST_REG_CTLR_CES_BIT) & GIC_DIST_REG_CTLR_CES)
     424#define GIC_REDIST_REG_CTLR_CES_BIT                     1
     425#define GIC_REDIST_REG_CTLR_CES                         RT_BIT_32(1)
     426#define GIC_REDIST_REG_CTLR_CES_SET(a_Ces)              (((a_Ces) << GIC_REDIST_REG_CTLR_CES_BIT) & GIC_REDIST_REG_CTLR_CES)
    427427/** Bit 2 - LPI invalidate registers supported. */
    428 #define GIC_DIST_REG_CTLR_IR_BIT                        2
    429 #define GIC_DIST_REG_CTLR_IR                            RT_BIT_32(2)
     428#define GIC_REDIST_REG_CTLR_IR_BIT                      2
     429#define GIC_REDIST_REG_CTLR_IR                          RT_BIT_32(2)
    430430/** Bit 3 - Register Write Pending. */
    431 #define GIC_DIST_REG_CTLR_RWP_BIT                       3
    432 #define GIC_DIST_REG_CTLR_RWP                           RT_BIT_32(3)
     431#define GIC_REDIST_REG_CTLR_RWP_BIT                     3
     432#define GIC_REDIST_REG_CTLR_RWP                         RT_BIT_32(3)
    433433/** Bit 24 - Disable Processor selection for Group 0 interrupt. */
    434 #define GIC_DIST_REG_CTLR_DPG0_BIT                      24
    435 #define GIC_DIST_REG_CTLR_DPG0                          RT_BIT_32(24)
     434#define GIC_REDIST_REG_CTLR_DPG0_BIT                    24
     435#define GIC_REDIST_REG_CTLR_DPG0                        RT_BIT_32(24)
    436436/** Bit 25 - Disable Processor selection for Group 1 non-secure interrupt. */
    437 #define GIC_DIST_REG_CTLR_DPG1NS_BIT                    25
    438 #define GIC_DIST_REG_CTLR_DPG1NS                        RT_BIT_32(25)
     437#define GIC_REDIST_REG_CTLR_DPG1NS_BIT                  25
     438#define GIC_REDIST_REG_CTLR_DPG1NS                      RT_BIT_32(25)
    439439/** Bit 26 - Disable Processor selection for Group 1 secure interrupt. */
    440 #define GIC_DIST_REG_CTLR_DPG1S_BIT                     26
    441 #define GIC_DIST_REG_CTLR_DPG1S                         RT_BIT_32(26)
     440#define GIC_REDIST_REG_CTLR_DPG1S_BIT                   26
     441#define GIC_REDIST_REG_CTLR_DPG1S                       RT_BIT_32(26)
    442442/** Bit 31 - Upstream Write Pending. */
    443 #define GIC_DIST_REG_CTLR_UWP_BIT                       31
    444 #define GIC_DIST_REG_CTLR_UWP                           RT_BIT_32(31)
     443#define GIC_REDIST_REG_CTLR_UWP_BIT                     31
     444#define GIC_REDIST_REG_CTLR_UWP                         RT_BIT_32(31)
    445445
    446446/** Implementer Identification Register - RO. */
     
    555555/** Redistributor LPI Pending Table Base Address Register - RW. */
    556556#define GIC_REDIST_REG_PENDBASER_OFF                    0x0078
     557#define GIC_BF_REDIST_REG_PENDBASER_RSVD_6_0_SHIFT      0
     558#define GIC_BF_REDIST_REG_PENDBASER_RSVD_6_0_MASK       UINT64_C(0x000000000000007f)
     559#define GIC_BF_REDIST_REG_PENDBASER_INNER_CACHE_SHIFT   7
     560#define GIC_BF_REDIST_REG_PENDBASER_INNER_CACHE_MASK    UINT64_C(0x0000000000000380)
     561#define GIC_BF_REDIST_REG_PENDBASER_SHAREABILITY_SHIFT  10
     562#define GIC_BF_REDIST_REG_PENDBASER_SHAREABILITY_MASK   UINT64_C(0x0000000000000c00)
     563#define GIC_BF_REDIST_REG_PENDBASER_RSVD_15_12_SHIFT    12
     564#define GIC_BF_REDIST_REG_PENDBASER_RSVD_15_12_MASK     UINT64_C(0x000000000000f000)
     565#define GIC_BF_REDIST_REG_PENDBASER_PHYS_ADDR_SHIFT     16
     566#define GIC_BF_REDIST_REG_PENDBASER_PHYS_ADDR_MASK      UINT64_C(0x000fffffffff0000)
     567#define GIC_BF_REDIST_REG_PENDBASER_RSVD_55_52_SHIFT    52
     568#define GIC_BF_REDIST_REG_PENDBASER_RSVD_55_52_MASK     UINT64_C(0x00f0000000000000)
     569#define GIC_BF_REDIST_REG_PENDBASER_OUTER_CACHE_SHIFT   56
     570#define GIC_BF_REDIST_REG_PENDBASER_OUTER_CACHE_MASK    UINT64_C(0x0700000000000000)
     571#define GIC_BF_REDIST_REG_PENDBASER_RSVD_61_59_SHIFT    59
     572#define GIC_BF_REDIST_REG_PENDBASER_RSVD_61_59_MASK     UINT64_C(0x3800000000000000)
     573#define GIC_BF_REDIST_REG_PENDBASER_PTZ_SHIFT           62
     574#define GIC_BF_REDIST_REG_PENDBASER_PTZ_MASK            UINT64_C(0x4000000000000000)
     575#define GIC_BF_REDIST_REG_PENDBASER_RSVD_63_SHIFT       63
     576#define GIC_BF_REDIST_REG_PENDBASER_RSVD_63_MASK        UINT64_C(0x8000000000000000)
     577RT_BF_ASSERT_COMPILE_CHECKS(GIC_BF_REDIST_REG_PENDBASER_, UINT64_C(0), UINT64_MAX,
     578                            (RSVD_6_0, INNER_CACHE, SHAREABILITY, RSVD_15_12, PHYS_ADDR, RSVD_55_52, OUTER_CACHE, RSVD_61_59,
     579                             PTZ, RSVD_63));
     580#define GIC_REDIST_REG_PENDBASER_RW_MASK                (UINT64_MAX & ~(  GIC_BF_REDIST_REG_PENDBASER_RSVD_6_0_MASK   \
     581                                                                        | GIC_BF_REDIST_REG_PENDBASER_RSVD_15_12_MASK \
     582                                                                        | GIC_BF_REDIST_REG_PENDBASER_RSVD_55_52_MASK \
     583                                                                        | GIC_BF_REDIST_REG_PENDBASER_RSVD_61_59_MASK \
     584                                                                        | GIC_BF_REDIST_REG_PENDBASER_RSVD_63_MASK))
     585
    557586/** Redistributor Invalidate LPI Register - WO. */
    558587#define GIC_REDIST_REG_INVLPIR_OFF                      0x00a0
  • trunk/src/VBox/VMM/VMMAll/GICAll.cpp

    r108824 r108826  
    22902290DECLINLINE(VBOXSTRICTRC) gicReDistReadRegister(PPDMDEVINS pDevIns, PVMCPUCC pVCpu, uint32_t idRedist, uint16_t offReg, uint32_t *puValue)
    22912291{
    2292     PGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PGICDEV);
     2292    PCGICDEV pGicDev = PDMDEVINS_2_DATA(pDevIns, PGICDEV);
    22932293    AssertRelease(idRedist == pVCpu->idCpu);
    22942294    switch (offReg)
     
    23192319            break;
    23202320        case GIC_REDIST_REG_CTLR_OFF:
    2321             *puValue = pGicDev->fEnableLpis ? GIC_DIST_REG_CTLR_ENABLE_LPI : 0
     2321            *puValue = (pGicDev->fEnableLpis ? GIC_REDIST_REG_CTLR_ENABLE_LPI : 0)
    23222322                     | GIC_REDIST_REG_CTLR_CES_SET(1);
    23232323            break;
     
    23272327        case GIC_REDIST_REG_PROPBASER_OFF + 4:
    23282328            *puValue = pGicDev->uLpiConfigBaseReg.s.Hi;
     2329            break;
     2330        case GIC_REDIST_REG_PENDBASER_OFF:
     2331            *puValue = pGicDev->uLpiPendingBaseReg.s.Lo;
     2332            break;
     2333        case GIC_REDIST_REG_PENDBASER_OFF + 4:
     2334            *puValue = pGicDev->uLpiPendingBaseReg.s.Hi;
    23292335            break;
    23302336        default:
     
    24542460            Assert(uValue == 0);
    24552461            break;
     2462        case GIC_REDIST_REG_CTLR_OFF:
     2463            pGicDev->fEnableLpis = RT_BOOL(uValue & GIC_REDIST_REG_CTLR_ENABLE_LPI);
     2464            break;
    24562465        case GIC_REDIST_REG_PROPBASER_OFF:
    24572466            pGicDev->uLpiConfigBaseReg.s.Lo = uValue & RT_LO_U32(GIC_REDIST_REG_PROPBASER_RW_MASK);
     
    24592468        case GIC_REDIST_REG_PROPBASER_OFF + 4:
    24602469            pGicDev->uLpiConfigBaseReg.s.Hi = uValue & RT_HI_U32(GIC_REDIST_REG_PROPBASER_RW_MASK);
     2470            break;
     2471        case GIC_REDIST_REG_PENDBASER_OFF:
     2472            pGicDev->uLpiPendingBaseReg.s.Lo = uValue & RT_LO_U32(GIC_REDIST_REG_PENDBASER_RW_MASK);
     2473            break;
     2474        case GIC_REDIST_REG_PENDBASER_OFF + 4:
     2475            pGicDev->uLpiPendingBaseReg.s.Hi = uValue & RT_HI_U32(GIC_REDIST_REG_PENDBASER_RW_MASK);
    24612476            break;
    24622477        default:
  • trunk/src/VBox/VMM/include/GICInternal.h

    r108824 r108826  
    141141    /** ITS device state. */
    142142    GITSDEV                     Gits;
    143     /** LPI config table (priority + enabled bit). */
     143    /** LPI config table. */
    144144    uint8_t                     abLpiConfig[2048];
    145145    /** LPI pending bitmap. */
    146146    uint32_t                    bmLpiPending[64];
    147     /** The LPI config table base address register (GICR_PROPBASER). */
     147    /** The LPI config table base register (GICR_PROPBASER). */
    148148    RTUINT64U                   uLpiConfigBaseReg;
    149     /** Whether LPIs are enabled (GICR_CTLR.EnableLpis) common to all
    150      *  redistributors). */
     149    /** The LPI pending table base register (GICR_PENDBASER). */
     150    RTUINT64U                   uLpiPendingBaseReg;
     151    /** Whether LPIs are enabled (GICR_CTLR.EnableLpis of all redistributors). */
    151152    bool                        fEnableLpis;
    152153    /** Padding. */
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