[PATCH v7 11/11] cxl/atl: Lock decoders that need address translation

Robert Richter posted 11 patches 2 months, 3 weeks ago
There is a newer version of this series
[PATCH v7 11/11] cxl/atl: Lock decoders that need address translation
Posted by Robert Richter 2 months, 3 weeks ago
The current kernel implementation does not support endpoint setup with
Normalized Addressing. It only translates an endpoint's DPA to the SPA
range of the host bridge. Therefore, the endpoint address range cannot
be determined, making a non-auto setup impossible. If a decoder
requires address translation, reprogramming should be disabled and the
decoder locked.

The BIOS, however, provides all the necessary address translation
data, which the kernel can use to reconfigure endpoint decoders with
normalized addresses. Locking the decoders in the BIOS would prevent a
capable kernel (or other operating systems) from shutting down
auto-generated regions and managing resources dynamically.

Reviewed-by: Gregory Price <gourry@gourry.net>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Tested-by: Gregory Price <gourry@gourry.net>
Signed-off-by: Robert Richter <rrichter@amd.com>
---
 drivers/cxl/core/atl.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/cxl/core/atl.c b/drivers/cxl/core/atl.c
index 3b02999d3c59..0590890bd093 100644
--- a/drivers/cxl/core/atl.c
+++ b/drivers/cxl/core/atl.c
@@ -161,6 +161,24 @@ static int cxl_prm_translate_hpa_range(struct cxl_root *cxl_root, void *data)
 		return -ENXIO;
 	}
 
+	/*
+	 * The current kernel implementation does not support endpoint
+	 * setup with Normalized Addressing. It only translates an
+	 * endpoint's DPA to the SPA range of the host bridge.
+	 * Therefore, the endpoint address range cannot be determined,
+	 * making a non-auto setup impossible. If a decoder requires
+	 * address translation, reprogramming should be disabled and
+	 * the decoder locked.
+	 *
+	 * The BIOS, however, provides all the necessary address
+	 * translation data, which the kernel can use to reconfigure
+	 * endpoint decoders with normalized addresses. Locking the
+	 * decoders in the BIOS would prevent a capable kernel (or
+	 * other operating systems) from shutting down auto-generated
+	 * regions and managing resources dynamically.
+	 */
+	cxld->flags |= CXL_DECODER_F_LOCK;
+
 	ctx->hpa_range = hpa_range;
 	ctx->interleave_ways = ways;
 	ctx->interleave_granularity = gran;
-- 
2.47.3
Re: [PATCH v7 11/11] cxl/atl: Lock decoders that need address translation
Posted by Dave Jiang 2 months, 3 weeks ago

On 11/14/25 2:39 PM, Robert Richter wrote:
> The current kernel implementation does not support endpoint setup with
> Normalized Addressing. It only translates an endpoint's DPA to the SPA
> range of the host bridge. Therefore, the endpoint address range cannot
> be determined, making a non-auto setup impossible. If a decoder
> requires address translation, reprogramming should be disabled and the
> decoder locked.
> 
> The BIOS, however, provides all the necessary address translation
> data, which the kernel can use to reconfigure endpoint decoders with
> normalized addresses. Locking the decoders in the BIOS would prevent a
> capable kernel (or other operating systems) from shutting down
> auto-generated regions and managing resources dynamically.
> 
> Reviewed-by: Gregory Price <gourry@gourry.net>
> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
> Tested-by: Gregory Price <gourry@gourry.net>
> Signed-off-by: Robert Richter <rrichter@amd.com>

Reviewed-by: Dave Jiang <dave.jiang@intel.com>> ---
>  drivers/cxl/core/atl.c | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/drivers/cxl/core/atl.c b/drivers/cxl/core/atl.c
> index 3b02999d3c59..0590890bd093 100644
> --- a/drivers/cxl/core/atl.c
> +++ b/drivers/cxl/core/atl.c
> @@ -161,6 +161,24 @@ static int cxl_prm_translate_hpa_range(struct cxl_root *cxl_root, void *data)
>  		return -ENXIO;
>  	}
>  
> +	/*
> +	 * The current kernel implementation does not support endpoint
> +	 * setup with Normalized Addressing. It only translates an
> +	 * endpoint's DPA to the SPA range of the host bridge.
> +	 * Therefore, the endpoint address range cannot be determined,
> +	 * making a non-auto setup impossible. If a decoder requires
> +	 * address translation, reprogramming should be disabled and
> +	 * the decoder locked.
> +	 *
> +	 * The BIOS, however, provides all the necessary address
> +	 * translation data, which the kernel can use to reconfigure
> +	 * endpoint decoders with normalized addresses. Locking the
> +	 * decoders in the BIOS would prevent a capable kernel (or
> +	 * other operating systems) from shutting down auto-generated
> +	 * regions and managing resources dynamically.
> +	 */
> +	cxld->flags |= CXL_DECODER_F_LOCK;
> +
>  	ctx->hpa_range = hpa_range;
>  	ctx->interleave_ways = ways;
>  	ctx->interleave_granularity = gran;