Changeset 31011


Ignore:
Timestamp:
2012-03-18T23:06:55+01:00 (6 years ago)
Author:
juhosg
Message:

generic: ar8216: add support for the AR8327 chip

Location:
trunk/target/linux/generic/files
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic/files/drivers/net/phy/ar8216.c

    r31010 r31011  
    33 * 
    44 * Copyright (C) 2009 Felix Fietkau <nbd@openwrt.org> 
     5 * Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org> 
    56 * 
    67 * This program is free software; you can redistribute it and/or 
     
    3132#include <linux/etherdevice.h> 
    3233#include <linux/lockdep.h> 
     34#include <linux/ar8216_platform.h> 
    3335#include "ar8216.h" 
    3436 
     
    7173 
    7274        bool init; 
     75        bool mii_lo_first; 
    7376 
    7477        /* all fields below are cleared on reset */ 
     
    138141        bus->write(bus, 0x18, 0, r3); 
    139142        usleep_range(1000, 2000); /* wait for the page switch to propagate */ 
    140         bus->write(bus, 0x10 | r2, r1 + 1, hi); 
    141         bus->write(bus, 0x10 | r2, r1, lo); 
     143        if (priv->mii_lo_first) { 
     144                bus->write(bus, 0x10 | r2, r1, lo); 
     145                bus->write(bus, 0x10 | r2, r1 + 1, hi); 
     146        } else { 
     147                bus->write(bus, 0x10 | r2, r1 + 1, hi); 
     148                bus->write(bus, 0x10 | r2, r1, lo); 
     149        } 
    142150 
    143151        mutex_unlock(&bus->mdio_lock); 
     
    608616        .vtu_flush = ar8216_vtu_flush, 
    609617        .vtu_load_vlan = ar8216_vtu_load_vlan, 
     618}; 
     619 
     620static u32 
     621ar8327_get_pad_cfg(struct ar8327_pad_cfg *cfg) 
     622{ 
     623        u32 t; 
     624 
     625        if (!cfg) 
     626                return 0; 
     627 
     628        t = 0; 
     629        switch (cfg->mode) { 
     630        case AR8327_PAD_NC: 
     631                break; 
     632 
     633        case AR8327_PAD_MAC2MAC_MII: 
     634                t = AR8327_PAD_MAC_MII_EN; 
     635                if (cfg->rxclk_sel) 
     636                        t |= AR8327_PAD_MAC_MII_RXCLK_SEL; 
     637                if (cfg->txclk_sel) 
     638                        t |= AR8327_PAD_MAC_MII_TXCLK_SEL; 
     639                break; 
     640 
     641        case AR8327_PAD_MAC2MAC_GMII: 
     642                t = AR8327_PAD_MAC_GMII_EN; 
     643                if (cfg->rxclk_sel) 
     644                        t |= AR8327_PAD_MAC_GMII_RXCLK_SEL; 
     645                if (cfg->txclk_sel) 
     646                        t |= AR8327_PAD_MAC_GMII_TXCLK_SEL; 
     647                break; 
     648 
     649        case AR8327_PAD_MAC_SGMII: 
     650                t = AR8327_PAD_SGMII_EN; 
     651                break; 
     652 
     653        case AR8327_PAD_MAC2PHY_MII: 
     654                t = AR8327_PAD_PHY_MII_EN; 
     655                if (cfg->rxclk_sel) 
     656                        t |= AR8327_PAD_PHY_MII_RXCLK_SEL; 
     657                if (cfg->txclk_sel) 
     658                        t |= AR8327_PAD_PHY_MII_TXCLK_SEL; 
     659                break; 
     660 
     661        case AR8327_PAD_MAC2PHY_GMII: 
     662                t = AR8327_PAD_PHY_GMII_EN; 
     663                if (cfg->pipe_rxclk_sel) 
     664                        t |= AR8327_PAD_PHY_GMII_PIPE_RXCLK_SEL; 
     665                if (cfg->rxclk_sel) 
     666                        t |= AR8327_PAD_PHY_GMII_RXCLK_SEL; 
     667                if (cfg->txclk_sel) 
     668                        t |= AR8327_PAD_PHY_GMII_TXCLK_SEL; 
     669                break; 
     670 
     671        case AR8327_PAD_MAC_RGMII: 
     672                t = AR8327_PAD_RGMII_EN; 
     673                t |= cfg->txclk_delay_sel << AR8327_PAD_RGMII_TXCLK_DELAY_SEL_S; 
     674                t |= cfg->rxclk_delay_sel << AR8327_PAD_RGMII_RXCLK_DELAY_SEL_S; 
     675                if (cfg->rxclk_delay_en) 
     676                        t |= AR8327_PAD_RGMII_RXCLK_DELAY_EN; 
     677                if (cfg->txclk_delay_en) 
     678                        t |= AR8327_PAD_RGMII_TXCLK_DELAY_EN; 
     679                break; 
     680 
     681        case AR8327_PAD_PHY_GMII: 
     682                t = AR8327_PAD_PHYX_GMII_EN; 
     683                break; 
     684 
     685        case AR8327_PAD_PHY_RGMII: 
     686                t = AR8327_PAD_PHYX_RGMII_EN; 
     687                break; 
     688 
     689        case AR8327_PAD_PHY_MII: 
     690                t = AR8327_PAD_PHYX_MII_EN; 
     691                break; 
     692        } 
     693 
     694        return t; 
     695} 
     696 
     697static int 
     698ar8327_hw_init(struct ar8216_priv *priv) 
     699{ 
     700        struct ar8327_platform_data *pdata; 
     701        u32 t; 
     702        int i; 
     703 
     704        pdata = priv->phy->dev.platform_data; 
     705        if (!pdata) 
     706                return -EINVAL; 
     707 
     708        t = ar8327_get_pad_cfg(pdata->pad0_cfg); 
     709        priv->write(priv, AR8327_REG_PAD0_MODE, t); 
     710        t = ar8327_get_pad_cfg(pdata->pad5_cfg); 
     711        priv->write(priv, AR8327_REG_PAD5_MODE, t); 
     712        t = ar8327_get_pad_cfg(pdata->pad6_cfg); 
     713        priv->write(priv, AR8327_REG_PAD6_MODE, t); 
     714 
     715        priv->write(priv, AR8327_REG_POWER_ON_STRIP, 0x40000000); 
     716 
     717        /* fixup PHYs */ 
     718        for (i = 0; i < AR8327_NUM_PHYS; i++) { 
     719                /* For 100M waveform */ 
     720                ar8216_phy_dbg_write(priv, i, 0, 0x02ea); 
     721 
     722                /* Turn on Gigabit clock */ 
     723                ar8216_phy_dbg_write(priv, i, 0x3d, 0x68a0); 
     724        } 
     725 
     726        return 0; 
     727} 
     728 
     729static void 
     730ar8327_init_globals(struct ar8216_priv *priv) 
     731{ 
     732        u32 t; 
     733 
     734        /* enable CPU port and disable mirror port */ 
     735        t = AR8327_FWD_CTRL0_CPU_PORT_EN | 
     736            AR8327_FWD_CTRL0_MIRROR_PORT; 
     737        priv->write(priv, AR8327_REG_FWD_CTRL0, t); 
     738 
     739        /* forward multicast and broadcast frames to CPU */ 
     740        t = (AR8327_PORTS_ALL << AR8327_FWD_CTRL1_UC_FLOOD_S) | 
     741            (AR8327_PORTS_ALL << AR8327_FWD_CTRL1_BC_FLOOD_S); 
     742        priv->write(priv, AR8327_REG_FWD_CTRL1, t); 
     743 
     744        /* setup MTU */ 
     745        ar8216_rmw(priv, AR8327_REG_MAX_FRAME_SIZE, 
     746                   AR8327_MAX_FRAME_SIZE_MTU, 1518 + 8 + 2); 
     747} 
     748 
     749static void 
     750ar8327_init_cpuport(struct ar8216_priv *priv) 
     751{ 
     752        struct ar8327_platform_data *pdata; 
     753        struct ar8327_port_cfg *cfg; 
     754        u32 t; 
     755 
     756        pdata = priv->phy->dev.platform_data; 
     757        if (!pdata) 
     758                return; 
     759 
     760        cfg = &pdata->cpuport_cfg; 
     761        if (!cfg->force_link) { 
     762                priv->write(priv, AR8327_REG_PORT_STATUS(AR8216_PORT_CPU), 
     763                            AR8216_PORT_STATUS_LINK_AUTO); 
     764                return; 
     765        } 
     766 
     767        t = AR8216_PORT_STATUS_TXMAC | AR8216_PORT_STATUS_RXMAC; 
     768        t |= cfg->duplex ? AR8216_PORT_STATUS_DUPLEX : 0; 
     769        t |= cfg->rxpause ? AR8216_PORT_STATUS_RXFLOW : 0; 
     770        t |= cfg->txpause ? AR8216_PORT_STATUS_TXFLOW : 0; 
     771        switch (cfg->speed) { 
     772        case AR8327_PORT_SPEED_10: 
     773                t |= AR8216_PORT_SPEED_10M; 
     774                break; 
     775        case AR8327_PORT_SPEED_100: 
     776                t |= AR8216_PORT_SPEED_100M; 
     777                break; 
     778        case AR8327_PORT_SPEED_1000: 
     779                t |= AR8216_PORT_SPEED_1000M; 
     780                break; 
     781        } 
     782 
     783        priv->write(priv, AR8327_REG_PORT_STATUS(AR8216_PORT_CPU), t); 
     784} 
     785 
     786static void 
     787ar8327_init_port(struct ar8216_priv *priv, int port) 
     788{ 
     789        u32 t; 
     790 
     791        if (port == AR8216_PORT_CPU) { 
     792                ar8327_init_cpuport(priv); 
     793        } else { 
     794                t = AR8216_PORT_STATUS_LINK_AUTO; 
     795                priv->write(priv, AR8327_REG_PORT_STATUS(port), t); 
     796        } 
     797 
     798        priv->write(priv, AR8327_REG_PORT_HEADER(port), 0); 
     799 
     800        priv->write(priv, AR8327_REG_PORT_VLAN0(port), 0); 
     801 
     802        t = AR8327_PORT_VLAN1_OUT_MODE_UNTOUCH << AR8327_PORT_VLAN1_OUT_MODE_S; 
     803        priv->write(priv, AR8327_REG_PORT_VLAN1(port), t); 
     804 
     805        t = AR8327_PORT_LOOKUP_LEARN; 
     806        t |= AR8216_PORT_STATE_FORWARD << AR8327_PORT_LOOKUP_STATE_S; 
     807        priv->write(priv, AR8327_REG_PORT_LOOKUP(port), t); 
     808} 
     809 
     810static u32 
     811ar8327_read_port_status(struct ar8216_priv *priv, int port) 
     812{ 
     813        return priv->read(priv, AR8327_REG_PORT_STATUS(port)); 
     814} 
     815 
     816static int 
     817ar8327_atu_flush(struct ar8216_priv *priv) 
     818{ 
     819        int ret; 
     820 
     821        ret = ar8216_wait_bit(priv, AR8327_REG_ATU_FUNC, 
     822                              AR8327_ATU_FUNC_BUSY, 0); 
     823        if (!ret) 
     824                priv->write(priv, AR8327_REG_ATU_FUNC, 
     825                            AR8327_ATU_FUNC_OP_FLUSH); 
     826 
     827        return ret; 
     828} 
     829 
     830static void 
     831ar8327_vtu_op(struct ar8216_priv *priv, u32 op, u32 val) 
     832{ 
     833        if (ar8216_wait_bit(priv, AR8327_REG_VTU_FUNC1, 
     834                            AR8327_VTU_FUNC1_BUSY, 0)) 
     835                return; 
     836 
     837        if ((op & AR8327_VTU_FUNC1_OP) == AR8327_VTU_FUNC1_OP_LOAD) 
     838                priv->write(priv, AR8327_REG_VTU_FUNC0, val); 
     839 
     840        op |= AR8327_VTU_FUNC1_BUSY; 
     841        priv->write(priv, AR8327_REG_VTU_FUNC1, op); 
     842} 
     843 
     844static void 
     845ar8327_vtu_flush(struct ar8216_priv *priv) 
     846{ 
     847        ar8327_vtu_op(priv, AR8327_VTU_FUNC1_OP_FLUSH, 0); 
     848} 
     849 
     850static void 
     851ar8327_vtu_load_vlan(struct ar8216_priv *priv, u32 vid, u32 port_mask) 
     852{ 
     853        u32 op; 
     854        u32 val; 
     855        int i; 
     856 
     857        op = AR8327_VTU_FUNC1_OP_LOAD | (vid << AR8327_VTU_FUNC1_VID_S); 
     858        val = AR8327_VTU_FUNC0_VALID | AR8327_VTU_FUNC0_IVL; 
     859        for (i = 0; i < AR8327_NUM_PORTS; i++) { 
     860                u32 mode; 
     861 
     862                if ((port_mask & BIT(i)) == 0) 
     863                        mode = AR8327_VTU_FUNC0_EG_MODE_NOT; 
     864                else if (priv->vlan == 0) 
     865                        mode = AR8327_VTU_FUNC0_EG_MODE_KEEP; 
     866                else if (priv->vlan_tagged & BIT(i)) 
     867                        mode = AR8327_VTU_FUNC0_EG_MODE_TAG; 
     868                else 
     869                        mode = AR8327_VTU_FUNC0_EG_MODE_UNTAG; 
     870 
     871                val |= mode << AR8327_VTU_FUNC0_EG_MODE_S(i); 
     872        } 
     873        ar8327_vtu_op(priv, op, val); 
     874} 
     875 
     876static void 
     877ar8327_setup_port(struct ar8216_priv *priv, int port, u32 egress, u32 ingress, 
     878                  u32 members, u32 pvid) 
     879{ 
     880        u32 t; 
     881        u32 mode; 
     882 
     883        t = pvid << AR8327_PORT_VLAN0_DEF_SVID_S; 
     884        t |= pvid << AR8327_PORT_VLAN0_DEF_CVID_S; 
     885        priv->write(priv, AR8327_REG_PORT_VLAN0(port), t); 
     886 
     887        mode = AR8327_PORT_VLAN1_OUT_MODE_UNMOD; 
     888        switch (egress) { 
     889        case AR8216_OUT_KEEP: 
     890                mode = AR8327_PORT_VLAN1_OUT_MODE_UNTOUCH; 
     891                break; 
     892        case AR8216_OUT_STRIP_VLAN: 
     893                mode = AR8327_PORT_VLAN1_OUT_MODE_UNTAG; 
     894                break; 
     895        case AR8216_OUT_ADD_VLAN: 
     896                mode = AR8327_PORT_VLAN1_OUT_MODE_TAG; 
     897                break; 
     898        } 
     899 
     900        t = AR8327_PORT_VLAN1_PORT_VLAN_PROP; 
     901        t |= mode << AR8327_PORT_VLAN1_OUT_MODE_S; 
     902        priv->write(priv, AR8327_REG_PORT_VLAN1(port), t); 
     903 
     904        t = members; 
     905        t |= AR8327_PORT_LOOKUP_LEARN; 
     906        t |= ingress << AR8327_PORT_LOOKUP_IN_MODE_S; 
     907        t |= AR8216_PORT_STATE_FORWARD << AR8327_PORT_LOOKUP_STATE_S; 
     908        priv->write(priv, AR8327_REG_PORT_LOOKUP(port), t); 
     909} 
     910 
     911static const struct ar8xxx_chip ar8327_chip = { 
     912        .caps = AR8XXX_CAP_GIGE, 
     913        .hw_init = ar8327_hw_init, 
     914        .init_globals = ar8327_init_globals, 
     915        .init_port = ar8327_init_port, 
     916        .setup_port = ar8327_setup_port, 
     917        .read_port_status = ar8327_read_port_status, 
     918        .atu_flush = ar8327_atu_flush, 
     919        .vtu_flush = ar8327_vtu_flush, 
     920        .vtu_load_vlan = ar8327_vtu_load_vlan, 
    610921}; 
    611922 
     
    9111222                priv->chip = &ar8316_chip; 
    9121223                break; 
     1224        case 0x1202: 
     1225                priv->chip_type = AR8327; 
     1226                priv->mii_lo_first = true; 
     1227                priv->chip = &ar8327_chip; 
     1228                break; 
    9131229        default: 
    9141230                printk(KERN_DEBUG 
     
    10131329                swdev->vlans = AR8216_NUM_VLANS; 
    10141330                swdev->ports = AR8216_NUM_PORTS; 
     1331        } else if (priv->chip_type == AR8327) { 
     1332                swdev->name = "Atheros AR8327"; 
     1333                swdev->vlans = AR8X16_MAX_VLANS; 
     1334                swdev->ports = AR8327_NUM_PORTS; 
    10151335        } else { 
    10161336                swdev->name = "Atheros AR8216"; 
  • trunk/target/linux/generic/files/drivers/net/phy/ar8216.h

    r28993 r31011  
    162162#define   AR8236_PORT_VLAN2_VLAN_MODE_S 30 
    163163 
     164#define AR8327_NUM_PORTS        7 
     165#define AR8327_NUM_PHYS         5 
     166#define AR8327_PORTS_ALL        0x7f 
     167 
     168#define AR8327_REG_MASK                         0x000 
     169 
     170#define AR8327_REG_PAD0_MODE                    0x004 
     171#define AR8327_REG_PAD5_MODE                    0x008 
     172#define AR8327_REG_PAD6_MODE                    0x00c 
     173#define   AR8327_PAD_MAC_MII_RXCLK_SEL          BIT(0) 
     174#define   AR8327_PAD_MAC_MII_TXCLK_SEL          BIT(1) 
     175#define   AR8327_PAD_MAC_MII_EN                 BIT(2) 
     176#define   AR8327_PAD_MAC_GMII_RXCLK_SEL         BIT(4) 
     177#define   AR8327_PAD_MAC_GMII_TXCLK_SEL         BIT(5) 
     178#define   AR8327_PAD_MAC_GMII_EN                BIT(6) 
     179#define   AR8327_PAD_SGMII_EN                   BIT(7) 
     180#define   AR8327_PAD_PHY_MII_RXCLK_SEL          BIT(8) 
     181#define   AR8327_PAD_PHY_MII_TXCLK_SEL          BIT(9) 
     182#define   AR8327_PAD_PHY_MII_EN                 BIT(10) 
     183#define   AR8327_PAD_PHY_GMII_PIPE_RXCLK_SEL    BIT(11) 
     184#define   AR8327_PAD_PHY_GMII_RXCLK_SEL         BIT(12) 
     185#define   AR8327_PAD_PHY_GMII_TXCLK_SEL         BIT(13) 
     186#define   AR8327_PAD_PHY_GMII_EN                BIT(14) 
     187#define   AR8327_PAD_PHYX_GMII_EN               BIT(16) 
     188#define   AR8327_PAD_PHYX_RGMII_EN              BIT(17) 
     189#define   AR8327_PAD_PHYX_MII_EN                BIT(18) 
     190#define   AR8327_PAD_RGMII_RXCLK_DELAY_SEL      BITS(20, 2) 
     191#define   AR8327_PAD_RGMII_RXCLK_DELAY_SEL_S    20 
     192#define   AR8327_PAD_RGMII_TXCLK_DELAY_SEL      BITS(22, 2) 
     193#define   AR8327_PAD_RGMII_TXCLK_DELAY_SEL_S    22 
     194#define   AR8327_PAD_RGMII_RXCLK_DELAY_EN       BIT(24) 
     195#define   AR8327_PAD_RGMII_TXCLK_DELAY_EN       BIT(25) 
     196#define   AR8327_PAD_RGMII_EN                   BIT(26) 
     197 
     198#define AR8327_REG_POWER_ON_STRIP               0x010 
     199 
     200#define AR8327_REG_INT_STATUS0                  0x020 
     201#define   AR8327_INT0_VT_DONE                   BIT(20) 
     202 
     203#define AR8327_REG_INT_STATUS1                  0x024 
     204#define AR8327_REG_INT_MASK0                    0x028 
     205#define AR8327_REG_INT_MASK1                    0x02c 
     206#define AR8327_REG_SERVICE_TAG                  0x048 
     207#define AR8327_REG_LED_CTRL0                    0x050 
     208#define AR8327_REG_LED_CTRL1                    0x054 
     209#define AR8327_REG_LED_CTRL2                    0x058 
     210#define AR8327_REG_LED_CTRL3                    0x05c 
     211#define AR8327_REG_MAC_ADDR0                    0x060 
     212#define AR8327_REG_MAC_ADDR1                    0x064 
     213 
     214#define AR8327_REG_MAX_FRAME_SIZE               0x078 
     215#define   AR8327_MAX_FRAME_SIZE_MTU             BITS(0, 14) 
     216 
     217#define AR8327_REG_PORT_STATUS(_i)              (0x07c + (_i) * 4) 
     218 
     219#define AR8327_REG_HEADER_CTRL                  0x098 
     220#define AR8327_REG_PORT_HEADER(_i)              (0x09c + (_i) * 4) 
     221 
     222#define AR8327_REG_PORT_VLAN0(_i)               (0x420 + (_i) * 0x8) 
     223#define   AR8327_PORT_VLAN0_DEF_SVID            BITS(0, 12) 
     224#define   AR8327_PORT_VLAN0_DEF_SVID_S          0 
     225#define   AR8327_PORT_VLAN0_DEF_CVID            BITS(16, 12) 
     226#define   AR8327_PORT_VLAN0_DEF_CVID_S          16 
     227 
     228#define AR8327_REG_PORT_VLAN1(_i)               (0x424 + (_i) * 0x8) 
     229#define   AR8327_PORT_VLAN1_PORT_VLAN_PROP      BIT(6) 
     230#define   AR8327_PORT_VLAN1_OUT_MODE            BITS(12, 2) 
     231#define   AR8327_PORT_VLAN1_OUT_MODE_S          12 
     232#define   AR8327_PORT_VLAN1_OUT_MODE_UNMOD      0 
     233#define   AR8327_PORT_VLAN1_OUT_MODE_UNTAG      1 
     234#define   AR8327_PORT_VLAN1_OUT_MODE_TAG        2 
     235#define   AR8327_PORT_VLAN1_OUT_MODE_UNTOUCH    3 
     236 
     237#define AR8327_REG_ATU_DATA0                    0x600 
     238#define AR8327_REG_ATU_DATA1                    0x604 
     239#define AR8327_REG_ATU_DATA2                    0x608 
     240 
     241#define AR8327_REG_ATU_FUNC                     0x60c 
     242#define   AR8327_ATU_FUNC_OP                    BITS(0, 4) 
     243#define   AR8327_ATU_FUNC_OP_NOOP               0x0 
     244#define   AR8327_ATU_FUNC_OP_FLUSH              0x1 
     245#define   AR8327_ATU_FUNC_OP_LOAD               0x2 
     246#define   AR8327_ATU_FUNC_OP_PURGE              0x3 
     247#define   AR8327_ATU_FUNC_OP_FLUSH_LOCKED       0x4 
     248#define   AR8327_ATU_FUNC_OP_FLUSH_UNICAST      0x5 
     249#define   AR8327_ATU_FUNC_OP_GET_NEXT           0x6 
     250#define   AR8327_ATU_FUNC_OP_SEARCH_MAC         0x7 
     251#define   AR8327_ATU_FUNC_OP_CHANGE_TRUNK       0x8 
     252#define   AR8327_ATU_FUNC_BUSY                  BIT(31) 
     253 
     254#define AR8327_REG_VTU_FUNC0                    0x0610 
     255#define   AR8327_VTU_FUNC0_EG_MODE              BITS(4, 14) 
     256#define   AR8327_VTU_FUNC0_EG_MODE_S(_i)        (4 + (_i) * 2) 
     257#define   AR8327_VTU_FUNC0_EG_MODE_KEEP         0 
     258#define   AR8327_VTU_FUNC0_EG_MODE_UNTAG        1 
     259#define   AR8327_VTU_FUNC0_EG_MODE_TAG          2 
     260#define   AR8327_VTU_FUNC0_EG_MODE_NOT          3 
     261#define   AR8327_VTU_FUNC0_IVL                  BIT(19) 
     262#define   AR8327_VTU_FUNC0_VALID                BIT(20) 
     263 
     264#define AR8327_REG_VTU_FUNC1                    0x0614 
     265#define   AR8327_VTU_FUNC1_OP                   BITS(0, 3) 
     266#define   AR8327_VTU_FUNC1_OP_NOOP              0 
     267#define   AR8327_VTU_FUNC1_OP_FLUSH             1 
     268#define   AR8327_VTU_FUNC1_OP_LOAD              2 
     269#define   AR8327_VTU_FUNC1_OP_PURGE             3 
     270#define   AR8327_VTU_FUNC1_OP_REMOVE_PORT       4 
     271#define   AR8327_VTU_FUNC1_OP_GET_NEXT          5 
     272#define   AR8327_VTU_FUNC1_OP_GET_ONE           6 
     273#define   AR8327_VTU_FUNC1_FULL                 BIT(4) 
     274#define   AR8327_VTU_FUNC1_PORT                 BIT(8, 4) 
     275#define   AR8327_VTU_FUNC1_PORT_S               8 
     276#define   AR8327_VTU_FUNC1_VID                  BIT(16, 12) 
     277#define   AR8327_VTU_FUNC1_VID_S                16 
     278#define   AR8327_VTU_FUNC1_BUSY                 BIT(31) 
     279 
     280#define AR8327_REG_FWD_CTRL0                    0x620 
     281#define   AR8327_FWD_CTRL0_CPU_PORT_EN          BIT(10) 
     282#define   AR8327_FWD_CTRL0_MIRROR_PORT          BITS(4, 4) 
     283#define   AR8327_FWD_CTRL0_MIRROR_PORT_S        4 
     284 
     285#define AR8327_REG_FWD_CTRL1                    0x624 
     286#define   AR8327_FWD_CTRL1_UC_FLOOD             BITS(0, 7) 
     287#define   AR8327_FWD_CTRL1_UC_FLOOD_S           0 
     288#define   AR8327_FWD_CTRL1_MC_FLOOD             BITS(8, 7) 
     289#define   AR8327_FWD_CTRL1_MC_FLOOD_S           8 
     290#define   AR8327_FWD_CTRL1_BC_FLOOD             BITS(16, 7) 
     291#define   AR8327_FWD_CTRL1_BC_FLOOD_S           16 
     292#define   AR8327_FWD_CTRL1_IGMP                 BITS(24, 7) 
     293#define   AR8327_FWD_CTRL1_IGMP_S               24 
     294 
     295#define AR8327_REG_PORT_LOOKUP(_i)              (0x660 + (_i) * 0xc) 
     296#define   AR8327_PORT_LOOKUP_MEMBER             BITS(0, 7) 
     297#define   AR8327_PORT_LOOKUP_IN_MODE            BITS(8, 2) 
     298#define   AR8327_PORT_LOOKUP_IN_MODE_S          8 
     299#define   AR8327_PORT_LOOKUP_STATE              BITS(16, 3) 
     300#define   AR8327_PORT_LOOKUP_STATE_S            16 
     301#define   AR8327_PORT_LOOKUP_LEARN              BIT(20) 
     302 
     303#define AR8327_REG_PORT_PRIO(_i)                (0x664 + (_i) * 0xc) 
     304 
    164305/* port speed */ 
    165306enum { 
     
    200341  AR8236 = 8236, 
    201342  AR8316 = 8316, 
     343  AR8327 = 8327, 
    202344}; 
    203345 
Note: See TracChangeset for help on using the changeset viewer.