From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
To: franck.jullien@gmail.com
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH] [v2] Nios2: Add Altera TSE MAC driver
Date: Sun, 10 Apr 2011 06:06:49 +0200 [thread overview]
Message-ID: <20110410040649.GA8392@game.jcrosoft.org> (raw)
In-Reply-To: <1302358087-9756-2-git-send-email-franck.jullien@gmail.com>
On 16:08 Sat 09 Apr , franck.jullien@gmail.com wrote:
> From: Franck JULLIEN <franck.jullien@gmail.com>
>
> Add Altera Triple Speed Ethernet driver
>
> Signed-off-by: Franck JULLIEN <franck.jullien@gmail.com>
> ---
> drivers/net/Kconfig | 16 ++
> drivers/net/Makefile | 5 +-
> drivers/net/altera_tse.c | 620 ++++++++++++++++++++++++++++++++++++++++++++++
> drivers/net/altera_tse.h | 313 +++++++++++++++++++++++
> 4 files changed, 952 insertions(+), 2 deletions(-)
> create mode 100644 drivers/net/altera_tse.c
> create mode 100644 drivers/net/altera_tse.h
>
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index 6479417..19e35db 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -84,6 +84,22 @@ config DRIVER_NET_TAP
> bool "tap Ethernet driver"
> depends on LINUX
>
> +config DRIVER_NET_TSE
> + depends on NIOS2
> + bool "Altera TSE ethernet driver"
> + select MIIDEV
> + help
> + This option enables support for the Altera TSE MAC.
> +
> +config TSE_USE_DEDICATED_DESC_MEM
> + depends on DRIVER_NET_TSE
> + bool "Altera TSE uses dedicated descriptor memory"
> + help
> + This option tells the TSE driver to use an onchip memory
> + to store SGDMA descriptors. Descriptor memory is not
> + reserved with a malloc but directly mapped to the memory
> + address (defined in config.h)
> +
> source "drivers/net/usb/Kconfig"
>
> endmenu
> diff --git a/drivers/net/Makefile b/drivers/net/Makefile
> index 96d3d32..f02618b 100644
> --- a/drivers/net/Makefile
> +++ b/drivers/net/Makefile
> @@ -1,7 +1,7 @@
> -obj-$(CONFIG_DRIVER_NET_CS8900) += cs8900.o
> +obj-$(CONFIG_DRIVER_NET_CS8900) += cs8900.o
> obj-$(CONFIG_DRIVER_NET_SMC911X) += smc911x.o
> obj-$(CONFIG_DRIVER_NET_SMC91111) += smc91111.o
> -obj-$(CONFIG_DRIVER_NET_DM9000) += dm9000.o
> +obj-$(CONFIG_DRIVER_NET_DM9000) += dm9000.o
why do you touch this two?
if you want to fix the whitespace please do it in an other commit
> obj-$(CONFIG_DRIVER_NET_NETX) += netx_eth.o
> obj-$(CONFIG_DRIVER_NET_AT91_ETHER) += at91_ether.o
> obj-$(CONFIG_DRIVER_NET_MPC5200) += fec_mpc5200.o
> @@ -11,3 +11,4 @@ obj-$(CONFIG_DRIVER_NET_MACB) += macb.o
> obj-$(CONFIG_DRIVER_NET_TAP) += tap.o
> obj-$(CONFIG_MIIDEV) += miidev.o
> obj-$(CONFIG_NET_USB) += usb/
> +obj-$(CONFIG_DRIVER_NET_TSE) += altera_tse.o
> diff --git a/drivers/net/altera_tse.c b/drivers/net/altera_tse.c
> new file mode 100644
> index 0000000..2687377
> --- /dev/null
> +
> +static int tse_get_ethaddr(struct eth_device *edev, unsigned char *m)
> +{
> + /* There is no eeprom */
so return the content of the register no?
> + return -1;
> +}
> +
> +static int tse_eth_send(struct eth_device *edev, void *packet, int length)
> +{
> +
> + struct altera_tse_priv *priv = edev->priv;
> + struct alt_sgdma_registers *tx_sgdma = priv->sgdma_tx;
> + struct alt_sgdma_descriptor *tx_desc = (struct alt_sgdma_descriptor *)priv->tx_desc;
> +
> + struct alt_sgdma_descriptor *tx_desc_cur = (struct alt_sgdma_descriptor *)&tx_desc[0];
> +
> + flush_dcache_range((uint32_t)packet, (uint32_t)packet + length);
> + alt_sgdma_construct_descriptor_burst(
> + (struct alt_sgdma_descriptor *)&tx_desc[0],
> + (struct alt_sgdma_descriptor *)&tx_desc[1],
> + (uint32_t *)packet, /* read addr */
> + (uint32_t *)0, /* */
> + length, /* length or EOP ,will change for each tx */
> + 0x1, /* gen eop */
> + 0x0, /* read fixed */
> + 0x1, /* write fixed or sop */
> + 0x0, /* read burst */
> + 0x0, /* write burst */
> + 0x0 /* channel */
please use tab for indent I see other in the patch please check
> + );
> +
> + alt_sgdma_do_sync_transfer(tx_sgdma, tx_desc_cur);
> +
> + return 0;;
> +}
> +
> +static void tse_eth_halt(struct eth_device *edev)
> +{
> + struct altera_tse_priv *priv = edev->priv;
> + struct alt_sgdma_registers *rx_sgdma = priv->sgdma_rx;
> + struct alt_sgdma_registers *tx_sgdma = priv->sgdma_tx;
> +
> + writel(0, &rx_sgdma->control); /* Stop the controller and reset settings */
> + writel(0, &tx_sgdma->control); /* Stop the controller and reset settings */
> +}
> +
> +static int tse_eth_rx(struct eth_device *edev)
> +{
> + uint16_t packet_length = 0;
> +
> + struct altera_tse_priv *priv = edev->priv;
> + struct alt_sgdma_descriptor *rx_desc = (struct alt_sgdma_descriptor *)priv->rx_desc;
> + struct alt_sgdma_descriptor *rx_desc_cur = &rx_desc[0];
> + struct alt_sgdma_registers *rx_sgdma = priv->sgdma_rx;
> +
> + if (rx_desc_cur->descriptor_status &
> + ALT_SGDMA_DESCRIPTOR_STATUS_TERMINATED_BY_EOP_MSK) {
> +
> + packet_length = rx_desc->actual_bytes_transferred;
> + net_receive(NetRxPackets[0], packet_length);
> +
> + /* Clear Run */
> + rx_sgdma->control = (rx_sgdma->control & (~ALT_SGDMA_CONTROL_RUN_MSK));
> +
> + /* start descriptor again */
> + flush_dcache_range((uint32_t)(NetRxPackets[0]), (uint32_t)(NetRxPackets[0]) + PKTSIZE);
> + alt_sgdma_construct_descriptor_burst(
> + (struct alt_sgdma_descriptor *)&rx_desc[0],
> + (struct alt_sgdma_descriptor *)&rx_desc[1],
> + (uint32_t)0x0, /* read addr */
> + (uint32_t *)NetRxPackets[0], /* */
> + 0x0, /* length or EOP */
> + 0x0, /* gen eop */
> + 0x0, /* read fixed */
> + 0x0, /* write fixed or sop */
> + 0x0, /* read burst */
> + 0x0, /* write burst */
> + 0x0 /* channel */
please use tab for indent
> + );
> +
> + /* setup the sgdma */
> + alt_sgdma_do_async_transfer(priv->sgdma_rx, &rx_desc[0]);
> + }
> +
> + return 0;
> +}
> +
> +static char *get_phy_name(uint32_t phy_ID)
> +{
> + uint8_t i = 0;
> +
> + while (phy_name_table[i].phy_ID != 0) {
> + if (phy_name_table[i].phy_ID == phy_ID)
> + return phy_name_table[i].name;
> + i++;
> + }
> +
> + return "unknown";
> +}
why this?
> +
> +static int check_phy_address(struct eth_device *edev)
> +{
> + struct altera_tse_priv *priv = edev->priv;
> + uint8_t mii_bus_scan = 0;
> + uint8_t current_mii_address = 1;
> + uint32_t phy_reg;
> + uint32_t phy_ID;
> +
> + if ((priv->miidev)->address < 0)
> + mii_bus_scan = 1;
> + else
> + current_mii_address = (priv->miidev)->address;
> +
> + do {
> + /* Grab the bits from PHYIR1, and put them in the upper half */
> + phy_reg = tse_phy_read(priv->miidev, current_mii_address, MII_PHYSID1);
> + phy_ID = (phy_reg & 0xffff) << 16;
> +
> + /* Grab the bits from PHYIR2, and put them in the lower half */
> + phy_reg = tse_phy_read(priv->miidev, current_mii_address, MII_PHYSID2);
> + phy_ID |= (phy_reg & 0xffff);
> +
> + if (phy_ID != 0xffffffff) {
> + printf("PHY (%s) found at address %d\n", get_phy_name(phy_ID), current_mii_address);
> + (priv->miidev)->address = current_mii_address;
> + return 0;
> + }
> +
> + current_mii_address++;
> +
> + } while (current_mii_address < 32 && mii_bus_scan);
> +
> + return -1;
> +}
> +
why this?
Best Regards,
J.
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2011-04-10 4:14 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-09 14:08 [PATCH] [v2] Nios2: Add Altera TSE MAC driver franck.jullien
2011-04-09 14:08 ` franck.jullien
2011-04-10 4:06 ` Jean-Christophe PLAGNIOL-VILLARD [this message]
2011-04-10 7:13 ` Franck JULLIEN
2011-04-10 10:51 ` Jean-Christophe PLAGNIOL-VILLARD
2011-04-10 18:21 ` Franck JULLIEN
2011-04-11 2:37 ` Jean-Christophe PLAGNIOL-VILLARD
2011-04-11 7:23 ` Franck JULLIEN
2011-04-11 7:47 ` Sascha Hauer
2011-04-11 7:52 ` Franck JULLIEN
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110410040649.GA8392@game.jcrosoft.org \
--to=plagnioj@jcrosoft.com \
--cc=barebox@lists.infradead.org \
--cc=franck.jullien@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.