ar71xx: Add OTP support for AR934x
[librecmc/librecmc.git] / target / linux / ar71xx / patches-4.4 / 641-MIPS-ath79-fix-AR934x-OTP-offsets.patch
1 --- a/arch/mips/ath79/dev-wmac.c        2017-02-12 19:49:21.158142253 +0100
2 +++ b/arch/mips/ath79/dev-wmac.c        2017-02-12 21:01:51.206198122 +0100
3 @@ -232,15 +274,27 @@ static void qca956x_wmac_setup(void)
4         ath79_wmac_data.get_mac_revision = ar93xx_get_soc_revision;
5  }
6
7 +#define AR93XX_WMAC_SIZE \
8 +       (soc_is_ar934x() ? AR934X_WMAC_SIZE : AR933X_WMAC_SIZE)
9 +#define AR93XX_WMAC_BASE \
10 +       (soc_is_ar934x() ? AR934X_WMAC_BASE : AR933X_WMAC_BASE)
11 +
12 +#define AR93XX_OTP_BASE \
13 +       (soc_is_ar934x() ? AR934X_OTP_BASE : AR9300_OTP_BASE)
14 +#define AR93XX_OTP_STATUS \
15 +       (soc_is_ar934x() ? AR934X_OTP_STATUS : AR9300_OTP_STATUS)
16 +#define AR93XX_OTP_READ_DATA \
17 +       (soc_is_ar934x() ? AR934X_OTP_READ_DATA : AR9300_OTP_READ_DATA)
18 +
19  static bool __init
20  ar93xx_wmac_otp_read_word(void __iomem *base, int addr, u32 *data)
21  {
22         int timeout = 1000;
23         u32 val;
24
25 -       __raw_readl(base + AR9300_OTP_BASE + (4 * addr));
26 +       __raw_readl(base + AR93XX_OTP_BASE + (4 * addr));
27         while (timeout--) {
28 -               val = __raw_readl(base + AR9300_OTP_STATUS);
29 +               val = __raw_readl(base + AR93XX_OTP_STATUS);
30                 if ((val & AR9300_OTP_STATUS_TYPE) == AR9300_OTP_STATUS_VALID)
31                         break;
32
33 @@ -250,7 +304,7 @@ ar93xx_wmac_otp_read_word(void __iomem *
34         if (!timeout)
35                 return false;
36
37 -       *data = __raw_readl(base + AR9300_OTP_READ_DATA);
38 +       *data = __raw_readl(base + AR93XX_OTP_READ_DATA);
39         return true;
40  }
41
42 @@ -326,7 +380,7 @@ bool __init ar93xx_wmac_read_mac_address
43         int mac_start = 2, mac_end = 8;
44
45         BUG_ON(!soc_is_ar933x() && !soc_is_ar934x());
46 -       base = ioremap_nocache(AR933X_WMAC_BASE, AR933X_WMAC_SIZE);
47 +       base = ioremap_nocache(AR93XX_WMAC_BASE, AR93XX_WMAC_SIZE);
48         while (addr > sizeof(hdr)) {
49                 if (!ar93xx_wmac_otp_read(base, addr, hdr, sizeof(hdr)))
50                         break;
51 --- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h    2017-02-12 20:22:32.185209249 +0100
52 +++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h    2017-02-12 20:42:21.037382287 +0100
53 @@ -172,6 +172,13 @@
54  #define AR9300_OTP_STATUS_SM_BUSY      0x1
55  #define AR9300_OTP_READ_DATA   0x15f1c
56
57 +#define AR934X_OTP_BASE                                        0x30000
58 +#define AR934X_OTP_STATUS                              0x31018
59 +#define AR934X_OTP_READ_DATA                           0x3101c
60 +#define AR934X_OTP_INTF2_ADDRESS                       0x31008
61 +#define AR934X_OTP_INTF3_ADDRESS                       0x3100c
62 +#define AR934X_OTP_PGENB_SETUP_HOLD_TIME_ADDRESS       0x31034
63 +
64  /*
65   * Hidden Registers
66   */