diff options
author | hauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2013-10-02 22:25:26 +0000 |
---|---|---|
committer | hauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2013-10-02 22:25:26 +0000 |
commit | 81d28e0f3e54f4ff3b3a66248226bbae36524fc9 (patch) | |
tree | 7855b38a68a728b1a4bfa284185bbce33b2487f7 /target/linux/generic/patches-3.10/772-bgmac-add-supprot-for-BCM4707.patch | |
parent | 1c9bda40466a868356333fdf573a4094f8cc4bc3 (diff) |
kernel: bgmac: move other bgmac patches to generic
The bgmac driver will be used on the brcm47xx and the bcm53xx target.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38289 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic/patches-3.10/772-bgmac-add-supprot-for-BCM4707.patch')
-rw-r--r-- | target/linux/generic/patches-3.10/772-bgmac-add-supprot-for-BCM4707.patch | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/target/linux/generic/patches-3.10/772-bgmac-add-supprot-for-BCM4707.patch b/target/linux/generic/patches-3.10/772-bgmac-add-supprot-for-BCM4707.patch new file mode 100644 index 0000000000..5b8901c170 --- /dev/null +++ b/target/linux/generic/patches-3.10/772-bgmac-add-supprot-for-BCM4707.patch @@ -0,0 +1,117 @@ +bgmac: add supprot for BCM4707 + +Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> + +--- a/drivers/net/ethernet/broadcom/bgmac.c ++++ b/drivers/net/ethernet/broadcom/bgmac.c +@@ -864,6 +864,8 @@ static void bgmac_speed(struct bgmac *bg + set |= BGMAC_CMDCFG_ES_100; + if (speed & BGMAC_SPEED_1000) + set |= BGMAC_CMDCFG_ES_1000; ++ if (speed & BGMAC_SPEED_2500) ++ set |= BGMAC_CMDCFG_ES_2500; + if (!bgmac->full_duplex) + set |= BGMAC_CMDCFG_HD; + bgmac_cmdcfg_maskset(bgmac, mask, set, true); +@@ -871,13 +873,28 @@ static void bgmac_speed(struct bgmac *bg + + static void bgmac_miiconfig(struct bgmac *bgmac) + { +- u8 imode = (bgmac_read(bgmac, BGMAC_DEV_STATUS) & BGMAC_DS_MM_MASK) >> +- BGMAC_DS_MM_SHIFT; +- if (imode == 0 || imode == 1) { +- if (bgmac->autoneg) +- bgmac_speed(bgmac, BGMAC_SPEED_100); +- else ++ struct bcma_device *core = bgmac->core; ++ struct bcma_chipinfo *ci = &core->bus->chipinfo; ++ ++ if (ci->id != BCMA_CHIP_ID_BCM4707 && ++ ci->id != BCMA_CHIP_ID_BCM53018) { ++ if (bgmac->autoneg) { ++ bcma_awrite32(core, BCMA_IOCTL, ++ bcma_aread32(core, BCMA_IOCTL) | 0x44); ++ ++ bgmac_speed(bgmac, BGMAC_SPEED_2500); ++ } else { + bgmac_speed(bgmac, bgmac->speed); ++ } ++ } else { ++ u8 imode = (bgmac_read(bgmac, BGMAC_DEV_STATUS) & ++ BGMAC_DS_MM_MASK) >> BGMAC_DS_MM_SHIFT; ++ if (imode == 0 || imode == 1) { ++ if (bgmac->autoneg) ++ bgmac_speed(bgmac, BGMAC_SPEED_100); ++ else ++ bgmac_speed(bgmac, bgmac->speed); ++ } + } + } + +@@ -923,7 +940,8 @@ static void bgmac_chip_reset(struct bgma + + bcma_core_enable(core, flags); + +- if (core->id.rev > 2) { ++ if (core->id.rev > 2 && ci->id != BCMA_CHIP_ID_BCM4707 && ++ ci->id != BCMA_CHIP_ID_BCM53018) { + bgmac_set(bgmac, BCMA_CLKCTLST, 1 << 8); + bgmac_wait_value(bgmac->core, BCMA_CLKCTLST, 1 << 24, 1 << 24, + 1000); +@@ -944,10 +962,13 @@ static void bgmac_chip_reset(struct bgma + et_swtype &= 0x0f; + et_swtype <<= 4; + sw_type = et_swtype; +- } else if (ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg == 9) { ++ } else if (ci->id == BCMA_CHIP_ID_BCM5357 && ++ ci->pkg == BCMA_PKG_ID_BCM5358) { + sw_type = BGMAC_CHIPCTL_1_SW_TYPE_EPHYRMII; +- } else if ((ci->id != BCMA_CHIP_ID_BCM53572 && ci->pkg == 10) || +- (ci->id == BCMA_CHIP_ID_BCM53572 && ci->pkg == 9)) { ++ } else if ((ci->id != BCMA_CHIP_ID_BCM53572 && ++ ci->pkg == BCMA_PKG_ID_BCM47186) || ++ (ci->id == BCMA_CHIP_ID_BCM53572 && ++ ci->pkg == BCMA_PKG_ID_BCM47188)) { + sw_type = BGMAC_CHIPCTL_1_IF_TYPE_RGMII | + BGMAC_CHIPCTL_1_SW_TYPE_RGMII; + } +@@ -1054,12 +1075,15 @@ static void bgmac_enable(struct bgmac *b + break; + } + +- rxq_ctl = bgmac_read(bgmac, BGMAC_RXQ_CTL); +- rxq_ctl &= ~BGMAC_RXQ_CTL_MDP_MASK; +- bp_clk = bcma_pmu_get_bus_clock(&bgmac->core->bus->drv_cc) / 1000000; +- mdp = (bp_clk * 128 / 1000) - 3; +- rxq_ctl |= (mdp << BGMAC_RXQ_CTL_MDP_SHIFT); +- bgmac_write(bgmac, BGMAC_RXQ_CTL, rxq_ctl); ++ if (ci->id != BCMA_CHIP_ID_BCM4707 && ++ ci->id != BCMA_CHIP_ID_BCM53018) { ++ rxq_ctl = bgmac_read(bgmac, BGMAC_RXQ_CTL); ++ rxq_ctl &= ~BGMAC_RXQ_CTL_MDP_MASK; ++ bp_clk = bcma_pmu_get_bus_clock(&bgmac->core->bus->drv_cc) / 1000000; ++ mdp = (bp_clk * 128 / 1000) - 3; ++ rxq_ctl |= (mdp << BGMAC_RXQ_CTL_MDP_SHIFT); ++ bgmac_write(bgmac, BGMAC_RXQ_CTL, rxq_ctl); ++ } + } + + /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipinit */ +--- a/drivers/net/ethernet/broadcom/bgmac.h ++++ b/drivers/net/ethernet/broadcom/bgmac.h +@@ -185,6 +185,7 @@ + #define BGMAC_CMDCFG_ES_10 0x00000000 + #define BGMAC_CMDCFG_ES_100 0x00000004 + #define BGMAC_CMDCFG_ES_1000 0x00000008 ++#define BGMAC_CMDCFG_ES_2500 0x0000000C + #define BGMAC_CMDCFG_PROM 0x00000010 /* Set to activate promiscuous mode */ + #define BGMAC_CMDCFG_PAD_EN 0x00000020 + #define BGMAC_CMDCFG_CF 0x00000040 +@@ -345,6 +346,7 @@ + #define BGMAC_SPEED_10 0x0001 + #define BGMAC_SPEED_100 0x0002 + #define BGMAC_SPEED_1000 0x0004 ++#define BGMAC_SPEED_2500 0x0008 + + #define BGMAC_WEIGHT 64 + |