diff mbox

[U-Boot,1/5] net: fec_mxc: Add 1000 Mbps selection

Message ID 1326456604-25137-1-git-send-email-dirk.behme@de.bosch.com
State Changes Requested
Headers show

Commit Message

Behme Dirk (CM/ESO2) Jan. 13, 2012, 12:10 p.m. UTC
From: Troy Kisky <troy.kisky@boundarydevices.com>

Add 1000 Mbps selection and print negotiated speed

Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
CC: Troy Kisky <troy.kisky@boundarydevices.com>
CC: Stefano Babic <sbabic@denx.de>
CC: Marek Vasut <marek.vasut@gmail.com>
---
 drivers/net/fec_mxc.c |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

Comments

Marek Vasut Jan. 13, 2012, 12:42 p.m. UTC | #1
> From: Troy Kisky <troy.kisky@boundarydevices.com>
> 
> Add 1000 Mbps selection and print negotiated speed
> 
> Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
> CC: Troy Kisky <troy.kisky@boundarydevices.com>
> CC: Stefano Babic <sbabic@denx.de>
> CC: Marek Vasut <marek.vasut@gmail.com>
> ---
>  drivers/net/fec_mxc.c |   16 +++++++++++++++-
>  1 files changed, 15 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
> index ed73353..9e8ef7a 100644
> --- a/drivers/net/fec_mxc.c
> +++ b/drivers/net/fec_mxc.c
> @@ -379,6 +379,7 @@ static int fec_set_hwaddr(struct eth_device *dev)
>  static int fec_open(struct eth_device *edev)
>  {
>  	struct fec_priv *fec = (struct fec_priv *)edev->priv;
> +	int speed;
> 
>  	debug("fec_open: fec_open(dev)\n");
>  	/* full-duplex, heartbeat disabled */
> @@ -428,8 +429,21 @@ static int fec_open(struct eth_device *edev)
>  #endif
> 
>  	miiphy_wait_aneg(edev);
> -	miiphy_speed(edev->name, fec->phy_id);
> +	speed = miiphy_speed(edev->name, fec->phy_id);
>  	miiphy_duplex(edev->name, fec->phy_id);
> +#ifdef CONFIG_MX6Q
> +	{
> +		u32 ecr = readl(&fec->eth->ecntrl) & ~(0x1 << 5);
> +		u32 rcr = (readl(&fec->eth->r_cntrl) & ~0x300) | 0x44;

Why the magic?

> +		if (speed == _1000BASET)
> +			ecr |= (0x1 << 5);
> +		else if (speed != _100BASET)
> +			rcr |= (0x1 << 9);
> +		writel(ecr, &fec->eth->ecntrl);
> +		writel(rcr, &fec->eth->r_cntrl);
> +	}
> +#endif
> +	printf("%s:Speed=%i\n", __func__, speed);

debug()

> 
>  	/*
>  	 * Enable SmartDMA receive task
diff mbox

Patch

diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
index ed73353..9e8ef7a 100644
--- a/drivers/net/fec_mxc.c
+++ b/drivers/net/fec_mxc.c
@@ -379,6 +379,7 @@  static int fec_set_hwaddr(struct eth_device *dev)
 static int fec_open(struct eth_device *edev)
 {
 	struct fec_priv *fec = (struct fec_priv *)edev->priv;
+	int speed;
 
 	debug("fec_open: fec_open(dev)\n");
 	/* full-duplex, heartbeat disabled */
@@ -428,8 +429,21 @@  static int fec_open(struct eth_device *edev)
 #endif
 
 	miiphy_wait_aneg(edev);
-	miiphy_speed(edev->name, fec->phy_id);
+	speed = miiphy_speed(edev->name, fec->phy_id);
 	miiphy_duplex(edev->name, fec->phy_id);
+#ifdef CONFIG_MX6Q
+	{
+		u32 ecr = readl(&fec->eth->ecntrl) & ~(0x1 << 5);
+		u32 rcr = (readl(&fec->eth->r_cntrl) & ~0x300) | 0x44;
+		if (speed == _1000BASET)
+			ecr |= (0x1 << 5);
+		else if (speed != _100BASET)
+			rcr |= (0x1 << 9);
+		writel(ecr, &fec->eth->ecntrl);
+		writel(rcr, &fec->eth->r_cntrl);
+	}
+#endif
+	printf("%s:Speed=%i\n", __func__, speed);
 
 	/*
 	 * Enable SmartDMA receive task