From:                   Dan Malek <[EMAIL PROTECTED]>
>
> 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

-------------- next part --------------
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 via email to