* [PATCH v2 0/2] soc: qcom: llcc-qcom: Add support for Eliza and document bindings
@ 2026-05-13 11:11 Abel Vesa
2026-05-13 11:11 ` [PATCH v2 1/2] dt-bindings: cache: qcom,llcc: Document Eliza LLCC block Abel Vesa
2026-05-13 11:11 ` [PATCH v2 2/2] soc: qcom: llcc-qcom: Add support for Eliza Abel Vesa
0 siblings, 2 replies; 5+ messages in thread
From: Abel Vesa @ 2026-05-13 11:11 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Conor Dooley, Jonathan Cameron,
Rob Herring, Krzysztof Kozlowski
Cc: linux-arm-msm, devicetree, linux-kernel, Abel Vesa, Konrad Dybcio
Add support for the Last Level Cache Controller found on the Qualcomm
Eliza SoC.
Eliza's LLCC uses a 4-region register layout, with two per-bank base
regions plus the broadcast OR and AND windows.
Describe that layout in the devicetree bindings and add the corresponding
slice configuration and driver data in llcc-qcom.
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
Changes in v2:
- Rebased on next-20260508.
- Replaced the weird phrase in the last commit with something
more sane.
- Picked up Konrad's R-b tag for the second patch.
- Link to v1: https://patch.msgid.link/20260504-eliza-llcc-v1-0-d7006c899812@oss.qualcomm.com
---
Abel Vesa (2):
dt-bindings: cache: qcom,llcc: Document Eliza LLCC block
soc: qcom: llcc-qcom: Add support for Eliza
.../devicetree/bindings/cache/qcom,llcc.yaml | 22 +++
drivers/soc/qcom/llcc-qcom.c | 180 +++++++++++++++++++++
2 files changed, 202 insertions(+)
---
base-commit: e98d21c170b01ddef366f023bbfcf6b31509fa83
change-id: 20260428-eliza-llcc-312b07fefc10
Best regards,
--
Abel Vesa <abel.vesa@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/2] dt-bindings: cache: qcom,llcc: Document Eliza LLCC block
2026-05-13 11:11 [PATCH v2 0/2] soc: qcom: llcc-qcom: Add support for Eliza and document bindings Abel Vesa
@ 2026-05-13 11:11 ` Abel Vesa
2026-05-14 4:15 ` sashiko-bot
2026-05-13 11:11 ` [PATCH v2 2/2] soc: qcom: llcc-qcom: Add support for Eliza Abel Vesa
1 sibling, 1 reply; 5+ messages in thread
From: Abel Vesa @ 2026-05-13 11:11 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Conor Dooley, Jonathan Cameron,
Rob Herring, Krzysztof Kozlowski
Cc: linux-arm-msm, devicetree, linux-kernel, Abel Vesa
Document the Last Level Cache Controller on Eliza SoC. Eliza LLCC has 2
base register regions and an additional AND, OR broadcast region, total 4
register regions.
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
.../devicetree/bindings/cache/qcom,llcc.yaml | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/Documentation/devicetree/bindings/cache/qcom,llcc.yaml b/Documentation/devicetree/bindings/cache/qcom,llcc.yaml
index 995d57815781..90f5a54b76e3 100644
--- a/Documentation/devicetree/bindings/cache/qcom,llcc.yaml
+++ b/Documentation/devicetree/bindings/cache/qcom,llcc.yaml
@@ -20,6 +20,7 @@ description: |
properties:
compatible:
enum:
+ - qcom,eliza-llcc
- qcom,glymur-llcc
- qcom,ipq5424-llcc
- qcom,kaanapali-llcc
@@ -341,6 +342,27 @@ allOf:
- const: llcc_broadcast_base
- const: llcc_broadcast_and_base
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - qcom,eliza-llcc
+ then:
+ properties:
+ reg:
+ items:
+ - description: LLCC0 base register region
+ - description: LLCC2 base register region
+ - description: LLCC broadcast OR register region
+ - description: LLCC broadcast AND register region
+ reg-names:
+ items:
+ - const: llcc0_base
+ - const: llcc2_base
+ - const: llcc_broadcast_base
+ - const: llcc_broadcast_and_base
+
additionalProperties: false
examples:
--
2.54.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] soc: qcom: llcc-qcom: Add support for Eliza
2026-05-13 11:11 [PATCH v2 0/2] soc: qcom: llcc-qcom: Add support for Eliza and document bindings Abel Vesa
2026-05-13 11:11 ` [PATCH v2 1/2] dt-bindings: cache: qcom,llcc: Document Eliza LLCC block Abel Vesa
@ 2026-05-13 11:11 ` Abel Vesa
2026-05-14 4:30 ` sashiko-bot
1 sibling, 1 reply; 5+ messages in thread
From: Abel Vesa @ 2026-05-13 11:11 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Conor Dooley, Jonathan Cameron,
Rob Herring, Krzysztof Kozlowski
Cc: linux-arm-msm, devicetree, linux-kernel, Abel Vesa, Konrad Dybcio
Eliza uses a 4-region LLCC register layout made up of two per-bank base
register regions together with the broadcast OR and AND regions.
So add this SoC specific configuration and its compatible string.
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/soc/qcom/llcc-qcom.c | 180 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 180 insertions(+)
diff --git a/drivers/soc/qcom/llcc-qcom.c b/drivers/soc/qcom/llcc-qcom.c
index 0161ceec8842..7c05cb3619b2 100644
--- a/drivers/soc/qcom/llcc-qcom.c
+++ b/drivers/soc/qcom/llcc-qcom.c
@@ -181,6 +181,171 @@ enum llcc_reg_offset {
LLCC_TRP_WRS_CACHEABLE_EN,
};
+static const struct llcc_slice_config eliza_data[] = {
+ {
+ .usecase_id = LLCC_CPUSS,
+ .slice_id = 1,
+ .max_cap = 896,
+ .bonus_ways = 0xfff,
+ .activate_on_init = true,
+ .write_scid_en = true,
+ .stale_en = true,
+ },
+ {
+ .usecase_id = LLCC_MDMHPFX,
+ .slice_id = 24,
+ .max_cap = 1024,
+ .priority = 5,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ },
+ {
+ .usecase_id = LLCC_VIDSC0,
+ .slice_id = 2,
+ .max_cap = 128,
+ .priority = 5,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ },
+ {
+ .usecase_id = LLCC_MDMHPGRW,
+ .slice_id = 25,
+ .max_cap = 1024,
+ .priority = 5,
+ .bonus_ways = 0xfff,
+ },
+ {
+ .usecase_id = LLCC_GPUHTW,
+ .slice_id = 11,
+ .max_cap = 256,
+ .priority = 1,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ },
+ {
+ .usecase_id = LLCC_GPU,
+ .slice_id = 9,
+ .max_cap = 896,
+ .priority = 1,
+ .bonus_ways = 0xfff,
+ .write_scid_cacheable_en = true,
+ },
+ {
+ .usecase_id = LLCC_MMUHWT,
+ .slice_id = 18,
+ .max_cap = 256,
+ .priority = 1,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ .activate_on_init = true,
+ },
+ {
+ .usecase_id = LLCC_MDMPNG,
+ .slice_id = 27,
+ .max_cap = 256,
+ .priority = 5,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ },
+ {
+ .usecase_id = LLCC_MODPE,
+ .slice_id = 29,
+ .max_cap = 256,
+ .priority = 1,
+ .fixed_size = true,
+ .bonus_ways = 0xf00,
+ .alloc_oneway_en = true,
+ },
+ {
+ .usecase_id = LLCC_WRCACHE,
+ .slice_id = 31,
+ .max_cap = 256,
+ .priority = 1,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ .activate_on_init = true,
+ },
+ {
+ .usecase_id = LLCC_LCPDARE,
+ .slice_id = 30,
+ .max_cap = 128,
+ .priority = 5,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ .activate_on_init = true,
+ .alloc_oneway_en = true,
+ },
+ {
+ .usecase_id = LLCC_ISLAND1,
+ .slice_id = 12,
+ .max_cap = 1280,
+ .priority = 7,
+ .fixed_size = true,
+ .res_ways = 0x3ff,
+ },
+ {
+ .usecase_id = LLCC_CAMOFE,
+ .slice_id = 33,
+ .max_cap = 1024,
+ .priority = 1,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ .stale_en = true,
+ .parent_slice_id = 13,
+ },
+ {
+ .usecase_id = LLCC_CAMRTIP,
+ .slice_id = 13,
+ .max_cap = 1024,
+ .priority = 1,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ .stale_en = true,
+ .parent_slice_id = 13,
+ },
+ {
+ .usecase_id = LLCC_CAMSRTIP,
+ .slice_id = 14,
+ .max_cap = 512,
+ .priority = 1,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ .stale_en = true,
+ .parent_slice_id = 13,
+ },
+ {
+ .usecase_id = LLCC_CAMRTRF,
+ .slice_id = 7,
+ .max_cap = 1024,
+ .priority = 1,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ .stale_en = true,
+ .parent_slice_id = 13,
+ },
+ {
+ .usecase_id = LLCC_CAMSRTRF,
+ .slice_id = 21,
+ .max_cap = 1024,
+ .priority = 1,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ .stale_en = true,
+ .parent_slice_id = 13,
+ },
+ {
+ .usecase_id = LLCC_CPUSSMPAM,
+ .slice_id = 6,
+ .max_cap = 512,
+ .priority = 0,
+ .fixed_size = true,
+ .bonus_ways = 0xfff,
+ .activate_on_init = true,
+ .write_scid_en = true,
+ .stale_en = true,
+ },
+};
+
static const struct llcc_slice_config glymur_data[] = {
{
.usecase_id = LLCC_CPUSS,
@@ -4141,6 +4306,15 @@ static const u32 llcc_v6_reg_offset[] = {
[LLCC_TRP_WRS_CACHEABLE_EN] = 0x00042088,
};
+static const struct qcom_llcc_config eliza_cfg[] = {
+ {
+ .sct_data = eliza_data,
+ .size = ARRAY_SIZE(eliza_data),
+ .reg_offset = llcc_v6_reg_offset,
+ .edac_reg_offset = &llcc_v6_edac_reg_offset,
+ },
+};
+
static const struct qcom_llcc_config kaanapali_cfg[] = {
{
.sct_data = kaanapali_data,
@@ -4397,6 +4571,11 @@ static const struct qcom_llcc_config x1e80100_cfg[] = {
},
};
+static const struct qcom_sct_config eliza_cfgs = {
+ .llcc_config = eliza_cfg,
+ .num_config = ARRAY_SIZE(eliza_cfg),
+};
+
static const struct qcom_sct_config kaanapali_cfgs = {
.llcc_config = kaanapali_cfg,
.num_config = ARRAY_SIZE(kaanapali_cfg),
@@ -5238,6 +5417,7 @@ static int qcom_llcc_probe(struct platform_device *pdev)
}
static const struct of_device_id qcom_llcc_of_match[] = {
+ { .compatible = "qcom,eliza-llcc", .data = &eliza_cfgs },
{ .compatible = "qcom,glymur-llcc", .data = &glymur_cfgs },
{ .compatible = "qcom,ipq5424-llcc", .data = &ipq5424_cfgs},
{ .compatible = "qcom,kaanapali-llcc", .data = &kaanapali_cfgs},
--
2.54.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: cache: qcom,llcc: Document Eliza LLCC block
2026-05-13 11:11 ` [PATCH v2 1/2] dt-bindings: cache: qcom,llcc: Document Eliza LLCC block Abel Vesa
@ 2026-05-14 4:15 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-05-14 4:15 UTC (permalink / raw)
To: Abel Vesa; +Cc: devicetree, conor+dt, robh, krzk+dt
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The `reg` and `reg-names` properties for `qcom,eliza-llcc` incorrectly skip `llcc1_base` and define `llcc2_base` as the second base register region.
--
commit b822a325e6d0b593e6e849500133d7b473e7127e
Author: Abel Vesa <abel.vesa@oss.qualcomm.com>
dt-bindings: cache: qcom,llcc: Document Eliza LLCC block
This commit documents the Last Level Cache Controller (LLCC) for the Eliza
SoC. It specifies that the Eliza LLCC block has 2 base register regions
and an additional AND/OR broadcast region.
> diff --git a/Documentation/devicetree/bindings/cache/qcom,llcc.yaml b/Documentation/devicetree/bindings/cache/qcom,llcc.yaml
> --- a/Documentation/devicetree/bindings/cache/qcom,llcc.yaml
> +++ b/Documentation/devicetree/bindings/cache/qcom,llcc.yaml
[ ... ]
> @@ -341,6 +342,27 @@ allOf:
> - const: llcc_broadcast_base
> - const: llcc_broadcast_and_base
>
> + - if:
> + properties:
> + compatible:
> + contains:
> + enum:
> + - qcom,eliza-llcc
> + then:
> + properties:
> + reg:
> + items:
> + - description: LLCC0 base register region
> + - description: LLCC2 base register region
> + - description: LLCC broadcast OR register region
> + - description: LLCC broadcast AND register region
> + reg-names:
> + items:
> + - const: llcc0_base
> + - const: llcc2_base
The commit message mentions that Eliza LLCC has 2 base register regions,
but the names here skip to llcc2_base. Should this be llcc1_base instead?
Looking at the upstream LLCC driver (drivers/soc/qcom/llcc-qcom.c), it
maps base register regions by their sequential index and generates internal
regmap names sequentially.
If the driver fetches the second region at index 1, it will internally
name it llcc1_base, which creates a semantic mismatch with the device
tree's llcc2_base designation.
Could this also lead to an out-of-bounds mapping if the hardware
dynamically reports 3 banks?
> + - const: llcc_broadcast_base
> + - const: llcc_broadcast_and_base
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260513-eliza-llcc-v2-0-27381ae833d5@oss.qualcomm.com?part=1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] soc: qcom: llcc-qcom: Add support for Eliza
2026-05-13 11:11 ` [PATCH v2 2/2] soc: qcom: llcc-qcom: Add support for Eliza Abel Vesa
@ 2026-05-14 4:30 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-05-14 4:30 UTC (permalink / raw)
To: Abel Vesa; +Cc: krzk+dt, devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Dynamically calculating `num_banks` creates a critical index-shifting vulnerability for `bcast_regmap` when combined with a static 4-region DT layout.
- [Medium] The LLCC_GPU slice configuration sets `.write_scid_cacheable_en = true` but omits `.write_scid_en = true`.
--
commit 33894fa3694ee52109e04ccbe94ee141b9842f00
Author: Abel Vesa <abel.vesa@oss.qualcomm.com>
soc: qcom: llcc-qcom: Add support for Eliza
This commit adds the SoC-specific configuration and compatible string for
Eliza. Eliza uses a 4-region LLCC register layout with two per-bank base
register regions and broadcast OR/AND regions.
> diff --git a/drivers/soc/qcom/llcc-qcom.c b/drivers/soc/qcom/llcc-qcom.c
> index 0161ceec88421..7c05cb3619b2d 100644
> --- a/drivers/soc/qcom/llcc-qcom.c
> +++ b/drivers/soc/qcom/llcc-qcom.c
[ ... ]
> @@ -181,6 +181,171 @@ enum llcc_reg_offset {
> + {
> + .usecase_id = LLCC_GPU,
> + .slice_id = 9,
> + .max_cap = 896,
> + .priority = 1,
> + .bonus_ways = 0xfff,
> + .write_scid_cacheable_en = true,
> + },
The LLCC_GPU slice configures .write_scid_cacheable_en = true but omits
setting .write_scid_en = true. Without write_scid_en set, the corresponding
bit in the LLCC_TRP_WRS_EN register evaluates to 0 and is not enabled.
Without the hardware write allocator enabled for this SCID, could the
cacheable setting be rendered ineffective? Other comparable configurations
like glymur_data explicitly set both flags for the GPU slice.
[ ... ]
> @@ -4141,6 +4306,15 @@ static const u32 llcc_v6_reg_offset[] = {
> [LLCC_TRP_WRS_CACHEABLE_EN] = 0x00042088,
> };
>
> +static const struct qcom_llcc_config eliza_cfg[] = {
> + {
> + .sct_data = eliza_data,
> + .size = ARRAY_SIZE(eliza_data),
> + .reg_offset = llcc_v6_reg_offset,
> + .edac_reg_offset = &llcc_v6_edac_reg_offset,
> + },
> +};
Eliza uses a static 4-region Device Tree layout (llcc0, llcc1, bcast,
bcast_and). Since .num_banks is not hardcoded here, the driver will
dynamically read it from LLCC_COMMON_STATUS0.
If a defective bank is fused off on a lower-binned SKU, num_banks would be
read as 1. The probe function initializes regmaps based on num_banks:
qcom_llcc_probe() {
...
for (i = 1; i < num_banks; i++) {
...
}
drv_data->bcast_regmap = qcom_llcc_init_mmio(pdev, i, "llcc_broadcast_base");
...
}
If num_banks is 1, the loop exits with i = 1. The driver will then map
index 1 from the Device Tree to bcast_regmap. Since index 1 corresponds to
llcc1_base in a static 4-region layout, could this result in broadcast
commands being incorrectly written to the llcc1 base registers, causing
memory corruption and non-functional broadcasts?
Should .num_banks = 2 be explicitly hardcoded here to prevent this index
shifting, or should the driver be updated to map resources by name instead?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260513-eliza-llcc-v2-0-27381ae833d5@oss.qualcomm.com?part=2
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-05-14 4:30 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-13 11:11 [PATCH v2 0/2] soc: qcom: llcc-qcom: Add support for Eliza and document bindings Abel Vesa
2026-05-13 11:11 ` [PATCH v2 1/2] dt-bindings: cache: qcom,llcc: Document Eliza LLCC block Abel Vesa
2026-05-14 4:15 ` sashiko-bot
2026-05-13 11:11 ` [PATCH v2 2/2] soc: qcom: llcc-qcom: Add support for Eliza Abel Vesa
2026-05-14 4:30 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox