mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 21:54:11 +08:00
Merge branch 'ns2-amac'
Jon Mason says: ==================== add NS2 support to bgmac Changes in v6: * Use a common bgmac_phy_connect_direct (per Rafal Milecki) * Rebased on latest net-next * Added Reviewed-by to the relevant patches Changes in v5: * Change a pr_err to netdev_err (per Scott Branden) * Reword the lane swap binding documentation (per Andrew Lunn) Changes in v4: * Actually send out the lane swap binding doc patch (Per Scott Branden) * Remove unused #define (Per Andrew Lunn) Changes in v3: * Clean-up the bgmac DT binding doc (per Rob Herring) * Document the lane swap binding and make it generic (Per Andrew Lunn) Changes in v2: * Remove the PHY power-on (per Andrew Lunn) * Misc PHY clean-ups regarding comments and #defines (per Andrew Lunn) This results on none of the original PHY code from Vikas being present. So, I'm removing him as an author and giving him "Inspired-by" credit. * Move PHY lane swapping to PHY driver (per Andrew Lunn and Florian Fainelli) * Remove bgmac sleep (per Florian Fainelli) * Re-add bgmac chip reset (per Florian Fainelli and Ray Jui) * Rebased on latest net-next * Added patch for bcm54xx_auxctl_read, which is used in the BCM54810 ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
0ca6e000f5
@ -2,11 +2,17 @@ Broadcom AMAC Ethernet Controller Device Tree Bindings
|
||||
-------------------------------------------------------------
|
||||
|
||||
Required properties:
|
||||
- compatible: "brcm,amac" or "brcm,nsp-amac"
|
||||
- reg: Address and length of the GMAC registers,
|
||||
Address and length of the GMAC IDM registers
|
||||
- reg-names: Names of the registers. Must have both "amac_base" and
|
||||
"idm_base"
|
||||
- compatible: "brcm,amac"
|
||||
"brcm,nsp-amac"
|
||||
"brcm,ns2-amac"
|
||||
- reg: Address and length of the register set for the device. It
|
||||
contains the information of registers in the same order as
|
||||
described by reg-names
|
||||
- reg-names: Names of the registers.
|
||||
"amac_base": Address and length of the GMAC registers
|
||||
"idm_base": Address and length of the GMAC IDM registers
|
||||
"nicpm_base": Address and length of the NIC Port Manager
|
||||
registers (required for Northstar2)
|
||||
- interrupts: Interrupt number
|
||||
|
||||
Optional properties:
|
||||
|
@ -35,6 +35,10 @@ Optional Properties:
|
||||
- broken-turn-around: If set, indicates the PHY device does not correctly
|
||||
release the turn around line low at the end of a MDIO transaction.
|
||||
|
||||
- enet-phy-lane-swap: If set, indicates the PHY will swap the TX/RX lanes to
|
||||
compensate for the board being designed with the lanes swapped.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
ethernet-phy@0 {
|
||||
|
@ -56,6 +56,10 @@
|
||||
};
|
||||
};
|
||||
|
||||
&enet {
|
||||
status = "ok";
|
||||
};
|
||||
|
||||
&pci_phy0 {
|
||||
status = "ok";
|
||||
};
|
||||
@ -174,6 +178,7 @@
|
||||
&mdio_mux_iproc {
|
||||
mdio@10 {
|
||||
gphy0: eth-phy@10 {
|
||||
enet-phy-lane-swap;
|
||||
reg = <0x10>;
|
||||
};
|
||||
};
|
||||
|
@ -191,6 +191,18 @@
|
||||
|
||||
#include "ns2-clock.dtsi"
|
||||
|
||||
enet: ethernet@61000000 {
|
||||
compatible = "brcm,ns2-amac";
|
||||
reg = <0x61000000 0x1000>,
|
||||
<0x61090000 0x1000>,
|
||||
<0x61030000 0x100>;
|
||||
reg-names = "amac_base", "idm_base", "nicpm_base";
|
||||
interrupts = <GIC_SPI 341 IRQ_TYPE_LEVEL_HIGH>;
|
||||
phy-handle = <&gphy0>;
|
||||
phy-mode = "rgmii";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dma0: dma@61360000 {
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0x61360000 0x1000>;
|
||||
|
@ -80,6 +80,24 @@ static void bcma_bgmac_cmn_maskset32(struct bgmac *bgmac, u16 offset, u32 mask,
|
||||
bcma_maskset32(bgmac->bcma.cmn, offset, mask, set);
|
||||
}
|
||||
|
||||
static int bcma_phy_connect(struct bgmac *bgmac)
|
||||
{
|
||||
struct phy_device *phy_dev;
|
||||
char bus_id[MII_BUS_ID_SIZE + 3];
|
||||
|
||||
/* Connect to the PHY */
|
||||
snprintf(bus_id, sizeof(bus_id), PHY_ID_FMT, bgmac->mii_bus->id,
|
||||
bgmac->phyaddr);
|
||||
phy_dev = phy_connect(bgmac->net_dev, bus_id, bgmac_adjust_link,
|
||||
PHY_INTERFACE_MODE_MII);
|
||||
if (IS_ERR(phy_dev)) {
|
||||
dev_err(bgmac->dev, "PHY connection failed\n");
|
||||
return PTR_ERR(phy_dev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct bcma_device_id bgmac_bcma_tbl[] = {
|
||||
BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_4706_MAC_GBIT,
|
||||
BCMA_ANY_REV, BCMA_ANY_CLASS),
|
||||
@ -275,6 +293,10 @@ static int bgmac_probe(struct bcma_device *core)
|
||||
bgmac->cco_ctl_maskset = bcma_bgmac_cco_ctl_maskset;
|
||||
bgmac->get_bus_clock = bcma_bgmac_get_bus_clock;
|
||||
bgmac->cmn_maskset32 = bcma_bgmac_cmn_maskset32;
|
||||
if (bgmac->mii_bus)
|
||||
bgmac->phy_connect = bcma_phy_connect;
|
||||
else
|
||||
bgmac->phy_connect = bgmac_phy_connect_direct;
|
||||
|
||||
err = bgmac_enet_probe(bgmac);
|
||||
if (err)
|
||||
|
@ -14,11 +14,21 @@
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/bcma/bcma.h>
|
||||
#include <linux/brcmphy.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_mdio.h>
|
||||
#include <linux/of_net.h>
|
||||
#include "bgmac.h"
|
||||
|
||||
#define NICPM_IOMUX_CTRL 0x00000008
|
||||
|
||||
#define NICPM_IOMUX_CTRL_INIT_VAL 0x3196e000
|
||||
#define NICPM_IOMUX_CTRL_SPD_SHIFT 10
|
||||
#define NICPM_IOMUX_CTRL_SPD_10M 0
|
||||
#define NICPM_IOMUX_CTRL_SPD_100M 1
|
||||
#define NICPM_IOMUX_CTRL_SPD_1000M 2
|
||||
|
||||
static u32 platform_bgmac_read(struct bgmac *bgmac, u16 offset)
|
||||
{
|
||||
return readl(bgmac->plat.base + offset);
|
||||
@ -86,6 +96,54 @@ static void platform_bgmac_cmn_maskset32(struct bgmac *bgmac, u16 offset,
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
static void bgmac_nicpm_speed_set(struct net_device *net_dev)
|
||||
{
|
||||
struct bgmac *bgmac = netdev_priv(net_dev);
|
||||
u32 val;
|
||||
|
||||
if (!bgmac->plat.nicpm_base)
|
||||
return;
|
||||
|
||||
val = NICPM_IOMUX_CTRL_INIT_VAL;
|
||||
switch (bgmac->net_dev->phydev->speed) {
|
||||
default:
|
||||
netdev_err(net_dev, "Unsupported speed. Defaulting to 1000Mb\n");
|
||||
case SPEED_1000:
|
||||
val |= NICPM_IOMUX_CTRL_SPD_1000M << NICPM_IOMUX_CTRL_SPD_SHIFT;
|
||||
break;
|
||||
case SPEED_100:
|
||||
val |= NICPM_IOMUX_CTRL_SPD_100M << NICPM_IOMUX_CTRL_SPD_SHIFT;
|
||||
break;
|
||||
case SPEED_10:
|
||||
val |= NICPM_IOMUX_CTRL_SPD_10M << NICPM_IOMUX_CTRL_SPD_SHIFT;
|
||||
break;
|
||||
}
|
||||
|
||||
writel(val, bgmac->plat.nicpm_base + NICPM_IOMUX_CTRL);
|
||||
|
||||
bgmac_adjust_link(bgmac->net_dev);
|
||||
}
|
||||
|
||||
static int platform_phy_connect(struct bgmac *bgmac)
|
||||
{
|
||||
struct phy_device *phy_dev;
|
||||
|
||||
if (bgmac->plat.nicpm_base)
|
||||
phy_dev = of_phy_get_and_connect(bgmac->net_dev,
|
||||
bgmac->dev->of_node,
|
||||
bgmac_nicpm_speed_set);
|
||||
else
|
||||
phy_dev = of_phy_get_and_connect(bgmac->net_dev,
|
||||
bgmac->dev->of_node,
|
||||
bgmac_adjust_link);
|
||||
if (!phy_dev) {
|
||||
dev_err(bgmac->dev, "PHY connection failed\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bgmac_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
@ -102,7 +160,6 @@ static int bgmac_probe(struct platform_device *pdev)
|
||||
/* Set the features of the 4707 family */
|
||||
bgmac->feature_flags |= BGMAC_FEAT_CLKCTLST;
|
||||
bgmac->feature_flags |= BGMAC_FEAT_NO_RESET;
|
||||
bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500;
|
||||
bgmac->feature_flags |= BGMAC_FEAT_CMDCFG_SR_REV4;
|
||||
bgmac->feature_flags |= BGMAC_FEAT_TX_MASK_SETUP;
|
||||
bgmac->feature_flags |= BGMAC_FEAT_RX_MASK_SETUP;
|
||||
@ -142,6 +199,14 @@ static int bgmac_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(bgmac->plat.idm_base))
|
||||
return PTR_ERR(bgmac->plat.idm_base);
|
||||
|
||||
regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "nicpm_base");
|
||||
if (regs) {
|
||||
bgmac->plat.nicpm_base = devm_ioremap_resource(&pdev->dev,
|
||||
regs);
|
||||
if (IS_ERR(bgmac->plat.nicpm_base))
|
||||
return PTR_ERR(bgmac->plat.nicpm_base);
|
||||
}
|
||||
|
||||
bgmac->read = platform_bgmac_read;
|
||||
bgmac->write = platform_bgmac_write;
|
||||
bgmac->idm_read = platform_bgmac_idm_read;
|
||||
@ -151,6 +216,12 @@ static int bgmac_probe(struct platform_device *pdev)
|
||||
bgmac->cco_ctl_maskset = platform_bgmac_cco_ctl_maskset;
|
||||
bgmac->get_bus_clock = platform_bgmac_get_bus_clock;
|
||||
bgmac->cmn_maskset32 = platform_bgmac_cmn_maskset32;
|
||||
if (of_parse_phandle(np, "phy-handle", 0)) {
|
||||
bgmac->phy_connect = platform_phy_connect;
|
||||
} else {
|
||||
bgmac->phy_connect = bgmac_phy_connect_direct;
|
||||
bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500;
|
||||
}
|
||||
|
||||
return bgmac_enet_probe(bgmac);
|
||||
}
|
||||
@ -167,6 +238,7 @@ static int bgmac_remove(struct platform_device *pdev)
|
||||
static const struct of_device_id bgmac_of_enet_match[] = {
|
||||
{.compatible = "brcm,amac",},
|
||||
{.compatible = "brcm,nsp-amac",},
|
||||
{.compatible = "brcm,ns2-amac",},
|
||||
{},
|
||||
};
|
||||
|
||||
|
@ -1082,6 +1082,9 @@ static void bgmac_enable(struct bgmac *bgmac)
|
||||
/* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipinit */
|
||||
static void bgmac_chip_init(struct bgmac *bgmac)
|
||||
{
|
||||
/* Clear any erroneously pending interrupts */
|
||||
bgmac_write(bgmac, BGMAC_INT_STATUS, ~0);
|
||||
|
||||
/* 1 interrupt per received frame */
|
||||
bgmac_write(bgmac, BGMAC_INT_RECV_LAZY, 1 << BGMAC_IRL_FC_SHIFT);
|
||||
|
||||
@ -1388,7 +1391,7 @@ static const struct ethtool_ops bgmac_ethtool_ops = {
|
||||
* MII
|
||||
**************************************************/
|
||||
|
||||
static void bgmac_adjust_link(struct net_device *net_dev)
|
||||
void bgmac_adjust_link(struct net_device *net_dev)
|
||||
{
|
||||
struct bgmac *bgmac = netdev_priv(net_dev);
|
||||
struct phy_device *phy_dev = net_dev->phydev;
|
||||
@ -1411,8 +1414,9 @@ static void bgmac_adjust_link(struct net_device *net_dev)
|
||||
phy_print_status(phy_dev);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bgmac_adjust_link);
|
||||
|
||||
static int bgmac_phy_connect_direct(struct bgmac *bgmac)
|
||||
int bgmac_phy_connect_direct(struct bgmac *bgmac)
|
||||
{
|
||||
struct fixed_phy_status fphy_status = {
|
||||
.link = 1,
|
||||
@ -1437,24 +1441,7 @@ static int bgmac_phy_connect_direct(struct bgmac *bgmac)
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int bgmac_phy_connect(struct bgmac *bgmac)
|
||||
{
|
||||
struct phy_device *phy_dev;
|
||||
char bus_id[MII_BUS_ID_SIZE + 3];
|
||||
|
||||
/* Connect to the PHY */
|
||||
snprintf(bus_id, sizeof(bus_id), PHY_ID_FMT, bgmac->mii_bus->id,
|
||||
bgmac->phyaddr);
|
||||
phy_dev = phy_connect(bgmac->net_dev, bus_id, &bgmac_adjust_link,
|
||||
PHY_INTERFACE_MODE_MII);
|
||||
if (IS_ERR(phy_dev)) {
|
||||
dev_err(bgmac->dev, "PHY connection failed\n");
|
||||
return PTR_ERR(phy_dev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(bgmac_phy_connect_direct);
|
||||
|
||||
int bgmac_enet_probe(struct bgmac *info)
|
||||
{
|
||||
@ -1507,10 +1494,7 @@ int bgmac_enet_probe(struct bgmac *info)
|
||||
|
||||
netif_napi_add(net_dev, &bgmac->napi, bgmac_poll, BGMAC_WEIGHT);
|
||||
|
||||
if (!bgmac->mii_bus)
|
||||
err = bgmac_phy_connect_direct(bgmac);
|
||||
else
|
||||
err = bgmac_phy_connect(bgmac);
|
||||
err = bgmac_phy_connect(bgmac);
|
||||
if (err) {
|
||||
dev_err(bgmac->dev, "Cannot connect to phy\n");
|
||||
goto err_dma_free;
|
||||
|
@ -463,6 +463,7 @@ struct bgmac {
|
||||
struct {
|
||||
void *base;
|
||||
void *idm_base;
|
||||
void *nicpm_base;
|
||||
} plat;
|
||||
struct {
|
||||
struct bcma_device *core;
|
||||
@ -513,10 +514,13 @@ struct bgmac {
|
||||
u32 (*get_bus_clock)(struct bgmac *bgmac);
|
||||
void (*cmn_maskset32)(struct bgmac *bgmac, u16 offset, u32 mask,
|
||||
u32 set);
|
||||
int (*phy_connect)(struct bgmac *bgmac);
|
||||
};
|
||||
|
||||
int bgmac_enet_probe(struct bgmac *info);
|
||||
void bgmac_enet_remove(struct bgmac *bgmac);
|
||||
void bgmac_adjust_link(struct net_device *net_dev);
|
||||
int bgmac_phy_connect_direct(struct bgmac *bgmac);
|
||||
|
||||
struct mii_bus *bcma_mdio_mii_register(struct bcma_device *core, u8 phyaddr);
|
||||
void bcma_mdio_mii_unregister(struct mii_bus *mii_bus);
|
||||
@ -583,4 +587,9 @@ static inline void bgmac_set(struct bgmac *bgmac, u16 offset, u32 set)
|
||||
{
|
||||
bgmac_maskset(bgmac, offset, ~0, set);
|
||||
}
|
||||
|
||||
static inline int bgmac_phy_connect(struct bgmac *bgmac)
|
||||
{
|
||||
return bgmac->phy_connect(bgmac);
|
||||
}
|
||||
#endif /* _BGMAC_H */
|
||||
|
@ -217,7 +217,7 @@ config BROADCOM_PHY
|
||||
select BCM_NET_PHYLIB
|
||||
---help---
|
||||
Currently supports the BCM5411, BCM5421, BCM5461, BCM54616S, BCM5464,
|
||||
BCM5481 and BCM5482 PHYs.
|
||||
BCM5481, BCM54810 and BCM5482 PHYs.
|
||||
|
||||
config CICADA_PHY
|
||||
tristate "Cicada PHYs"
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/brcmphy.h>
|
||||
|
||||
#include <linux/of.h>
|
||||
|
||||
#define BRCM_PHY_MODEL(phydev) \
|
||||
((phydev)->drv->phy_id & (phydev)->drv->phy_id_mask)
|
||||
@ -30,11 +30,49 @@ MODULE_DESCRIPTION("Broadcom PHY driver");
|
||||
MODULE_AUTHOR("Maciej W. Rozycki");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
static int bcm54xx_auxctl_read(struct phy_device *phydev, u16 regnum)
|
||||
{
|
||||
/* The register must be written to both the Shadow Register Select and
|
||||
* the Shadow Read Register Selector
|
||||
*/
|
||||
phy_write(phydev, MII_BCM54XX_AUX_CTL, regnum |
|
||||
regnum << MII_BCM54XX_AUXCTL_SHDWSEL_READ_SHIFT);
|
||||
return phy_read(phydev, MII_BCM54XX_AUX_CTL);
|
||||
}
|
||||
|
||||
static int bcm54xx_auxctl_write(struct phy_device *phydev, u16 regnum, u16 val)
|
||||
{
|
||||
return phy_write(phydev, MII_BCM54XX_AUX_CTL, regnum | val);
|
||||
}
|
||||
|
||||
static int bcm54810_config(struct phy_device *phydev)
|
||||
{
|
||||
int rc, val;
|
||||
|
||||
val = bcm_phy_read_exp(phydev, BCM54810_EXP_BROADREACH_LRE_MISC_CTL);
|
||||
val &= ~BCM54810_EXP_BROADREACH_LRE_MISC_CTL_EN;
|
||||
rc = bcm_phy_write_exp(phydev, BCM54810_EXP_BROADREACH_LRE_MISC_CTL,
|
||||
val);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC);
|
||||
val &= ~MII_BCM54XX_AUXCTL_SHDWSEL_MISC_RGMII_SKEW_EN;
|
||||
val |= MII_BCM54XX_AUXCTL_MISC_WREN;
|
||||
rc = bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC,
|
||||
val);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
val = bcm_phy_read_shadow(phydev, BCM54810_SHD_CLK_CTL);
|
||||
val &= ~BCM54810_SHD_CLK_CTL_GTXCLK_EN;
|
||||
rc = bcm_phy_write_shadow(phydev, BCM54810_SHD_CLK_CTL, val);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Needs SMDSP clock enabled via bcm54xx_phydsp_config() */
|
||||
static int bcm50610_a0_workaround(struct phy_device *phydev)
|
||||
{
|
||||
@ -207,6 +245,12 @@ static int bcm54xx_config_init(struct phy_device *phydev)
|
||||
(phydev->dev_flags & PHY_BRCM_AUTO_PWRDWN_ENABLE))
|
||||
bcm54xx_adjust_rxrefclk(phydev);
|
||||
|
||||
if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM54810) {
|
||||
err = bcm54810_config(phydev);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
bcm54xx_phydsp_config(phydev);
|
||||
|
||||
return 0;
|
||||
@ -304,6 +348,7 @@ static int bcm5482_read_status(struct phy_device *phydev)
|
||||
|
||||
static int bcm5481_config_aneg(struct phy_device *phydev)
|
||||
{
|
||||
struct device_node *np = phydev->mdio.dev.of_node;
|
||||
int ret;
|
||||
|
||||
/* Aneg firsly. */
|
||||
@ -334,6 +379,14 @@ static int bcm5481_config_aneg(struct phy_device *phydev)
|
||||
phy_write(phydev, 0x18, reg);
|
||||
}
|
||||
|
||||
if (of_property_read_bool(np, "enet-phy-lane-swap")) {
|
||||
/* Lane Swap - Undocumented register...magic! */
|
||||
ret = bcm_phy_write_exp(phydev, MII_BCM54XX_EXP_SEL_ER + 0x9,
|
||||
0x11B);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -567,6 +620,18 @@ static struct phy_driver broadcom_drivers[] = {
|
||||
.read_status = genphy_read_status,
|
||||
.ack_interrupt = bcm_phy_ack_intr,
|
||||
.config_intr = bcm_phy_config_intr,
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM54810,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM54810",
|
||||
.features = PHY_GBIT_FEATURES |
|
||||
SUPPORTED_Pause | SUPPORTED_Asym_Pause,
|
||||
.flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
|
||||
.config_init = bcm54xx_config_init,
|
||||
.config_aneg = bcm5481_config_aneg,
|
||||
.read_status = genphy_read_status,
|
||||
.ack_interrupt = bcm_phy_ack_intr,
|
||||
.config_intr = bcm_phy_config_intr,
|
||||
}, {
|
||||
.phy_id = PHY_ID_BCM5482,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
@ -651,6 +716,7 @@ static struct mdio_device_id __maybe_unused broadcom_tbl[] = {
|
||||
{ PHY_ID_BCM54616S, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5464, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5481, 0xfffffff0 },
|
||||
{ PHY_ID_BCM54810, 0xfffffff0 },
|
||||
{ PHY_ID_BCM5482, 0xfffffff0 },
|
||||
{ PHY_ID_BCM50610, 0xfffffff0 },
|
||||
{ PHY_ID_BCM50610M, 0xfffffff0 },
|
||||
|
@ -13,6 +13,7 @@
|
||||
#define PHY_ID_BCM5241 0x0143bc30
|
||||
#define PHY_ID_BCMAC131 0x0143bc70
|
||||
#define PHY_ID_BCM5481 0x0143bca0
|
||||
#define PHY_ID_BCM54810 0x03625d00
|
||||
#define PHY_ID_BCM5482 0x0143bcb0
|
||||
#define PHY_ID_BCM5411 0x00206070
|
||||
#define PHY_ID_BCM5421 0x002060e0
|
||||
@ -56,6 +57,7 @@
|
||||
#define PHY_BRCM_EXT_IBND_TX_ENABLE 0x00002000
|
||||
#define PHY_BRCM_CLEAR_RGMII_MODE 0x00004000
|
||||
#define PHY_BRCM_DIS_TXCRXC_NOENRGY 0x00008000
|
||||
|
||||
/* Broadcom BCM7xxx specific workarounds */
|
||||
#define PHY_BRCM_7XXX_REV(x) (((x) >> 8) & 0xff)
|
||||
#define PHY_BRCM_7XXX_PATCH(x) ((x) & 0xff)
|
||||
@ -110,6 +112,8 @@
|
||||
#define MII_BCM54XX_AUXCTL_MISC_FORCE_AMDIX 0x0200
|
||||
#define MII_BCM54XX_AUXCTL_MISC_RDSEL_MISC 0x7000
|
||||
#define MII_BCM54XX_AUXCTL_SHDWSEL_MISC 0x0007
|
||||
#define MII_BCM54XX_AUXCTL_SHDWSEL_READ_SHIFT 12
|
||||
#define MII_BCM54XX_AUXCTL_SHDWSEL_MISC_RGMII_SKEW_EN (1 << 8)
|
||||
|
||||
#define MII_BCM54XX_AUXCTL_SHDWSEL_MASK 0x0007
|
||||
|
||||
@ -191,6 +195,12 @@
|
||||
#define BCM5482_SSD_SGMII_SLAVE_EN 0x0002 /* Slave mode enable */
|
||||
#define BCM5482_SSD_SGMII_SLAVE_AD 0x0001 /* Slave auto-detection */
|
||||
|
||||
/* BCM54810 Registers */
|
||||
#define BCM54810_EXP_BROADREACH_LRE_MISC_CTL (MII_BCM54XX_EXP_SEL_ER + 0x90)
|
||||
#define BCM54810_EXP_BROADREACH_LRE_MISC_CTL_EN (1 << 0)
|
||||
#define BCM54810_SHD_CLK_CTL 0x3
|
||||
#define BCM54810_SHD_CLK_CTL_GTXCLK_EN (1 << 9)
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Fast Ethernet Transceiver definitions. */
|
||||
|
Loading…
Reference in New Issue
Block a user