According to TRM tx rated channels should be in 7..0 order,
so correct it.

Signed-off-by: Ivan Khoronzhuk <ivan.khoronz...@linaro.org>
---
 drivers/net/ethernet/ti/davinci_cpdma.c | 31 ++++++++++++-------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c 
b/drivers/net/ethernet/ti/davinci_cpdma.c
index 31ae04117f0a..37fbdc668cc7 100644
--- a/drivers/net/ethernet/ti/davinci_cpdma.c
+++ b/drivers/net/ethernet/ti/davinci_cpdma.c
@@ -406,37 +406,36 @@ static int cpdma_chan_fit_rate(struct cpdma_chan *ch, u32 
rate,
        struct cpdma_chan *chan;
        u32 old_rate = ch->rate;
        u32 new_rmask = 0;
-       int rlim = 1;
+       int rlim = 0;
        int i;
 
-       *prio_mode = 0;
        for (i = tx_chan_num(0); i < tx_chan_num(CPDMA_MAX_CHANNELS); i++) {
                chan = ctlr->channels[i];
-               if (!chan) {
-                       rlim = 0;
+               if (!chan)
                        continue;
-               }
 
                if (chan == ch)
                        chan->rate = rate;
 
                if (chan->rate) {
-                       if (rlim) {
-                               new_rmask |= chan->mask;
-                       } else {
-                               ch->rate = old_rate;
-                               dev_err(ctlr->dev, "Prev channel of %dch is not 
rate limited\n",
-                                       chan->chan_num);
-                               return -EINVAL;
-                       }
-               } else {
-                       *prio_mode = 1;
-                       rlim = 0;
+                       rlim = 1;
+                       new_rmask |= chan->mask;
+                       continue;
                }
+
+               if (rlim)
+                       goto err;
        }
 
        *rmask = new_rmask;
+       *prio_mode = rlim;
        return 0;
+
+err:
+       ch->rate = old_rate;
+       dev_err(ctlr->dev, "Upper cpdma ch%d is not rate limited\n",
+               chan->chan_num);
+       return -EINVAL;
 }
 
 static u32 cpdma_chan_set_factors(struct cpdma_ctlr *ctlr,
-- 
2.17.0

Reply via email to