Message ID | 20241202171222.62595-24-alejandro.lucero-palau@amd.com |
---|---|
State | New |
Headers | show |
Series | cxl: add type2 device basic support | expand |
On Mon, Dec 02, 2024 at 05:12:17PM +0000, alejandro.lucero-palau@amd.com wrote: > > From: Alejandro Lucero <alucerop@amd.com> > > Use cxl api for creating a region using the endpoint decoder related to > a DPA range. > > Signed-off-by: Alejandro Lucero <alucerop@amd.com> Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com> One comment below. > --- > drivers/net/ethernet/sfc/efx_cxl.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/net/ethernet/sfc/efx_cxl.c b/drivers/net/ethernet/sfc/efx_cxl.c > index 6ca23874d0c7..3e44c31daf36 100644 > --- a/drivers/net/ethernet/sfc/efx_cxl.c > +++ b/drivers/net/ethernet/sfc/efx_cxl.c > @@ -128,10 +128,19 @@ int efx_cxl_init(struct efx_probe_data *probe_data) > goto err3; > } > > + cxl->efx_region = cxl_create_region(cxl->cxlrd, cxl->cxled); > + if (!cxl->efx_region) { > + pci_err(pci_dev, "CXL accel create region failed"); This error would be more meaningful if it printed out the region address and size. > + rc = PTR_ERR(cxl->efx_region); > + goto err_region; > + } > + > probe_data->cxl = cxl; > > return 0; > > +err_region: > + cxl_dpa_free(cxl->cxled); > err3: > cxl_release_resource(cxl->cxlds, CXL_RES_RAM); > err2: > @@ -144,6 +153,7 @@ int efx_cxl_init(struct efx_probe_data *probe_data) > void efx_cxl_exit(struct efx_probe_data *probe_data) > { > if (probe_data->cxl) { > + cxl_accel_region_detach(probe_data->cxl->cxled); > cxl_dpa_free(probe_data->cxl->cxled); > cxl_release_resource(probe_data->cxl->cxlds, CXL_RES_RAM); > kfree(probe_data->cxl->cxlds); > -- > 2.17.1 > >
On 12/3/24 14:37, Martin Habets wrote: > On Mon, Dec 02, 2024 at 05:12:17PM +0000, alejandro.lucero-palau@amd.com wrote: >> From: Alejandro Lucero <alucerop@amd.com> >> >> Use cxl api for creating a region using the endpoint decoder related to >> a DPA range. >> >> Signed-off-by: Alejandro Lucero <alucerop@amd.com> > Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com> > One comment below. > >> --- >> drivers/net/ethernet/sfc/efx_cxl.c | 10 ++++++++++ >> 1 file changed, 10 insertions(+) >> >> diff --git a/drivers/net/ethernet/sfc/efx_cxl.c b/drivers/net/ethernet/sfc/efx_cxl.c >> index 6ca23874d0c7..3e44c31daf36 100644 >> --- a/drivers/net/ethernet/sfc/efx_cxl.c >> +++ b/drivers/net/ethernet/sfc/efx_cxl.c >> @@ -128,10 +128,19 @@ int efx_cxl_init(struct efx_probe_data *probe_data) >> goto err3; >> } >> >> + cxl->efx_region = cxl_create_region(cxl->cxlrd, cxl->cxled); >> + if (!cxl->efx_region) { >> + pci_err(pci_dev, "CXL accel create region failed"); > This error would be more meaningful if it printed out the region address and size. > The region can not be created so we have not that info. >> + rc = PTR_ERR(cxl->efx_region); >> + goto err_region; >> + } >> + >> probe_data->cxl = cxl; >> >> return 0; >> >> +err_region: >> + cxl_dpa_free(cxl->cxled); >> err3: >> cxl_release_resource(cxl->cxlds, CXL_RES_RAM); >> err2: >> @@ -144,6 +153,7 @@ int efx_cxl_init(struct efx_probe_data *probe_data) >> void efx_cxl_exit(struct efx_probe_data *probe_data) >> { >> if (probe_data->cxl) { >> + cxl_accel_region_detach(probe_data->cxl->cxled); >> cxl_dpa_free(probe_data->cxl->cxled); >> cxl_release_resource(probe_data->cxl->cxlds, CXL_RES_RAM); >> kfree(probe_data->cxl->cxlds); >> -- >> 2.17.1 >> >>
On Tue, Dec 03, 2024 at 03:25:27PM +0000, Alejandro Lucero Palau wrote: > > > On 12/3/24 14:37, Martin Habets wrote: > > On Mon, Dec 02, 2024 at 05:12:17PM +0000, alejandro.lucero-palau@amd.com wrote: > > > From: Alejandro Lucero <alucerop@amd.com> > > > > > > Use cxl api for creating a region using the endpoint decoder related to > > > a DPA range. > > > > > > Signed-off-by: Alejandro Lucero <alucerop@amd.com> > > Reviewed-by: Martin Habets <habetsm.xilinx@gmail.com> > > One comment below. > > > > > --- > > > drivers/net/ethernet/sfc/efx_cxl.c | 10 ++++++++++ > > > 1 file changed, 10 insertions(+) > > > > > > diff --git a/drivers/net/ethernet/sfc/efx_cxl.c b/drivers/net/ethernet/sfc/efx_cxl.c > > > index 6ca23874d0c7..3e44c31daf36 100644 > > > --- a/drivers/net/ethernet/sfc/efx_cxl.c > > > +++ b/drivers/net/ethernet/sfc/efx_cxl.c > > > @@ -128,10 +128,19 @@ int efx_cxl_init(struct efx_probe_data *probe_data) > > > goto err3; > > > } > > > + cxl->efx_region = cxl_create_region(cxl->cxlrd, cxl->cxled); > > > + if (!cxl->efx_region) { > > > + pci_err(pci_dev, "CXL accel create region failed"); > > This error would be more meaningful if it printed out the region address and size. > > > > The region can not be created so we have not that info. Ahh, ok. Martin > > > > > + rc = PTR_ERR(cxl->efx_region); > > > + goto err_region; > > > + } > > > + > > > probe_data->cxl = cxl; > > > return 0; > > > +err_region: > > > + cxl_dpa_free(cxl->cxled); > > > err3: > > > cxl_release_resource(cxl->cxlds, CXL_RES_RAM); > > > err2: > > > @@ -144,6 +153,7 @@ int efx_cxl_init(struct efx_probe_data *probe_data) > > > void efx_cxl_exit(struct efx_probe_data *probe_data) > > > { > > > if (probe_data->cxl) { > > > + cxl_accel_region_detach(probe_data->cxl->cxled); > > > cxl_dpa_free(probe_data->cxl->cxled); > > > cxl_release_resource(probe_data->cxl->cxlds, CXL_RES_RAM); > > > kfree(probe_data->cxl->cxlds); > > > -- > > > 2.17.1 > > > > > > >
diff --git a/drivers/net/ethernet/sfc/efx_cxl.c b/drivers/net/ethernet/sfc/efx_cxl.c index 6ca23874d0c7..3e44c31daf36 100644 --- a/drivers/net/ethernet/sfc/efx_cxl.c +++ b/drivers/net/ethernet/sfc/efx_cxl.c @@ -128,10 +128,19 @@ int efx_cxl_init(struct efx_probe_data *probe_data) goto err3; } + cxl->efx_region = cxl_create_region(cxl->cxlrd, cxl->cxled); + if (!cxl->efx_region) { + pci_err(pci_dev, "CXL accel create region failed"); + rc = PTR_ERR(cxl->efx_region); + goto err_region; + } + probe_data->cxl = cxl; return 0; +err_region: + cxl_dpa_free(cxl->cxled); err3: cxl_release_resource(cxl->cxlds, CXL_RES_RAM); err2: @@ -144,6 +153,7 @@ int efx_cxl_init(struct efx_probe_data *probe_data) void efx_cxl_exit(struct efx_probe_data *probe_data) { if (probe_data->cxl) { + cxl_accel_region_detach(probe_data->cxl->cxled); cxl_dpa_free(probe_data->cxl->cxled); cxl_release_resource(probe_data->cxl->cxlds, CXL_RES_RAM); kfree(probe_data->cxl->cxlds);