Skip to content

Commit

Permalink
Merge branch 'icc-msm8939' into icc-next
Browse files Browse the repository at this point in the history
Booting msm8939 on tip-of-tree I encountered the following error.

[    1.212340] qnoc-msm8939 580000.interconnect_mm: can't request region for resource [mem 0x00580000-0x0059407f]
[    1.212391] qnoc-msm8939 580000.interconnect_mm: Cannot ioremap interconnect bus resource
[    1.221524] qnoc-msm8939: probe of 580000.interconnect_mm failed with error -16

Initially I thought this was a bug with the interconnect driver but,
examining it a bit more I realized the DTS I was working with based on
downstream, declares snoc and snoc_mm as existing at the same address
range.

When we were developing the DTS for 8939 we weren't using the common rpm
interconnect driver so we never saw the ioremap collision.

Taking a hard look at the qcom documentation as well as the downstream code
we see that yes downstream declares snoc and snoc_mm separately but, also
at the same overlapping address.

The qcom documentation for performance points for msm8936/msm8939 snoc,
deliniates snoc_mm as simply two new performance-points i.e. a faster GPLL0
vote associated with new multi-media devices attached to the snoc.

In other words the snoc had two new RPM vote indices added to it, to
represent the higher performance clocks, should one of the multi-media IP
blocks call for it.

We can fix the ioremap collision and still represent the two higher
performance point clock votes by coalsecing snoc and snoc_mm into snoc. The
DTS clock references will take care of the appropriate votes.

V2:
Made snoc-mm into a child of snoc - Dmitry
Removes redundant msm8939_snoc_mm_regmap_config - bod

Link: https://lore.kernel.org/r/20220129032735.2410936-1-bryan.odonoghue@linaro.org
Signed-off-by: Georgi Djakov <djakov@kernel.org>
  • Loading branch information
Georgi Djakov committed Mar 1, 2022
2 parents e45f1c1 + 62dab57 commit 52c8516
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 11 deletions.
33 changes: 31 additions & 2 deletions Documentation/devicetree/bindings/interconnect/qcom,rpm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ properties:
- qcom,msm8939-bimc
- qcom,msm8939-pcnoc
- qcom,msm8939-snoc
- qcom,msm8939-snoc-mm
- qcom,msm8996-a0noc
- qcom,msm8996-a1noc
- qcom,msm8996-a2noc
Expand Down Expand Up @@ -80,7 +79,6 @@ allOf:
- qcom,msm8939-bimc
- qcom,msm8939-pcnoc
- qcom,msm8939-snoc
- qcom,msm8939-snoc-mm
- qcom,msm8996-a1noc
- qcom,msm8996-a2noc
- qcom,msm8996-bimc
Expand All @@ -107,6 +105,37 @@ allOf:
- description: Bus Clock
- description: Bus A Clock

# Child node's properties
patternProperties:
'^interconnect-[a-z0-9]+$':
type: object
description:
snoc-mm is a child of snoc, sharing snoc's register address space.

properties:
compatible:
enum:
- qcom,msm8939-snoc-mm

'#interconnect-cells':
const: 1

clock-names:
items:
- const: bus
- const: bus_a

clocks:
items:
- description: Bus Clock
- description: Bus A Clock

required:
- compatible
- '#interconnect-cells'
- clock-names
- clocks

- if:
properties:
compatible:
Expand Down
10 changes: 1 addition & 9 deletions drivers/interconnect/qcom/msm8939.c
Original file line number Diff line number Diff line change
Expand Up @@ -1301,19 +1301,11 @@ static struct qcom_icc_node *msm8939_snoc_mm_nodes[] = {
[SNOC_MM_INT_2] = &mm_int_2,
};

static const struct regmap_config msm8939_snoc_mm_regmap_config = {
.reg_bits = 32,
.reg_stride = 4,
.val_bits = 32,
.max_register = 0x14080,
.fast_io = true,
};

static struct qcom_icc_desc msm8939_snoc_mm = {
.type = QCOM_ICC_NOC,
.nodes = msm8939_snoc_mm_nodes,
.num_nodes = ARRAY_SIZE(msm8939_snoc_mm_nodes),
.regmap_cfg = &msm8939_snoc_mm_regmap_config,
.regmap_cfg = &msm8939_snoc_regmap_config,
.qos_offset = 0x7000,
};

Expand Down

0 comments on commit 52c8516

Please sign in to comment.