[U-Boot] [PATCH] arm, davinci_emac: fixup
Prabhakar Lad
prabhakar.csengg at gmail.com
Wed Nov 9 12:39:55 CET 2011
Hi Heiko,
On Wed, Nov 9, 2011 at 11:56 AM, Heiko Schocher <hs at denx.de> wrote:
> since commits:
> davinci: emac: add support for more than 1 PHYs
> 062fe7d332c28ede25626f448681e43d76bb312e
>
> davinci: remove obsolete macro CONFIG_EMAC_MDIO_PHY_NUM
> fb1d6332b5430b90a8fa8ebab709f33a60e9f816
>
> I get following warning on the enbw_cmc board:
>
> Err: serial
> Net: 5 ETH PHY detected
> miiphy_register: non unique device name 'KSZ8873 @ 0x01'
> DaVinci-EMAC
> Hit any key to stop autoboot: 0
>
> Also I see some debug printfs:
>
> => run load
> + emac_close
> + emac_ch_teardown
> - emac_ch_teardown
> + emac_ch_teardown
> - emac_ch_teardown
> - emac_close
> + emac_open
> - emac_open
> Using DaVinci-EMAC device
>
> reason is 062fe7d332c28ede25626f448681e43d76bb312e new define MAX_PHY.
> This is set to 3! I get on this board 5 active phys, so
> this leads in wrong memory writes ...
>
> so I changed:
>
> - MAX_PHY from 3 to 7
> - print an error message if more then MAX_PHYs are
> detected.
> - fill the active_phy_addr array in a for loop with
> 0xff
> - changed printf() in debug_emac()
>
> Signed-off-by: Heiko Schocher <hs at denx.de>
> Cc: Sandeep Paulraj <s-paulraj at ti.com>
> Cc: Albert ARIBAUD <albert.u.boot at aribaud.net>
> Cc: Wolfgang Denk <wd at denx.de>
> Cc: Manjunath Hadli <manjunath.hadli at ti.com>
> ---
> drivers/net/davinci_emac.c | 17 +++++++++++------
> 1 files changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c
> index fa31159..a31e9f1 100644
> --- a/drivers/net/davinci_emac.c
> +++ b/drivers/net/davinci_emac.c
> @@ -85,7 +85,7 @@ static int emac_rx_queue_active = 0;
> /* Receive packet buffers */
> static unsigned char emac_rx_buffers[EMAC_MAX_RX_BUFFERS *
> (EMAC_MAX_ETHERNET_PKT_SIZE + EMAC_PKT_ALIGN)];
>
> -#define MAX_PHY 3
> +#define MAX_PHY 7
>
> /* PHY address for a discovered PHY (0xff - not found) */
> static u_int8_t active_phy_addr[MAX_PHY] = { 0xff, 0xff, 0xff };
> @@ -160,9 +160,8 @@ static int davinci_eth_phy_detect(void)
> int j;
> unsigned int count = 0;
>
> - active_phy_addr[0] = 0xff;
> - active_phy_addr[1] = 0xff;
> - active_phy_addr[2] = 0xff;
> + for (i = 0; i < MAX_PHY; i++)
> + active_phy_addr[i] = 0xff;
>
> udelay(1000);
> phy_act_state = readl(&adap_mdio->ALIVE);
> @@ -175,7 +174,13 @@ static int davinci_eth_phy_detect(void)
> for (i = 0, j = 0; i < 32; i++)
> if (phy_act_state & (1 << i)) {
> count++;
> - active_phy_addr[j++] = i;
> + if (count < MAX_PHY)
> + active_phy_addr[j++] = i;
> + else {
> + printf("%s: to much PHYs detected.\n",
> + __func__);
>
why not make here count = 0 and then break, so that later
in davinci_emac_initialize() it wont initializes the phy's
Regards,
--Prabhakar Lad
> + break;
> + }
> }
>
> num_phy = count;
> @@ -752,7 +757,7 @@ int davinci_emac_initialize(void)
> if (!ret)
> return(0);
> else
> - printf(" %d ETH PHY detected\n", ret);
> + debug_emac(" %d ETH PHY detected\n", ret);
>
> /* Get PHY ID and initialize phy_ops for a detected PHY */
> for (i = 0; i < num_phy; i++) {
> --
> 1.7.6.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
More information about the U-Boot
mailing list