Skip to content

Commit 63ac8cc

Browse files
Alex Elderkuba-moo
authored andcommitted
net: ipa: use bulk interconnect initialization
The previous patch used bulk interconnect operations to initialize IPA interconnects one at a time. This rearranges things to use the bulk interfaces as intended--on all interconnects together. As a result ipa_interconnect_init_one() and ipa_interconnect_exit_one() are no longer needed. Signed-off-by: Alex Elder <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent ba22a97 commit 63ac8cc

File tree

1 file changed

+23
-43
lines changed

1 file changed

+23
-43
lines changed

drivers/net/ipa/ipa_power.c

Lines changed: 23 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -70,38 +70,6 @@ struct ipa_power {
7070
struct icc_bulk_data *interconnect;
7171
};
7272

73-
static int ipa_interconnect_init_one(struct device *dev,
74-
struct icc_bulk_data *interconnect,
75-
const struct ipa_interconnect_data *data)
76-
{
77-
int ret;
78-
79-
/* interconnect->path is filled in by of_icc_bulk_get() */
80-
interconnect->name = data->name;
81-
interconnect->avg_bw = data->average_bandwidth;
82-
interconnect->peak_bw = data->peak_bandwidth;
83-
84-
ret = of_icc_bulk_get(dev, 1, interconnect);
85-
if (ret)
86-
return ret;
87-
88-
/* All interconnects are initially disabled */
89-
icc_bulk_disable(1, interconnect);
90-
91-
/* Set the bandwidth values to be used when enabled */
92-
ret = icc_bulk_set_bw(1, interconnect);
93-
if (ret)
94-
icc_bulk_put(1, interconnect);
95-
96-
return ret;
97-
}
98-
99-
static void ipa_interconnect_exit_one(struct icc_bulk_data *interconnect)
100-
{
101-
icc_bulk_put(1, interconnect);
102-
memset(interconnect, 0, sizeof(*interconnect));
103-
}
104-
10573
/* Initialize interconnects required for IPA operation */
10674
static int ipa_interconnect_init(struct ipa_power *power, struct device *dev,
10775
const struct ipa_interconnect_data *data)
@@ -116,18 +84,34 @@ static int ipa_interconnect_init(struct ipa_power *power, struct device *dev,
11684
return -ENOMEM;
11785
power->interconnect = interconnect;
11886

87+
/* Initialize our interconnect data array for bulk operations */
11988
while (count--) {
120-
ret = ipa_interconnect_init_one(dev, interconnect, data++);
121-
if (ret)
122-
goto out_unwind;
89+
/* interconnect->path is filled in by of_icc_bulk_get() */
90+
interconnect->name = data->name;
91+
interconnect->avg_bw = data->average_bandwidth;
92+
interconnect->peak_bw = data->peak_bandwidth;
93+
data++;
12394
interconnect++;
12495
}
12596

97+
ret = of_icc_bulk_get(dev, power->interconnect_count,
98+
power->interconnect);
99+
if (ret)
100+
goto err_free;
101+
102+
/* All interconnects are initially disabled */
103+
icc_bulk_disable(power->interconnect_count, power->interconnect);
104+
105+
/* Set the bandwidth values to be used when enabled */
106+
ret = icc_bulk_set_bw(power->interconnect_count, power->interconnect);
107+
if (ret)
108+
goto err_bulk_put;
109+
126110
return 0;
127111

128-
out_unwind:
129-
while (interconnect-- > power->interconnect)
130-
ipa_interconnect_exit_one(interconnect);
112+
err_bulk_put:
113+
icc_bulk_put(power->interconnect_count, power->interconnect);
114+
err_free:
131115
kfree(power->interconnect);
132116
power->interconnect = NULL;
133117

@@ -137,11 +121,7 @@ static int ipa_interconnect_init(struct ipa_power *power, struct device *dev,
137121
/* Inverse of ipa_interconnect_init() */
138122
static void ipa_interconnect_exit(struct ipa_power *power)
139123
{
140-
struct icc_bulk_data *interconnect;
141-
142-
interconnect = power->interconnect + power->interconnect_count;
143-
while (interconnect-- > power->interconnect)
144-
ipa_interconnect_exit_one(interconnect);
124+
icc_bulk_put(power->interconnect_count, power->interconnect);
145125
kfree(power->interconnect);
146126
power->interconnect = NULL;
147127
}

0 commit comments

Comments
 (0)