All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Oliver Fuchs" <olivers.lists@gmx.net>
To: LinuxPPC <linuxppc-embedded@lists.linuxppc.org>
Cc: Dan Malek <dan@embeddededge.com>
Subject: Re: MPC82xx enet on SCC3
Date: Tue, 17 Aug 2004 11:49:06 +0200	[thread overview]
Message-ID: <4121F0B2.31001.D95ECA@localhost> (raw)
In-Reply-To: <B97F656A-EFB0-11D8-A698-003065F9B7DC@embeddededge.com>

[-- Attachment #1: Mail message body --]
[-- Type: text/plain, Size: 1282 bytes --]

From:           	Dan Malek <dan@embeddededge.com>
>
> Apologies, I had FCC on the brain.
>
never mind

> > I have modified arch/ppc/config.in and arch/ppc/8260_io/enet.c so
> > that it fits to SCC1-4 w/o further modifications there.
The idea is to have some board specific defines within
arch/ppc/platforms/<board>.h

like this:
--snip--
/* defines for arch/ppc/8260_io/enet.c */

#define PB_ENET_RXD      ((uint)0x00020000)
#define PD_ENET_RXD      ((uint)0x00000000)

#define PB_ENET_TXD	     ((uint)0x00000000)
#define PD_ENET_TXD      ((uint)0x00000080)

#define PC_ENET_CLSN     ((uint)0x00100000)

#define PC_ENET_TXCLK    ((uint)0x00000020)
#define PC_ENET_RXCLK    ((uint)0x00000010)

#define PB_ENET_LBK      ((uint)0x00400000)


#define CMXSCR_RS3CS_CLK5  0x00002000	/* SCC3 Rx Clock Source CLK5 */
#define CMXSCR_TS3CS_CLK6  0x00000500	/* SCC3 Tx Clock Source CLK6 */

#define CMX_CLK_ROUTE	((uint)(CMXSCR_RS3CS_CLK5 | CMXSCR_TS3CS_CLK6))

/* #define SCC_ENET_PIN_ENABLE */
--snap--

mind the defines for RxD and TxD for both ports B and D
it's needed to decide which port is used
SCC_ENET_PIN_ENABLE could be used to setup LBK, FDE or DSQ

> Just send it to me and I'll get it into some source base :-)
>
here you are
It's tested for SCC3.


Best regards,
Oliver Fuchs


[-- Attachment #2: Text from file 'sccenet.patch' --]
[-- Type: text/plain, Size: 6561 bytes --]

diff -purN linux-2.4.24/arch/ppc/8260_io/Config.in linux-2.4.24.scc/arch/ppc/8260_io/Config.in
--- linux-2.4.24/arch/ppc/8260_io/Config.in	2003-10-30 01:32:09.000000000 +0100
+++ linux-2.4.24.scc/arch/ppc/8260_io/Config.in	2004-08-16 16:55:45.000000000 +0200
@@ -7,10 +7,11 @@ bool 'Enable SCC Console' CONFIG_SCC_CON
 if [ "$CONFIG_NET_ETHERNET" = "y" ]; then
   bool 'CPM SCC Ethernet' CONFIG_SCC_ENET
   if [ "$CONFIG_SCC_ENET" = "y" ]; then
-  bool 'Ethernet on SCC1' CONFIG_SCC1_ENET
-    if [ "$CONFIG_SCC1_ENET" != "y" ]; then
-      bool 'Ethernet on SCC2' CONFIG_SCC2_ENET
-    fi
+  choice 'SCC Ethernet' \
+         "SCC1 CONFIG_SCC1_ENET \
+          SCC2 CONFIG_SCC2_ENET \
+          SCC3 CONFIG_SCC3_ENET \
+          SCC4 CONFIG_SCC4_ENET" SCC1
   fi
 #
 #  CONFIG_FEC_ENET is only used to get netdevices to call our init
diff -purN linux-2.4.24/arch/ppc/8260_io/enet.c linux-2.4.24.scc/arch/ppc/8260_io/enet.c
--- linux-2.4.24/arch/ppc/8260_io/enet.c	2003-10-30 01:32:09.000000000 +0100
+++ linux-2.4.24.scc/arch/ppc/8260_io/enet.c	2004-08-16 15:54:23.000000000 +0200
@@ -129,29 +129,95 @@ static void set_multicast_list(struct ne

 /* These will be configurable for the SCC choice.
 */
+#if defined(CONFIG_SCC1_ENET)
 #define CPM_ENET_BLOCK	CPM_CR_SCC1_SBLOCK
 #define CPM_ENET_PAGE	CPM_CR_SCC1_PAGE
 #define PROFF_ENET	PROFF_SCC1
 #define SCC_ENET	0
 #define SIU_INT_ENET	SIU_INT_SCC1
-
-/* These are both board and SCC dependent....
-*/
-#define PD_ENET_RXD	((uint)0x00000001)
-#define PD_ENET_TXD	((uint)0x00000002)
 #define PD_ENET_TENA	((uint)0x00000004)
 #define PC_ENET_RENA	((uint)0x00020000)
-#define PC_ENET_CLSN	((uint)0x00000004)
-#define PC_ENET_TXCLK	((uint)0x00000800)
-#define PC_ENET_RXCLK	((uint)0x00000400)
-#define CMX_CLK_ROUTE	((uint)0x25000000)
 #define CMX_CLK_MASK	((uint)0xff000000)

+#elif defined(CONFIG_SCC2_ENET)
+#define CPM_ENET_BLOCK	CPM_CR_SCC2_SBLOCK
+#define CPM_ENET_PAGE	CPM_CR_SCC2_PAGE
+#define PROFF_ENET	PROFF_SCC2
+#define SCC_ENET	1
+#define SIU_INT_ENET	SIU_INT_SCC2
+#define PD_ENET_TENA	((uint)0x00000020)
+#define PC_ENET_RENA	((uint)0x00080000)
+#define CMX_CLK_MASK	((uint)0x00ff0000)
+
+#elif defined(CONFIG_SCC3_ENET)
+#define CPM_ENET_BLOCK	CPM_CR_SCC3_SBLOCK
+#define CPM_ENET_PAGE	CPM_CR_SCC3_PAGE
+#define PROFF_ENET	PROFF_SCC3
+#define SCC_ENET	2
+#define SIU_INT_ENET	SIU_INT_SCC3
+#define PD_ENET_TENA	((uint)0x00000100)
+#define PC_ENET_RENA	((uint)0x00200000)
+#define CMX_CLK_MASK	((uint)0x0000ff00)
+
+#elif defined(CONFIG_SCC4_ENET)
+#define CPM_ENET_BLOCK	CPM_CR_SCC4_SBLOCK
+#define CPM_ENET_PAGE	CPM_CR_SCC4_PAGE
+#define PROFF_ENET	PROFF_SCC4
+#define SCC_ENET	3
+#define SIU_INT_ENET	SIU_INT_SCC4
+#define PD_ENET_TENA	((uint)0x00000800)
+#define PC_ENET_RENA	((uint)0x00800000)
+#define CMX_CLK_MASK	((uint)0x000000ff)
+
+#else
+  #error no SCC defined
+#endif
+/*
+  These are both board and SCC dependent....
+  RxD and TxD can be on port B or D
+  TENA is always on port D
+  RENA and CLSN are always on port C
+*/
+#ifndef PD_ENET_RXD
+  #define PD_ENET_RXD	((uint)0x00000001)
+#endif
+
+#ifndef PB_ENET_RXD
+  #define PB_ENET_RXD	((uint)0x00000000)
+#endif
+
+#ifndef PD_ENET_TXD
+  #define PD_ENET_TXD	((uint)0x00000002)
+#endif
+
+#ifndef PB_ENET_TXD
+  #define PB_ENET_TXD	((uint)0x00000000)
+#endif
+
+#ifndef PC_ENET_CLSN
+  #define PC_ENET_CLSN	((uint)0x00000004)
+#endif
+
+#ifndef PC_ENET_TXCLK
+  #define PC_ENET_TXCLK	((uint)0x00000800)
+#endif
+
+#ifndef PC_ENET_RXCLK
+  #define PC_ENET_RXCLK	((uint)0x00000400)
+#endif
+
+#ifndef CMX_CLK_ROUTE
+  #define CMX_CLK_ROUTE	((uint)0x25000000)
+#endif
+
+
 /* Specific to a board.
 */
+#ifdef CONFIG_EST8260
 #define PC_EST8260_ENET_LOOPBACK	((uint)0x80000000)
 #define PC_EST8260_ENET_SQE		((uint)0x40000000)
 #define PC_EST8260_ENET_NOTFD		((uint)0x20000000)
+#endif

 static int
 scc_enet_open(struct net_device *dev)
@@ -650,7 +716,7 @@ int __init scc_enet_init(void)
 	*/
 	sccp->scc_gsmrl &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT);

-	/* Configure port C and D pins for SCC Ethernet.  This
+    /* Configure port C and D pins for SCC Ethernet.  This
 	 * won't work for all SCC possibilities....it will be
 	 * board/port specific.
 	 */
@@ -659,16 +725,26 @@ int __init scc_enet_init(void)
 	io->iop_pdirc &=
 		~(PC_ENET_RENA | PC_ENET_CLSN | PC_ENET_TXCLK | PC_ENET_RXCLK);
 	io->iop_psorc &=
-		~(PC_ENET_RENA | PC_ENET_TXCLK | PC_ENET_RXCLK);
-	io->iop_psorc |= PC_ENET_CLSN;
+		~(PC_ENET_RENA | PC_ENET_TXCLK | PC_ENET_RXCLK | (PC_ENET_CLSN & 0x00550000));
+	io->iop_psorc |= (PC_ENET_CLSN & 0x1080000c);

 	io->iop_ppard |= (PD_ENET_RXD | PD_ENET_TXD | PD_ENET_TENA);
 	io->iop_pdird |= (PD_ENET_TXD | PD_ENET_TENA);
 	io->iop_pdird &= ~PD_ENET_RXD;
-	io->iop_psord |= PD_ENET_TXD;
-	io->iop_psord &= ~(PD_ENET_RXD | PD_ENET_TENA);
+	io->iop_psord |= (PD_ENET_TXD & 0x00000002);
+	io->iop_psord &= ~(PD_ENET_TENA | ((PD_ENET_RXD | PD_ENET_TXD) & 0x000006fd));
+
+    /* if RxD or TxD are connected to port B, configure it */
+    if(PB_ENET_RXD | PB_ENET_TXD)
+    {
+      io->iop_pparb |= (PB_ENET_RXD | PB_ENET_TXD);
+      io->iop_pdirb |= (PB_ENET_TXD);
+      io->iop_pdirb &= ~(PB_ENET_RXD);
+      io->iop_psorb |= PB_ENET_TXD;
+      io->iop_psorb &= ~(PB_ENET_RXD);
+    }

-	/* Configure Serial Interface clock routing.
+    /* Configure Serial Interface clock routing.
 	 * First, clear all SCC bits to zero, then set the ones we want.
 	 */
 	immap->im_cpmux.cmx_scr &= ~CMX_CLK_MASK;
@@ -819,10 +895,11 @@ int __init scc_enet_init(void)
 	 */
 	sccp->scc_pmsr = (SCC_PSMR_ENCRC | SCC_PSMR_NIB22);

-	/* It is now OK to enable the Ethernet transmitter.
+    /* It is now OK to enable the Ethernet transmitter.
 	 * Unfortunately, there are board implementation differences here.
 	 */
-	io->iop_pparc &= ~(PC_EST8260_ENET_LOOPBACK |
+	#ifdef CONFIG_EST8260
+    io->iop_pparc &= ~(PC_EST8260_ENET_LOOPBACK |
 				PC_EST8260_ENET_SQE | PC_EST8260_ENET_NOTFD);
 	io->iop_psorc &= ~(PC_EST8260_ENET_LOOPBACK |
 				PC_EST8260_ENET_SQE | PC_EST8260_ENET_NOTFD);
@@ -830,8 +907,14 @@ int __init scc_enet_init(void)
 				PC_EST8260_ENET_SQE | PC_EST8260_ENET_NOTFD);
 	io->iop_pdatc &= ~(PC_EST8260_ENET_LOOPBACK | PC_EST8260_ENET_SQE);
 	io->iop_pdatc |= PC_EST8260_ENET_NOTFD;
+    #endif
+
+    #ifdef SCC_ENET_PIN_ENABLE
+      /* SCC_ENET_PIN_ENABLE must be a valid C statement !!! */
+      SCC_ENET_PIN_ENABLE;
+    #endif

-	dev->base_addr = (unsigned long)ep;
+    dev->base_addr = (unsigned long)ep;
 	dev->priv = cep;

 	/* The CPM Ethernet specific entries in the device structure. */

      reply	other threads:[~2004-08-17  9:49 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-12 14:29 MPC82xx enet on SCC3 Oliver Fuchs
2004-08-12 16:55 ` Dan Malek
2004-08-16 14:00   ` Oliver Fuchs
2004-08-16 16:21     ` Wolfgang Denk
2004-08-16 17:40       ` Ralph Siemsen
2004-08-17  9:49       ` Oliver Fuchs
2004-08-26 10:08       ` Cramfs Limitations Song Sam
2004-08-26 15:12         ` Wolfgang Denk
2004-08-27  1:35           ` Song Sam
2004-08-27  7:38             ` Wolfgang Denk
2004-08-27  8:33               ` Song Sam
2004-08-26 10:10       ` Does ext2 based on MTD acceptable for Embedded Development? Song Sam
2004-08-27  7:08         ` Oliver Fuchs
2004-08-27  7:39           ` Wolfgang Denk
2004-08-27 10:05             ` Oliver Fuchs
2004-08-27 14:24               ` Wolfgang Denk
2004-08-16 18:18     ` MPC82xx enet on SCC3 Dan Malek
2004-08-17  9:49       ` Oliver Fuchs [this message]

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=4121F0B2.31001.D95ECA@localhost \
    --to=olivers.lists@gmx.net \
    --cc=dan@embeddededge.com \
    --cc=linuxppc-embedded@lists.linuxppc.org \
    /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.