Thread (5 messages) 5 messages, 3 authors, 2016-07-29

Re: [PATCH v2] reset: uniphier: add reset controller drivers for UniPhier SoCs

From: Philipp Zabel <hidden>
Date: 2016-07-28 09:23:28
Also in: linux-arm-kernel, lkml

Hi Masahiro,

Am Donnerstag, den 28.07.2016, 11:40 +0900 schrieb Masahiro Yamada:
quoted
quoted
+static int uniphier_reset_update(struct reset_controller_dev *rcdev,
+                              unsigned long id, bool assert)
+{
+     struct uniphier_reset_priv *priv = to_uniphier_reset_priv(rcdev);
+     const struct uniphier_reset_data *p;
+     bool handled = false;
+
+     for (p = priv->data; p->id != UNIPHIER_RESET_ID_END; p++) {
+             unsigned int val;
+             int ret;
+
+             if (p->id != id)
+                     continue;
+
+             val = p->assert_val;
+             if (!assert)
+                     val = ~val;
+
+             ret = regmap_write_bits(priv->regmap, p->reg, p->mask, val);
+             if (ret)
+                     return ret;
+
+             handled = true;
Why does this continue to walk through the list after the correct id was
found?
Looks like you already found the answer for this.
Yes.

[...]
quoted
quoted
+#define UNIPHIER_MIO_RESET_USB2(index, ch)                           \
+     UNIPHIER_RESETX_SIMPLE((index), 0x110 + 0x200 * (ch), BIT(24)), \
+     UNIPHIER_RESETX_SIMPLE((index), 0x114 + 0x200 * (ch), BIT(0))
Ah, so for USB2 reset you have two reset bits in separate registers. Are
you sure these are controlling the same reset line?
I am not a hardware guy, so I am not sure about the hardware design.

From my best guess, I think each bit controls a different block.
But both of them must be de-asserted before starting up USB.

There is no use-case where they are asserted/de-asserted independently.

So, I thought it made sense to couple them into a single ID.
If it turns out to be useful for drivers to bundle resets, I'd prefer to
do this in the framework rather than in the individual drivers, maybe
have a reset_assert/deassert_array, similarly to gpiod.
quoted
If the USB core does in fact have two separate reset inputs that just
happen to need asserting at the same time, this should still get two
separate ids. Same issue for the SD reset above, if the reset lines are
physically separate, please don't combine them in the driver.
Right.
From the view of point of Device Tree interface,
it should reflect the hardware design.
I believe they are separate reset signals, so should be given with separate IDs.

But, as a software engineer, it is sometimes difficult to fully understand
the hardware structure.

The hardware document often just says "how to use USB",
but "how clock/reset signals are connected in each block" is not mentioned,
or at least very unclear.
I understand the problem. If you have any way of finding out whether
these are in fact separate resets, please do. Otherwise we'll have to
guess.
Probably, I will come back with real per-reset-line ID,
but I need some time to take a look.
Ok, thanks.

regards
Philipp

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help