From: msokolov@ivan.Harhan.ORG (Michael Sokolov)
To: linuxppc-dev@lists.linuxppc.org, mporter@mvista.com
Cc: linux-galileo@source.mvista.com
Subject: Re: [PATCH] My GT-64260 enhancements
Date: Tue, 19 Mar 02 16:46:47 PST [thread overview]
Message-ID: <0203200046.AA08257@ivan.Harhan.ORG> (raw)
OK, guys, here again is my patch to bi_rec'ize the EV-64260-BP port, the common
GT-64260 code, and the GT-64260 Ethernet driver in linuxppc_2_4_devel (against
2_4_devel because it adds two new bi_recs to the master official bi_rec list in
bootinfo.h) with all controversial parts removed, just the bi_rec'ization.
I ask Matt Porter, the maintainer listed in linuxppc_2_4_devel/MAINTAINERS to
either push this patch into linuxppc_2_4_devel or give a good reason not to.
MS
diff -Nru a/arch/ppc/boot/common/misc-simple.c b/arch/ppc/boot/common/misc-simple.c
--- a/arch/ppc/boot/common/misc-simple.c Fri Mar 15 23:51:25 2002
+++ b/arch/ppc/boot/common/misc-simple.c Fri Mar 15 23:51:25 2002
@@ -68,6 +68,7 @@
extern void serial_close(unsigned long com_port);
extern void gunzip(void *, int, unsigned char *, int *);
extern void serial_fixups(void);
+extern struct bi_record *add_extra_bi_recs(struct bi_record *bp);
struct bi_record *
decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum)
@@ -208,6 +209,10 @@
rec = (struct bi_record *)((unsigned long)rec +
rec->size);
}
+
+#ifdef CONFIG_EV64260
+ rec = add_extra_bi_recs(rec);
+#endif
rec->tag = BI_LAST;
rec->size = sizeof(struct bi_record);
diff -Nru a/arch/ppc/boot/simple/Makefile b/arch/ppc/boot/simple/Makefile
--- a/arch/ppc/boot/simple/Makefile Fri Mar 15 23:51:24 2002
+++ b/arch/ppc/boot/simple/Makefile Fri Mar 15 23:51:24 2002
@@ -34,7 +34,7 @@
ifeq ($(CONFIG_EV64260),y)
ZIMAGE := zImage-EV64260
ZIMAGEINITRD := zImage.initrd-EV64260
-HEADHELP := direct.o misc-ev64260.o
+HEADHELP := direct.o misc-ev64260.o ev64260-birecs.o
TFTPIMAGE := /tftpboot/zImage.ev64260
endif
ifeq ($(CONFIG_GEMINI),y)
diff -Nru a/arch/ppc/boot/simple/ev64260-birecs.c b/arch/ppc/boot/simple/ev64260-birecs.c
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/arch/ppc/boot/simple/ev64260-birecs.c Fri Mar 15 23:51:27 2002
@@ -0,0 +1,118 @@
+/*
+ * arch/ppc/boot/simple/ev64260-birecs.c
+ *
+ * Generates extra bi_recs for EV-64260-BP port (GT-64260 base address and
+ * Ethernet info).
+ *
+ * Author: Michael Sokolov <msokolov@ivan.Harhan.ORG>
+ */
+
+#include <linux/types.h>
+#include <linux/elf.h>
+#include <linux/config.h>
+#include <linux/pci.h>
+
+#include <asm/page.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+#include <asm/bootinfo.h>
+#include <asm/gt64260.h>
+#include <platforms/ev64260.h>
+
+static unsigned char
+hexdigit(char ch)
+{
+ switch (ch) {
+ case '0':
+ return 0;
+ case '1':
+ return 1;
+ case '2':
+ return 2;
+ case '3':
+ return 3;
+ case '4':
+ return 4;
+ case '5':
+ return 5;
+ case '6':
+ return 6;
+ case '7':
+ return 7;
+ case '8':
+ return 8;
+ case '9':
+ return 9;
+ case 'A':
+ case 'a':
+ return 10;
+ case 'B':
+ case 'b':
+ return 11;
+ case 'C':
+ case 'c':
+ return 12;
+ case 'D':
+ case 'd':
+ return 13;
+ case 'E':
+ case 'e':
+ return 14;
+ case 'F':
+ case 'f':
+ return 15;
+ }
+}
+
+static void
+eth_str2mac(char *str, unsigned char *mac)
+{
+ int i;
+
+ for (i = 0; i < 12; i += 2)
+ mac[i / 2] = (hexdigit(str[i]) << 4) |
+ hexdigit(str[i + 1]);
+}
+
+struct bi_record *
+add_extra_bi_recs(struct bi_record *bp)
+{
+ struct gt64260_eth_config *eis;
+
+ bp->tag = BI_GT64260_BASE;
+ bp->size = sizeof(struct bi_record) + 4;
+ bp->data[0] = EV64260_BRIDGE_REG_BASE;
+ bp = (struct bi_record *) ((caddr_t) bp + bp->size);
+
+ bp->tag = BI_GT64260_ETH_CFG;
+ bp->size = sizeof(struct bi_record) + 4 +
+ sizeof(struct gt64260_eth_config);
+ bp->data[0] = 0;
+ eis = (struct gt64260_eth_bootinfo *) &bp->data[1];
+ eth_str2mac(CONFIG_EV64260_ETH_0_MACADDR, eis->eth_stat_addr);
+ eis->is_rmii = 1;
+ eis->phy_addr = 4;
+ bp = (struct bi_record *) ((caddr_t) bp + bp->size);
+
+ bp->tag = BI_GT64260_ETH_CFG;
+ bp->size = sizeof(struct bi_record) + 4 +
+ sizeof(struct gt64260_eth_config);
+ bp->data[0] = 1;
+ eis = (struct gt64260_eth_bootinfo *) &bp->data[1];
+ eth_str2mac(CONFIG_EV64260_ETH_1_MACADDR, eis->eth_stat_addr);
+ eis->is_rmii = 1;
+ eis->phy_addr = 5;
+ bp = (struct bi_record *) ((caddr_t) bp + bp->size);
+
+ bp->tag = BI_GT64260_ETH_CFG;
+ bp->size = sizeof(struct bi_record) + 4 +
+ sizeof(struct gt64260_eth_config);
+ bp->data[0] = 2;
+ eis = (struct gt64260_eth_bootinfo *) &bp->data[1];
+ eth_str2mac(CONFIG_EV64260_ETH_2_MACADDR, eis->eth_stat_addr);
+ eis->is_rmii = 1;
+ eis->phy_addr = 6;
+ bp = (struct bi_record *) ((caddr_t) bp + bp->size);
+
+ return(bp);
+}
diff -Nru a/arch/ppc/config.in b/arch/ppc/config.in
--- a/arch/ppc/config.in Fri Mar 15 23:51:24 2002
+++ b/arch/ppc/config.in Fri Mar 15 23:51:24 2002
@@ -151,33 +151,15 @@
bool 'Enable MPC10x store gathering' CONFIG_MPC10X_STORE_GATHERING
fi
if [ "$CONFIG_EV64260" = "y" ]; then
define_bool CONFIG_GT64260 y
define_int CONFIG_SERIAL_CONSOLE_BAUD 115200
-fi
-
-if [ "$CONFIG_GT64260" = "y" ]; then
- mainmenu_option next_comment
- comment 'Galileo GT64260 Options'
- bool 'GT64260 Ethernet Ports' CONFIG_GT64260_ETH
- if [ "$CONFIG_GT64260_ETH" = "y" ]; then
- bool ' EVB64260 - Ethernet Port 0' CONFIG_GT64260_ETH_0
- string ' MAC Address' CONFIG_GT64260_ETH_0_MACADDR "feffff000000"
- bool ' EVB64260 - Ethernet Port 1' CONFIG_GT64260_ETH_1
- string ' MAC Address' CONFIG_GT64260_ETH_1_MACADDR "feffff000001"
- bool ' EVB64260 - Ethernet Port 2' CONFIG_GT64260_ETH_2
- string ' MAC Address' CONFIG_GT64260_ETH_2_MACADDR "feffff000002"
- fi
- bool 'GT64260 MPSC Serial Ports' CONFIG_GT64260_MPSC
- if [ "$CONFIG_GT64260_MPSC" = "y" ]; then
- bool ' MPSC Port 0' CONFIG_GT64260_MPSC_0
- bool ' MPSC Port 1' CONFIG_GT64260_MPSC_1
- bool ' MPSC Port 0 as system console' CONFIG_GT64260_CONSOLE
- fi
- if [ "$CONFIG_GT64260_CONSOLE" = "y" ]; then
- define_bool CONFIG_SERIAL_CONSOLE y
- fi
- endmenu
+ mainmenu_option next_comment
+ comment 'EV-64260-BP zImage Wrapper Options'
+ string 'Ethernet 0 MAC Address' CONFIG_EV64260_ETH_0_MACADDR "feffff000000"
+ string 'Ethernet 1 MAC Address' CONFIG_EV64260_ETH_1_MACADDR "feffff000001"
+ string 'Ethernet 2 MAC Address' CONFIG_EV64260_ETH_2_MACADDR "feffff000002"
+ endmenu
fi
if [ "$CONFIG_K2" = "y" ]; then
diff -Nru a/arch/ppc/kernel/gt64260_common.c b/arch/ppc/kernel/gt64260_common.c
--- a/arch/ppc/kernel/gt64260_common.c Fri Mar 15 23:51:26 2002
+++ b/arch/ppc/kernel/gt64260_common.c Fri Mar 15 23:51:26 2002
@@ -58,6 +58,7 @@
u32 gt64260_base; /* Virtual base address of 64260's regs */
+u32 gt64260_phys_base; /* Physical base address of 64260's regs */
u32 gt64260_revision; /* Revision of the chip */
u8 gt64260_pci_exclude_bridge = TRUE;
diff -Nru a/arch/ppc/kernel/setup.c b/arch/ppc/kernel/setup.c
--- a/arch/ppc/kernel/setup.c Fri Mar 15 23:51:25 2002
+++ b/arch/ppc/kernel/setup.c Fri Mar 15 23:51:25 2002
@@ -35,6 +35,7 @@
#include <asm/uaccess.h>
#include <asm/system.h>
#include <asm/pmac_feature.h>
+#include <asm/gt64260.h>
#if defined CONFIG_KGDB
#include <asm/kgdb.h>
@@ -491,6 +492,18 @@
case BI_MEMSIZE:
boot_mem_size = data[0];
break;
+#ifdef CONFIG_GT64260
+ case BI_GT64260_BASE:
+ gt64260_phys_base = data[0];
+ break;
+#ifdef CONFIG_GT64260_ETH
+ case BI_GT64260_ETH_CFG:
+ gt64260_eth_enable |= 1 << data[0];
+ bcopy(&data[1], >64260_eth_config[data[0]],
+ sizeof(struct gt64260_eth_config));
+ break;
+#endif /* CONFIG_GT64260_ETH */
+#endif /* CONFIG_GT64260 */
}
rec = (struct bi_record *)((ulong)rec + rec->size);
}
diff -Nru a/arch/ppc/platforms/ev64260_setup.c b/arch/ppc/platforms/ev64260_setup.c
--- a/arch/ppc/platforms/ev64260_setup.c Fri Mar 15 23:51:26 2002
+++ b/arch/ppc/platforms/ev64260_setup.c Fri Mar 15 23:51:26 2002
@@ -105,7 +105,7 @@
GT64260_BRIDGE_INFO_DEFAULT(&info, ev64260_find_end_of_memory());
/* Lookup PCI host bridges */
- if (gt64260_find_bridges(EV64260_BRIDGE_REG_BASE,
+ if (gt64260_find_bridges(gt64260_phys_base,
&info,
ev64260_map_irq)) {
printk("Bridge initialization failed.\n");
@@ -322,7 +322,7 @@
if (mem_size == 0) {
/* Next 2 lines are a kludge for gt64260_get_mem_size() */
- gt64260_base = EV64260_BRIDGE_REG_BASE;
+ gt64260_base = gt64260_phys_base;
ev64260_set_bat();
mem_size = gt64260_get_mem_size();
}
@@ -498,7 +498,13 @@
platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
unsigned long r6, unsigned long r7)
{
- parse_bootinfo(find_bootinfo());
+ /*
+ * The GT-64260 physical base address will normally be passed in a
+ * bootinfo record, but if there isn't one the default below will
+ * remain in effect.
+ */
+ gt64260_phys_base = EV64260_BRIDGE_REG_BASE;
+ parse_bootinfo((struct bi_record *) (r3 + KERNELBASE));
isa_mem_base = 0;
@@ -530,7 +536,7 @@
#ifdef CONFIG_SERIAL_TEXT_DEBUG
ev64260_set_bat();
#ifdef CONFIG_GT64260_CONSOLE
- gt64260_base = EV64260_BRIDGE_REG_BASE;
+ gt64260_base = gt64260_phys_base;
ppc_md.progress = gt64260_mpsc_progress; /* embedded UART */
#else
ppc_md.progress = ev64260_16550_progress; /* Dev module DUART */
diff -Nru a/drivers/net/Config.in b/drivers/net/Config.in
--- a/drivers/net/Config.in Fri Mar 15 23:51:24 2002
+++ b/drivers/net/Config.in Fri Mar 15 23:51:24 2002
@@ -37,6 +37,9 @@
fi
dep_tristate ' BMAC (G3 ethernet) support' CONFIG_BMAC $CONFIG_ALL_PPC
dep_tristate ' GMAC (G4/iBook ethernet) support' CONFIG_GMAC $CONFIG_ALL_PPC
+ if [ "$CONFIG_GT64260" = "y" ]; then
+ bool ' GT64260 Ethernet Ports' CONFIG_GT64260_ETH
+ fi
if [ "$CONFIG_4xx" = "y" ]; then
if [ "$CONFIG_REDWOOD_4" = "y" -o "$CONFIG_403GCX" = "y" ]; then
tristate ' National DP83902AV (Oak ethernet) support' CONFIG_OAKNET
diff -Nru a/drivers/net/gt64260_eth.c b/drivers/net/gt64260_eth.c
--- a/drivers/net/gt64260_eth.c Fri Mar 15 23:51:25 2002
+++ b/drivers/net/gt64260_eth.c Fri Mar 15 23:51:25 2002
@@ -8,6 +8,8 @@
*
* Author: Rabeeh Khoury from Marvell
* Modified by: Mark A. Greer <mgreer@mvista.com>
+ * Modified by: Michael Sokolov <msokolov@ivan.Harhan.ORG> to configure via
+ * bootinfo records
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -54,8 +56,12 @@
#include <asm/gt64260.h>
#include "gt64260_eth.h"
-extern bd_t ppcboot_bd;
-extern int ppcboot_bd_valid;
+/*
+ * We get configured via bootinfo records.
+ * arch/ppc/kernel/setup.c:parse_bootinfo will fill in these global vars.
+ */
+struct gt64260_eth_config gt64260_eth_config[3];
+u_long gt64260_eth_enable=0; /* bottom 3 bits correspond to ports, 1=enable */
unsigned char GT64260_ETH_irq[3] = { 32, 33, 34 };
@@ -154,7 +160,7 @@
/*** SDMA ***/
- /* Serialp Port Multiplexed */ SERIAL_PORT_MULTIPLEX_REGISTER_VALUE,
+ /* Serial Port Multiplexed */ 0x1102,
/* RCRR route rx clock */ 0x0,
/* TCRR route tx clock */ 0x0,
@@ -490,34 +496,12 @@
* Input : pointer to network device structure to be filled
* Output : -ENONMEM if failed, 0 if success
*/
-void
-gt64260_eth_str2mac(char *str, unsigned char *mac)
-{
- int i;
-
- for (i = 0; i < 12; i += 2) {
- mac[i / 2] = ((isdigit(str[i]) ?
- str[i] - '0' :
- (toupper(str[i]) - 'A' + 10)) << 4) |
- (isdigit(str[i + 1]) ?
- str[i + 1] - '0' : (toupper(str[i + 1]) - 'A' + 10));
- }
-
- return;
-}
-
s32
gt64260_eth_init(struct net_device * dev)
{
-#ifdef CONFIG_GT64260_ETH_2
static u32 gt64260_eth2_initialized = 0;
-#endif /* #ifdef GT64260_ETH_P2 */
-#ifdef CONFIG_GT64260_ETH_1
static u32 gt64260_eth1_initialized = 0;
-#endif
-#ifdef CONFIG_GT64260_ETH_0
static u32 gt64260_eth0_initialized = 0;
-#endif
priv64260 *private;
ether_setup(dev); /* auto assign some of the fields by kernel */
@@ -544,64 +528,29 @@
dev->accept_fastpath = gt64260_eth_accept_fastpath;
#endif /* #ifdef CONFIG_NET_FASTROUTE */
-#if 0
-#ifdef CONFIG_PPCBOOT
- memcpy(dev->dev_addr, boardinfo.bi_enetaddr, 6);
-#else /* #ifdef CONFIG_PPCBOOT */
-#if 0
- memcpy(dev->dev_addr, eeprom_param.eth0_mac, 6);
-#else
- dev->dev_addr[0] = 0x00;
- dev->dev_addr[1] = 0xa0;
- dev->dev_addr[2] = 0xf7;
- dev->dev_addr[3] = 0x33;
- dev->dev_addr[4] = 0x34;
- dev->dev_addr[5] = 0x36;
-#endif
-#endif /* #else #ifdef CONFIG_PPCBOOT */
-#endif
-
- if (dev->base_addr == 0 || dev->base_addr == 2) {
- /* FIXME: find who else is modifying this * (other than ev64260_pci.c)
- * Maybe MPSC? - NTL */
-#ifdef TWO_ETHERNET_MII_PORTS
- if (dev->base_addr == 0) {
- /* connect port 0 to MII */
- gt_set_bits(GT64260_MPP_SERIAL_PORTS_MULTIPLEX,
- (1 << 0));
- gt_clr_bits(GT64260_MPP_SERIAL_PORTS_MULTIPLEX,
- (1 << 1));
- /* port 1 is RMII/MII */
- /* nothing */
- }
-#endif
-#ifdef THREE_ETHERNET_RMII_PORTS
+ if (dev->base_addr == 0 && !gt64260_eth_config[0].is_rmii) {
+ /* connect port 0 to MII */
+ gt_set_bits(GT64260_MPP_SERIAL_PORTS_MULTIPLEX,
+ (1 << 0));
+ gt_clr_bits(GT64260_MPP_SERIAL_PORTS_MULTIPLEX,
+ (1 << 1));
+ /* port 1 is RMII/MII */
+ /* nothing */
+ }
+ if (dev->base_addr == 0 || dev->base_addr == 2 &&
+ gt64260_eth_config[dev->base_addr].is_rmii) {
/* connect port 0+2 to RMII */
gt_clr_bits(GT64260_MPP_SERIAL_PORTS_MULTIPLEX, (1 << 0));
gt_set_bits(GT64260_MPP_SERIAL_PORTS_MULTIPLEX, (1 << 1));
/* port 1 is RMII/MII */
/* nothing */
-#endif
}
switch (dev->base_addr) {
-#ifdef CONFIG_GT64260_ETH_0 /* XXX_MIKE - broken logic? */
case 0:
if (!gt64260_eth0_initialized) {
-#ifdef CONFIG_GT64260_ETH_0_MACADDR
- gt64260_eth_str2mac(CONFIG_GT64260_ETH_0_MACADDR,
- &dev->dev_addr[0]);
-#else
- if (ppcboot_bd_valid &&
- *((unsigned long *) ppcboot_bd.bi_enetaddr) != 0) {
- memcpy(dev->dev_addr, ppcboot_bd.bi_enetaddr,
- 6);
- } else {
- printk("%s: Couldn't assign MAC address\n",
- dev->name);
- return (-ENODEV);
- }
-#endif
+ bcopy(gt64260_eth_config[0].eth_stat_addr,
+ dev->dev_addr, 6);
private->port = 0;
gt_write(GT64260_ENET_E0SDCR, (2 << 12) | (1 << 9) | (0xf << 2)); // 0000.203c
@@ -614,7 +563,8 @@
* Receive packets in 1536 bit max length and enable DSCP
*/
gt_write(GT64260_ENET_E0PCXR,
- PORT_CONTROL_EXTEND_VALUE);
+ PORT_CONTROL_EXTEND_VALUE |
+ (gt64260_eth_config[0].is_rmii ? 0x00100000 : 0));
/*
* Initialize address table for hash mode 0 with 1/2K size
@@ -625,24 +575,10 @@
return 0;
}
break;
-#endif /* #ifdef GT64260_ETH_P0 */
-#ifdef CONFIG_GT64260_ETH_1 /* XXX_MIKE - broken logic? */
case 1:
if (!gt64260_eth1_initialized) {
-#ifdef CONFIG_GT64260_ETH_1_MACADDR
- gt64260_eth_str2mac(CONFIG_GT64260_ETH_1_MACADDR,
- &dev->dev_addr[0]);
-#else
- if (ppcboot_bd_valid &&
- *((unsigned long *) ppcboot_bd.bi_enet1addr) != 0) {
- memcpy(dev->dev_addr, ppcboot_bd.bi_enet1addr,
- 6);
- } else {
- printk("%s: Couldn't assign MAC address\n",
- dev->name);
- return (-ENODEV);
- }
-#endif
+ bcopy(gt64260_eth_config[1].eth_stat_addr,
+ dev->dev_addr, 6);
private->port = 1;
gt_write(GT64260_ENET_E1SDCR, 0x0000203c);
@@ -652,7 +588,8 @@
gt_clr_bits(GT64260_ENET_E1PCR, (1 << 0));
gt_write(GT64260_ENET_E1PCXR,
- PORT_CONTROL_EXTEND_VALUE);
+ PORT_CONTROL_EXTEND_VALUE |
+ (gt64260_eth_config[1].is_rmii ? 0x00100000 : 0));
/*
* Initialize address table for hash mode 0 with 1/2K size
@@ -662,24 +599,10 @@
return 0;
}
break;
-#endif /* #ifdef GT64260_ETH_P1 */
-#ifdef CONFIG_GT64260_ETH_2
case 2:
if (!gt64260_eth2_initialized) {
-#ifdef CONFIG_GT64260_ETH_2_MACADDR
- gt64260_eth_str2mac(CONFIG_GT64260_ETH_2_MACADDR,
- &dev->dev_addr[0]);
-#else
- if (ppcboot_bd_valid &&
- *((unsigned long *) ppcboot_bd.bi_enet2addr) != 0) {
- memcpy(dev->dev_addr, ppcboot_bd.bi_enet2addr,
- 6);
- } else {
- printk("%s: Couldn't assign MAC address\n",
- dev->name);
- return (-ENODEV);
- }
-#endif
+ bcopy(gt64260_eth_config[2].eth_stat_addr,
+ dev->dev_addr, 6);
private->port = 2;
gt_write(GT64260_ENET_E2SDCR, 0x0000203c);
@@ -689,7 +612,8 @@
gt_clr_bits(GT64260_ENET_E2PCR, (1 << 0));
gt_write(GT64260_ENET_E2PCXR,
- PORT_CONTROL_EXTEND_VALUE);
+ PORT_CONTROL_EXTEND_VALUE |
+ (gt64260_eth_config[2].is_rmii ? 0x00100000 : 0));
/*
* Initialize address table for hash mode 0 with 1/2K size
@@ -699,7 +623,6 @@
return 0;
}
break;
-#endif
}
return (-ENODEV); /* Trouble if we haven't returned by this point... */
@@ -1934,13 +1857,7 @@
}
/* not busy */
-/*
- if(portNumber == 0)
- phyAddr = PHY_ADD0;
- else
- phyAddr = PHY_ADD1;
-*/
- phyAddr = PHY_ADD0 + portNumber;
+ phyAddr = gt64260_eth_config[portNumber].phy_addr;
smiReg = /*smiReg | */ (phyAddr << 16) | (SMI_OP_CODE_BIT_READ << 26) |
(MIIReg << 21) | SMI_OP_CODE_BIT_READ << 26;
@@ -1974,15 +1891,9 @@
}
struct net_device gt64260_eth_devs[] = {
-#ifdef CONFIG_GT64260_ETH_0
- {init:gt64260_eth_init,},
-#endif
-#ifdef CONFIG_GT64260_ETH_1
- {init:gt64260_eth_init,},
-#endif
-#ifdef CONFIG_GT64260_ETH_2
- {init:gt64260_eth_init,},
-#endif
+ {init: gt64260_eth_init, base_addr: 0},
+ {init: gt64260_eth_init, base_addr: 1},
+ {init: gt64260_eth_init, base_addr: 2},
};
static int __init
@@ -1990,24 +1901,12 @@
{
int cards = 0;
-#ifdef CONFIG_GT64260_ETH_0
- gt64260_eth_devs[0].base_addr = 0;
- if (register_netdev(>64260_eth_devs[0]) == 0) {
+ if ((gt64260_eth_enable & 1) && !register_netdev(>64260_eth_devs[0]))
cards++;
- }
-#endif
-#ifdef CONFIG_GT64260_ETH_1
- gt64260_eth_devs[1].base_addr = 1;
- if (register_netdev(>64260_eth_devs[1]) == 0) {
+ if ((gt64260_eth_enable & 2) && !register_netdev(>64260_eth_devs[1]))
cards++;
- }
-#endif
-#ifdef CONFIG_GT64260_ETH_2
- gt64260_eth_devs[2].base_addr = 2;
- if (register_netdev(>64260_eth_devs[2]) == 0) {
+ if ((gt64260_eth_enable & 4) && !register_netdev(>64260_eth_devs[2]))
cards++;
- }
-#endif
return cards > 0 ? 0 : -ENODEV;
}
diff -Nru a/drivers/net/gt64260_eth.h b/drivers/net/gt64260_eth.h
--- a/drivers/net/gt64260_eth.h Fri Mar 15 23:51:24 2002
+++ b/drivers/net/gt64260_eth.h Fri Mar 15 23:51:24 2002
@@ -5,6 +5,8 @@
*
* Author: Rabeeh Khoury from Marvell
* Modified by: Mark A. Greer <mgreer@mvista.com>
+ * Modified by: Michael Sokolov <msokolov@ivan.Harhan.ORG> to configure via
+ * bootinfo records
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -240,15 +242,6 @@
#define SMI_BUSY 1<<28
#define READ_VALID 1<<27
-#ifdef CONFIG_ZUMA_V2
-#define PHY_ADD0 0
-#define PHY_ADD1 1
-#else
-#define PHY_ADD0 4
-#define PHY_ADD1 5
-#define PHY_ADD2 6
-#endif
-
/* this macros are used to enable access to ETHERNET_PCXR */
#define OVERRIDE_RX_PRIORITY 1<<8
#define MIB_CLEAR_MODE 1<<16
@@ -386,14 +379,6 @@
#ifndef _DRIVER_PACK_H
#define _DRIVER_PACK_H
-#ifdef CONFIG_ZUMA_V2
-#undef THREE_ETHERNET_RMII_PORTS
-#define TWO_ETHERNET_MII_PORTS
-#else
-#define THREE_ETHERNET_RMII_PORTS
-#undef TWO_ETHERNET_MII_PORTS
-#endif
-
#define ETHERNET_PORT2 2
#define ETHERNET_PORT1 1
#define ETHERNET_PORT0 0
@@ -401,17 +386,12 @@
#define MAX_NUMBER_OF_MPSC_PORTS 3
#define MAX_NUMBER_OF_ETHERNET_PORTS 3
-#ifdef THREE_ETHERNET_RMII_PORTS
+#define MRR_REG_VALUE 0x7ffe38
+
/********/
/* RMII */
/********/
-#define NUMBER_OF_ETHERNET_PORTS 3
-#define NUMBER_OF_MPSC_PORTS 2
-#define MRR_REG_VALUE 0x7ffe38
-
-/* connect MPSC0 + 3 ports of RMII */
-#define SERIAL_PORT_MULTIPLEX_REGISTER_VALUE 0x1102
/* GALILEO value */
// 0000 0000 0001 0001 20 - RMII
// 16 - clear MIB counters
@@ -434,22 +414,12 @@
// 10 - disable fc AN
// 5:3 - 8pkt high, 1 low (100)
// 1 - bpdu trap
-#define PORT_CONTROL_EXTEND_VALUE 0x00304c20
+//#define PORT_CONTROL_EXTEND_VALUE 0x00304c20
-#define ETHERNET_DOWNLOADING_PORT ETHERNET_PORT2
-
-#else
-
-#ifdef TWO_ETHERNET_MII_PORTS
/*******/
/* MII */
/*******/
-#define NUMBER_OF_ETHERNET_PORTS 2
-#define NUMBER_OF_MPSC_PORTS 2
-#define MRR_REG_VALUE 0x7ffe38
-/* connect MPSC0 + 2 ports of MII */
-#define SERIAL_PORT_MULTIPLEX_REGISTER_VALUE 0x1101
/* GALILEO value */
// 0000 0000 0000 0001 16 - clear MIB counters
// 1000 1000 0000 0000 15:14 - 2048 (10)
@@ -470,12 +440,7 @@
// 10 - disable fc AN
// 5:3 - 8pkt high, 1 low (100)
// 1 - bpdu trap
-#define PORT_CONTROL_EXTEND_VALUE 0x00204c20
-
-#define ETHERNET_DOWNLOADING_PORT ETHERNET_PORT1
-
-#endif
-#endif
+#define PORT_CONTROL_EXTEND_VALUE 0x00204c20
#define LL_QUEUE_PRIORITY 1
#define L_QUEUE_PRIORITY 2
diff -Nru a/include/asm-ppc/bootinfo.h b/include/asm-ppc/bootinfo.h
--- a/include/asm-ppc/bootinfo.h Fri Mar 15 23:51:24 2002
+++ b/include/asm-ppc/bootinfo.h Fri Mar 15 23:51:24 2002
@@ -32,6 +32,9 @@
#define BI_SYSMAP 0x1015
#define BI_MACHTYPE 0x1016
#define BI_MEMSIZE 0x1017
+/* For systems with the GT-64260 system controller */
+#define BI_GT64260_BASE 0x1018
+#define BI_GT64260_ETH_CFG 0x1019
extern struct bi_record *find_bootinfo(void);
extern void parse_bootinfo(struct bi_record *rec);
diff -Nru a/include/asm-ppc/gt64260.h b/include/asm-ppc/gt64260.h
--- a/include/asm-ppc/gt64260.h Fri Mar 15 23:51:25 2002
+++ b/include/asm-ppc/gt64260.h Fri Mar 15 23:51:25 2002
@@ -30,6 +30,7 @@
extern u32 gt64260_base;
+extern u32 gt64260_phys_base;
extern u32 gt64260_irq_base; /* We handle the next 96 IRQs from here */
extern u32 gt64260_revision;
extern u8 gt64260_pci_exclude_bridge;
@@ -186,6 +187,14 @@
(ip)->pci_1_io_size = GT64260_PCI_1_IO_SIZE; \
(ip)->pci_1_io_swap = GT64260_CPU_PCI_SWAP_NONE; \
}
+
+/* GT64260 Ethernet configuration passed via bootinfo records */
+extern struct gt64260_eth_config {
+ u_char eth_stat_addr[6];
+ u_char is_rmii;
+ u_char phy_addr;
+} gt64260_eth_config[3];
+extern u_long gt64260_eth_enable;
/*
*****************************************************************************
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
next reply other threads:[~2002-03-20 0:46 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-03-20 0:46 Michael Sokolov [this message]
2002-03-19 22:55 ` [PATCH] My GT-64260 enhancements Mark A. Greer
-- strict thread matches above, loose matches on Subject: below --
2002-03-17 18:16 Michael Sokolov
2002-03-17 18:42 ` Dan Malek
2002-03-17 20:10 ` Michael Sokolov
2002-03-18 14:54 ` Tom Rini
2002-03-15 6:11 Michael Sokolov
2002-03-15 17:04 ` Tom Rini
2002-03-16 8:21 ` Michael Sokolov
2002-03-16 15:15 ` Tom Rini
2002-03-17 7:03 ` Michael Sokolov
2002-03-17 17:51 ` Dan Malek
2002-03-17 20:24 ` David Monro
2002-03-18 15:00 ` Tom Rini
2002-03-18 15:53 ` [Linux-galileo] " Mark A. Greer
2002-03-18 18:48 ` Tom Rini
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=0203200046.AA08257@ivan.Harhan.ORG \
--to=msokolov@ivan.harhan.org \
--cc=linux-galileo@source.mvista.com \
--cc=linuxppc-dev@lists.linuxppc.org \
--cc=mporter@mvista.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.