Hi Tom,

thanks for the prompt feedback!

On 27/08/20 20:59, Tom Rix wrote:
> 
> On 8/27/20 7:32 AM, Luca Ceresoli wrote:
>> In preparation to add error checking for gpiod_get_value(), rework
>> the loop to avoid the duplication of these lines:
>>
>>      if (gpiod_get_value(conf->done))
>>              return xilinx_spi_apply_cclk_cycles(conf);
>>
>> There is little advantage in this rework with current code. However
>> error checking will expand these two lines to five, making code
>> duplication more annoying.
>>
>> Signed-off-by: Luca Ceresoli <l...@lucaceresoli.net>
>>
>> ---
>>
>> This patch is new in v2
>> ---
>>  drivers/fpga/xilinx-spi.c | 15 ++++++---------
>>  1 file changed, 6 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/fpga/xilinx-spi.c b/drivers/fpga/xilinx-spi.c
>> index 01f494172379..cfc933d70f52 100644
>> --- a/drivers/fpga/xilinx-spi.c
>> +++ b/drivers/fpga/xilinx-spi.c
>> @@ -151,22 +151,19 @@ static int xilinx_spi_write_complete(struct 
>> fpga_manager *mgr,
>>                                   struct fpga_image_info *info)
>>  {
>>      struct xilinx_spi_conf *conf = mgr->priv;
>> -    unsigned long timeout;
>> +    unsigned long timeout = jiffies + 
>> usecs_to_jiffies(info->config_complete_timeout_us);
>>      int ret;
>>  
>> -    if (gpiod_get_value(conf->done))
>> -            return xilinx_spi_apply_cclk_cycles(conf);
>> -
>> -    timeout = jiffies + usecs_to_jiffies(info->config_complete_timeout_us);
>> +    while (true) {
>> +            if (gpiod_get_value(conf->done))
>> +                    return xilinx_spi_apply_cclk_cycles(conf);
>>  
>> -    while (time_before(jiffies, timeout)) {
>> +            if (time_after(jiffies, timeout))
>> +                    break;
>>  
>>              ret = xilinx_spi_apply_cclk_cycles(conf);
>>              if (ret)
>>                      return ret;
>> -
>> -            if (gpiod_get_value(conf->done))
>> -                    return xilinx_spi_apply_cclk_cycles(conf);
>>      } 
> 
> Do you need another
> 
>       if (gpiod_get_value(conf->done))
>               return xilinx_spi_apply_cclk_cycles(conf);
> 
> here to cover the chance of sleeping in the loop ?

If I got your question correctly: if we get here it's because of a
timeout, thus programming has failed (DONE didn't come up after some
time), and checking it one more here seems pointless.

Does this reply your question?

-- 
Luca

Reply via email to