On Mon, 14 Jul 2025 05:32:19 -0400
"Michael S. Tsirkin" <m...@redhat.com> wrote:

> On Wed, Jul 02, 2025 at 05:02:13PM +0100, Jonathan Cameron wrote:
> > From: Anisa Su <anisa...@samsung.com>
> > 
> > FM DCD Management command 0x5602 implemented per CXL r3.2 Spec Section 
> > 7.6.7.6.3
> > 
> > Reviewed-by: Fan Ni <fan...@samsung.com>
> > Signed-off-by: Anisa Su <anisa...@samsung.com>
> > Signed-off-by: Jonathan Cameron <jonathan.came...@huawei.com>


> > diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c
> > index bf1710b251..1fc453f70d 100644
> > --- a/hw/cxl/cxl-mailbox-utils.c
> > +++ b/hw/cxl/cxl-mailbox-utils.c

> > +/* CXL r3.2 section 7.6.7.6.3: Set Host DC Region Configuration (Opcode 
> > 5602) */
> > +static CXLRetCode cmd_fm_set_dc_region_config(const struct cxl_cmd *cmd,
> > +                                              uint8_t *payload_in,
> > +                                              size_t len_in,
> > +                                              uint8_t *payload_out,
> > +                                              size_t *len_out,
> > +                                              CXLCCI *cci)
> > +{
> > +    struct {
> > +        uint8_t reg_id;
> > +        uint8_t rsvd[3];
> > +        uint64_t block_sz;
> > +        uint8_t flags;
> > +        uint8_t rsvd2[3];
> > +    } QEMU_PACKED *in = (void *)payload_in;
> > +    CXLType3Dev *ct3d = CXL_TYPE3(cci->d);
> > +    CXLEventDynamicCapacity dcEvent = {};
> > +    CXLDCRegion *region = &ct3d->dc.regions[in->reg_id];
> > +
> > +    /*
> > +     * CXL r3.2 7.6.7.6.3: Set DC Region Configuration
> > +     * This command shall fail with Unsupported when the Sanitize on 
> > Release
> > +     * field does not match the region’s configuration... and the device
> > +     * does not support reconfiguration of the Sanitize on Release setting.
> > +     *
> > +     * Currently not reconfigurable, so always fail if sanitize bit (bit 0)
> > +     * doesn't match.
> > +     */
> > +    if ((in->flags & 0x1) != (region->flags & 0x1)) {
> > +        return CXL_MBOX_UNSUPPORTED;
> > +    }
> > +
> > +    if (in->reg_id >= DCD_MAX_NUM_REGION) {
> > +        return CXL_MBOX_UNSUPPORTED;
> > +    }
> > +
> > +    /* Check that no extents are in the region being reconfigured */
> > +    if (!bitmap_empty(region->blk_bitmap, region->len / 
> > region->block_size)) {
> > +        return CXL_MBOX_UNSUPPORTED;
> > +    }
> > +
> > +    /* Check that new block size is supported */
> > +    if (!test_bit(BIT((int) log2(in->block_sz)),
> > +                  &region->supported_blk_size_bitmask)) {
> > +        return CXL_MBOX_INVALID_INPUT;
> > +    }  
> 
> This does not work: test_bit works on unsigned long, while
> supported_blk_size_bitmask is uint64_t.
> 
> Why so funky? what is wrong with:
> 
> if (!(BIT_ULL(log2(in->block_sz)) & region->supported_blk_size_bitmask))
> 
> And BTW why cast to int here?

Change looks fine to me, so I'll prepare an updated set with this
and the missing semi colon.  Anisa if you can have a look at this
that would be great. 

Sorry I seem to have missed Anisa off the cc for this!

Jonathan

Reply via email to