Changeset 29554


Ignore:
Timestamp:
2011-12-15T23:25:32+01:00 (4 years ago)
Author:
juhosg
Message:

ar71xx: ag71xx: fix switch port setup for AR934X

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/drivers/net/ag71xx/ag71xx_ar7240.c

    r29553 r29554  
    207207#define   AR934X_REG_OPER_MODE1_PHY4_MII_EN     BIT(28) 
    208208 
     209#define AR934X_REG_PORT_BASE(_port)     (0x100 + (_port) * 0x100) 
     210 
     211#define AR934X_REG_PORT_VLAN1(_port)    (AR934X_REG_PORT_BASE((_port)) + 0x08) 
     212#define   AR934X_PORT_VLAN1_DEFAULT_SVID_S              0 
     213#define   AR934X_PORT_VLAN1_FORCE_DEFAULT_VID_EN        BIT(12) 
     214#define   AR934X_PORT_VLAN1_PORT_TLS_MODE               BIT(13) 
     215#define   AR934X_PORT_VLAN1_PORT_VLAN_PROP_EN           BIT(14) 
     216#define   AR934X_PORT_VLAN1_PORT_CLONE_EN               BIT(15) 
     217#define   AR934X_PORT_VLAN1_DEFAULT_CVID_S              16 
     218#define   AR934X_PORT_VLAN1_FORCE_PORT_VLAN_EN          BIT(28) 
     219#define   AR934X_PORT_VLAN1_ING_PORT_PRI_S              29 
     220 
     221#define AR934X_REG_PORT_VLAN2(_port)    (AR934X_REG_PORT_BASE((_port)) + 0x0c) 
     222#define   AR934X_PORT_VLAN2_PORT_VID_MEM_S              16 
     223#define   AR934X_PORT_VLAN2_8021Q_MODE_S                30 
     224#define   AR934X_PORT_VLAN2_8021Q_MODE_PORT_ONLY        0 
     225#define   AR934X_PORT_VLAN2_8021Q_MODE_PORT_FALLBACK    1 
     226#define   AR934X_PORT_VLAN2_8021Q_MODE_VLAN_ONLY        2 
     227#define   AR934X_PORT_VLAN2_8021Q_MODE_SECURE           3 
     228 
    209229#define sw_to_ar7240(_dev) container_of(_dev, struct ar7240sw, swdev) 
    210230 
     
    496516        struct mii_bus *mii = as->mii_bus; 
    497517        u32 ctrl; 
    498         u32 vlan; 
     518        u32 vid, mode; 
    499519 
    500520        ctrl = AR7240_PORT_CTRL_STATE_FORWARD | AR7240_PORT_CTRL_LEARN | 
     
    516536        /* Set the default VID for this port */ 
    517537        if (as->vlan) { 
    518                 vlan = as->vlan_id[as->pvid[port]]; 
    519                 vlan |= AR7240_PORT_VLAN_MODE_SECURE << 
    520                         AR7240_PORT_VLAN_MODE_S; 
     538                vid = as->vlan_id[as->pvid[port]]; 
     539                mode = AR7240_PORT_VLAN_MODE_SECURE; 
    521540        } else { 
    522                 vlan = port; 
    523                 vlan |= AR7240_PORT_VLAN_MODE_PORT_ONLY << 
    524                         AR7240_PORT_VLAN_MODE_S; 
     541                vid = port; 
     542                mode = AR7240_PORT_VLAN_MODE_PORT_ONLY; 
    525543        } 
    526544 
     
    545563        portmask &= ar7240sw_port_mask_but(as, port); 
    546564 
    547         /* set default VID and and destination ports for this VLAN */ 
    548         vlan |= (portmask << AR7240_PORT_VLAN_DEST_PORTS_S); 
    549  
    550565        ar7240sw_reg_write(mii, AR7240_REG_PORT_CTRL(port), ctrl); 
    551         ar7240sw_reg_write(mii, AR7240_REG_PORT_VLAN(port), vlan); 
     566        if (sw_is_ar934x(as)) { 
     567                u32 vlan1, vlan2; 
     568 
     569                vlan1 = (vid << AR934X_PORT_VLAN1_DEFAULT_CVID_S); 
     570                vlan2 = (portmask << AR934X_PORT_VLAN2_PORT_VID_MEM_S) | 
     571                        (mode << AR934X_PORT_VLAN2_8021Q_MODE_S); 
     572                ar7240sw_reg_write(mii, AR934X_REG_PORT_VLAN1(port), vlan1); 
     573                ar7240sw_reg_write(mii, AR934X_REG_PORT_VLAN2(port), vlan2); 
     574        } else { 
     575                u32 vlan; 
     576 
     577                vlan = vid | (mode << AR7240_PORT_VLAN_MODE_S) | 
     578                       (portmask << AR7240_PORT_VLAN_DEST_PORTS_S); 
     579 
     580                ar7240sw_reg_write(mii, AR7240_REG_PORT_VLAN(port), vlan); 
     581        } 
    552582} 
    553583 
Note: See TracChangeset for help on using the changeset viewer.