qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH qemu] hw/pci-bridge/pxb-cxl: Drop RAS capability from host br


From: Michael S. Tsirkin
Subject: Re: [PATCH qemu] hw/pci-bridge/pxb-cxl: Drop RAS capability from host bridge.
Date: Tue, 12 Mar 2024 11:30:07 -0400

On Thu, Feb 15, 2024 at 05:42:12PM +0000, Jonathan Cameron wrote:
> On Thu, 15 Feb 2024 11:11:47 -0500
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
> 
> > On Thu, Feb 15, 2024 at 03:52:06PM +0000, Jonathan Cameron wrote:
> > > This CXL component isn't allowed to have a RAS capability.
> > > Whilst this should be harmless as software is not expected to look
> > > here, good to clean it up.
> > > 
> > > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>  
> > 
> > Isn't this device migrateable? If yes you need compat
> > handling.
> 
> Not yet. Migrating these is broken in lots of ways :(
> 
> Given they are functional emulation only I've never cared that much.
> We'll need to fix this as part of adding support for virtualization
> use cases which start to make sense when dynamic capacity
> support lands in kernel + QEMU (probably later this year)
> 
> Jonathan


should probably block migration then?

> > 
> > 
> > > ---
> > >  I've been carrying this on my tree for quite a while.
> > >  This wasn't in previous fixes set because it's low priority and
> > >  rebasing it across cleanup series that followed those fixes was
> > >  too fiddly to bother.
> > >  
> > >  include/hw/cxl/cxl_component.h      |  1 +
> > >  hw/cxl/cxl-component-utils.c        | 21 +++++++++++++++++----
> > >  hw/pci-bridge/pci_expander_bridge.c |  2 +-
> > >  3 files changed, 19 insertions(+), 5 deletions(-)
> > > 
> > > diff --git a/include/hw/cxl/cxl_component.h 
> > > b/include/hw/cxl/cxl_component.h
> > > index 0e5d35c263..5012fab6f7 100644
> > > --- a/include/hw/cxl/cxl_component.h
> > > +++ b/include/hw/cxl/cxl_component.h
> > > @@ -25,6 +25,7 @@ enum reg_type {
> > >      CXL2_TYPE3_DEVICE,
> > >      CXL2_LOGICAL_DEVICE,
> > >      CXL2_ROOT_PORT,
> > > +    CXL2_RC,
> > >      CXL2_UPSTREAM_PORT,
> > >      CXL2_DOWNSTREAM_PORT,
> > >      CXL3_SWITCH_MAILBOX_CCI,
> > > diff --git a/hw/cxl/cxl-component-utils.c b/hw/cxl/cxl-component-utils.c
> > > index 84ab503325..cd116c0401 100644
> > > --- a/hw/cxl/cxl-component-utils.c
> > > +++ b/hw/cxl/cxl-component-utils.c
> > > @@ -297,6 +297,7 @@ void cxl_component_register_init_common(uint32_t 
> > > *reg_state,
> > >          caps = 3;
> > >          break;
> > >      case CXL2_ROOT_PORT:
> > > +    case CXL2_RC:
> > >          /* + Extended Security, + Snoop */
> > >          caps = 5;
> > >          break;
> > > @@ -326,8 +327,19 @@ void cxl_component_register_init_common(uint32_t 
> > > *reg_state,
> > >                         CXL_##reg##_REGISTERS_OFFSET);                    
> > >      \
> > >      } while (0)
> > >  
> > > +    switch (type) {
> > > +    case CXL2_DEVICE:
> > > +    case CXL2_TYPE3_DEVICE:
> > > +    case CXL2_LOGICAL_DEVICE:
> > > +    case CXL2_ROOT_PORT:
> > > +    case CXL2_UPSTREAM_PORT:
> > > +    case CXL2_DOWNSTREAM_PORT:
> > >      init_cap_reg(RAS, 2, CXL_RAS_CAPABILITY_VERSION);
> > > -    ras_init_common(reg_state, write_msk);
> > > +        ras_init_common(reg_state, write_msk);
> > > +        break;
> > > +    default:
> > > +        break;
> > > +    }
> > >  
> > >      init_cap_reg(LINK, 4, CXL_LINK_CAPABILITY_VERSION);
> > >  
> > > @@ -335,9 +347,10 @@ void cxl_component_register_init_common(uint32_t 
> > > *reg_state,
> > >          return;
> > >      }
> > >  
> > > -    init_cap_reg(HDM, 5, CXL_HDM_CAPABILITY_VERSION);
> > > -    hdm_init_common(reg_state, write_msk, type);
> > > -
> > > +    if (type != CXL2_ROOT_PORT) {
> > > +        init_cap_reg(HDM, 5, CXL_HDM_CAPABILITY_VERSION);
> > > +        hdm_init_common(reg_state, write_msk, type);
> > > +    }
> > >      if (caps < 5) {
> > >          return;
> > >      }
> > > diff --git a/hw/pci-bridge/pci_expander_bridge.c 
> > > b/hw/pci-bridge/pci_expander_bridge.c
> > > index 535889f7c2..0411ad31ea 100644
> > > --- a/hw/pci-bridge/pci_expander_bridge.c
> > > +++ b/hw/pci-bridge/pci_expander_bridge.c
> > > @@ -290,7 +290,7 @@ static void pxb_cxl_dev_reset(DeviceState *dev)
> > >      uint32_t *write_msk = cxl_cstate->crb.cache_mem_regs_write_mask;
> > >      int dsp_count = 0;
> > >  
> > > -    cxl_component_register_init_common(reg_state, write_msk, 
> > > CXL2_ROOT_PORT);
> > > +    cxl_component_register_init_common(reg_state, write_msk, CXL2_RC);
> > >      /*
> > >       * The CXL specification allows for host bridges with no HDM decoders
> > >       * if they only have a single root port.
> > > -- 
> > > 2.39.2  
> > 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]