diff mbox series

[v6,23/28] sfc: create cxl region

Message ID 20241202171222.62595-24-alejandro.lucero-palau@amd.com
State Superseded
Headers show
Series cxl: add type2 device basic support | expand

Commit Message

Lucero Palau, Alejandro Dec. 2, 2024, 5:12 p.m. UTC
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>
---
 drivers/net/ethernet/sfc/efx_cxl.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Martin Habets Dec. 3, 2024, 2:37 p.m. UTC | #1
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
> 
>
Alejandro Lucero Palau Dec. 3, 2024, 3:25 p.m. UTC | #2
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
>>
>>
Martin Habets Dec. 4, 2024, 8:33 a.m. UTC | #3
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 mbox series

Patch

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);