On Tue, Dec 05, 2017 at 08:48:03AM -0600, Pierre-Louis Bossart wrote:
On 12/5/17 7:43 AM, Pierre-Louis Bossart wrote:
On 12/5/17 12:31 AM, Vinod Koul wrote:
On Sun, Dec 03, 2017 at 09:01:41PM -0600, Pierre-Louis Bossart wrote:
+static inline int do_transfer(struct sdw_bus *bus, struct
sdw_msg *msg)
+{
+ÂÂÂ int retry = bus->prop.err_threshold;
+ÂÂÂ enum sdw_command_response resp;
+ÂÂÂ int ret = 0, i;
+
+ÂÂÂ for (i = 0; i <= retry; i++) {
+ÂÂÂÂÂÂÂ resp = bus->ops->xfer_msg(bus, msg);
+ÂÂÂÂÂÂÂ ret = find_response_code(resp);
+
+ÂÂÂÂÂÂÂ /* if cmd is ok or ignored return */
+ÂÂÂÂÂÂÂ if (ret == 0 || ret == -ENODATA)
Can you document why you don't retry on a CMD_IGNORED? I know
there was a
reason, I just can't remember it.
CMD_IGNORED can be okay on broadcast. User of this API can retry all
they
want!
So you retry if this is a CMD_FAILED but let higher levels retry for
CMD_IGNORED, sorry I don't see the logic.
Yes that is right.
If I am doing a broadcast read, lets say for Device Id registers, why in
the
world would I want to retry? CMD_IGNORED is a valid response and
required to
stop enumeration cycle in that case.
Above is the clarfication
But if I am not expecting a CMD_IGNORED response, I can very well go
ahead
and retry from caller. The context is with caller and they can choose to
do
appropriate handling.
And I have clarified this couple of times to you already, not sure how
many
more times I would have to do that.
Until you clarify what you are doing.
Let me try again, I think u missed that part of my reply above
If I am doing a broadcast read, lets say for Device Id registers,
why in the world would I want to retry? CMD_IGNORED is a valid response
and required to stop enumeration cycle in that case.
There is ONE case where IGNORED is a valid answer (reading the Prepare notI meant Read SCP_DevID registers from Device0... prepare bits should never
finished bits), and it should not only be documented but analyzed in more
details.
return a CMD_IGNORED
Precisely as I pointed out above.
For a write an IGNORED is never OK.
Agreed, but then transfer does both read and write. Write call can treat it
as error and read call leaves it upto caller.
Does that sound okay for you?