Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
0004  * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
0005  */
0006 
0007 #include "mt7601u.h"
0008 
0009 int mt7601u_wait_asic_ready(struct mt7601u_dev *dev)
0010 {
0011     int i = 100;
0012     u32 val;
0013 
0014     do {
0015         if (test_bit(MT7601U_STATE_REMOVED, &dev->state))
0016             return -EIO;
0017 
0018         val = mt7601u_rr(dev, MT_MAC_CSR0);
0019         if (val && ~val)
0020             return 0;
0021 
0022         udelay(10);
0023     } while (i--);
0024 
0025     return -EIO;
0026 }
0027 
0028 bool mt76_poll(struct mt7601u_dev *dev, u32 offset, u32 mask, u32 val,
0029            int timeout)
0030 {
0031     u32 cur;
0032 
0033     timeout /= 10;
0034     do {
0035         if (test_bit(MT7601U_STATE_REMOVED, &dev->state))
0036             return false;
0037 
0038         cur = mt7601u_rr(dev, offset) & mask;
0039         if (cur == val)
0040             return true;
0041 
0042         udelay(10);
0043     } while (timeout-- > 0);
0044 
0045     dev_err(dev->dev, "Error: Time out with reg %08x\n", offset);
0046 
0047     return false;
0048 }
0049 
0050 bool mt76_poll_msec(struct mt7601u_dev *dev, u32 offset, u32 mask, u32 val,
0051             int timeout)
0052 {
0053     u32 cur;
0054 
0055     timeout /= 10;
0056     do {
0057         if (test_bit(MT7601U_STATE_REMOVED, &dev->state))
0058             return false;
0059 
0060         cur = mt7601u_rr(dev, offset) & mask;
0061         if (cur == val)
0062             return true;
0063 
0064         msleep(10);
0065     } while (timeout-- > 0);
0066 
0067     dev_err(dev->dev, "Error: Time out with reg %08x\n", offset);
0068 
0069     return false;
0070 }