Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
221dc269
Commit
221dc269
authored
Jan 02, 2003
by
Paul Mackerras
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://68.0.152.218/linux-2.5-8xx
into samba.org:/home/paulus/kernel/for-linus-ppc
parents
52daa1f4
60c284ac
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
231 additions
and
24 deletions
+231
-24
arch/ppc/8xx_io/Kconfig
arch/ppc/8xx_io/Kconfig
+16
-0
arch/ppc/8xx_io/fec.c
arch/ppc/8xx_io/fec.c
+75
-9
arch/ppc/platforms/ccm.h
arch/ppc/platforms/ccm.h
+4
-4
arch/ppc/platforms/tqm8xx.h
arch/ppc/platforms/tqm8xx.h
+33
-3
include/asm-ppc/commproc.h
include/asm-ppc/commproc.h
+103
-8
No files found.
arch/ppc/8xx_io/Kconfig
View file @
221dc269
...
...
@@ -51,6 +51,22 @@ config USE_MDIO
all MII code can be omitted. Say N here if unsure or if you don't
need link status reports.
config FEC_AM79C874
bool "Support AMD79C874 PHY"
depends on USE_MDIO
config FEC_LXT970
bool "Support LXT970 PHY"
depends on USE_MDIO
config FEC_LXT971
bool "Support LXT971 PHY"
depends on USE_MDIO
config FEC_QS6612
bool "Support QS6612 PHY"
depends on USE_MDIO
config ENET_BIG_BUFFERS
bool "Use Big CPM Ethernet Buffers"
depends on NET_ETHERNET
...
...
arch/ppc/8xx_io/fec.c
View file @
221dc269
...
...
@@ -22,15 +22,12 @@
*
* Make use of MII for PHY control configurable.
* Some fixes.
* Copyright (c) 2000 Wolfgang Denk, DENX Software Engineering.
* Copyright (c) 2000-2002 Wolfgang Denk, DENX Software Engineering.
*
* Support for AMD AM79C874 added.
* Thomas Lange, thomas@corelatus.com
*/
/* List of PHYs we wish to support.
*/
#undef CONFIG_FEC_LXT970
#define CONFIG_FEC_LXT971
#undef CONFIG_FEC_QS6612
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/sched.h>
...
...
@@ -1137,9 +1134,74 @@ static phy_info_t phy_info_qs6612 = {
},
};
#endif
/* CONFIG_FEC_QS6612 */
/* ------------------------------------------------------------------------- */
/* The Advanced Micro Devices AM79C874 is used on the ICU862 */
#ifdef CONFIG_FEC_AM79C874
/* register definitions for the 79C874 */
#define MII_AM79C874_MFR 16
/* Miscellaneous Features Register */
#define MII_AM79C874_ICSR 17
/* Interrupt Control/Status Register */
#define MII_AM79C874_DR 18
/* Diagnostic Register */
#define MII_AM79C874_PMLR 19
/* Power Management & Loopback Register */
#define MII_AM79C874_MCR 21
/* Mode Control Register */
#define MII_AM79C874_DC 23
/* Disconnect Counter */
#define MII_AM79C874_REC 24
/* Receiver Error Counter */
static
void
mii_parse_amd79c874_dr
(
uint
mii_reg
,
struct
net_device
*
dev
,
uint
data
)
{
volatile
struct
fec_enet_private
*
fep
=
dev
->
priv
;
uint
s
=
fep
->
phy_status
;
s
&=
~
(
PHY_STAT_SPMASK
);
/* Register 18: Bit 10 is data rate, 11 is Duplex */
switch
((
mii_reg
>>
10
)
&
3
)
{
case
0
:
s
|=
PHY_STAT_10HDX
;
break
;
case
1
:
s
|=
PHY_STAT_100HDX
;
break
;
case
2
:
s
|=
PHY_STAT_10FDX
;
break
;
case
3
:
s
|=
PHY_STAT_100FDX
;
break
;
}
fep
->
phy_status
=
s
;
}
static
phy_info_t
phy_info_amd79c874
=
{
0x00022561
,
"AM79C874"
,
(
const
phy_cmd_t
[])
{
/* config */
// { mk_mii_write(MII_REG_ANAR, 0x021), NULL }, /* 10 Mbps, HD */
{
mk_mii_read
(
MII_REG_CR
),
mii_parse_cr
},
{
mk_mii_read
(
MII_REG_ANAR
),
mii_parse_anar
},
{
mk_mii_end
,
}
},
(
const
phy_cmd_t
[])
{
/* startup - enable interrupts */
{
mk_mii_write
(
MII_AM79C874_ICSR
,
0xff00
),
NULL
},
{
mk_mii_write
(
MII_REG_CR
,
0x1200
),
NULL
},
/* autonegotiate */
{
mk_mii_end
,
}
},
(
const
phy_cmd_t
[])
{
/* ack_int */
/* find out the current status */
{
mk_mii_read
(
MII_REG_SR
),
mii_parse_sr
},
{
mk_mii_read
(
MII_AM79C874_DR
),
mii_parse_amd79c874_dr
},
/* we only need to read ICSR to acknowledge */
{
mk_mii_read
(
MII_AM79C874_ICSR
),
NULL
},
{
mk_mii_end
,
}
},
(
const
phy_cmd_t
[])
{
/* shutdown - disable interrupts */
{
mk_mii_write
(
MII_AM79C874_ICSR
,
0x0000
),
NULL
},
{
mk_mii_end
,
}
},
};
#endif
/* CONFIG_FEC_AM79C874 */
static
phy_info_t
*
phy_info
[]
=
{
...
...
@@ -1153,7 +1215,11 @@ static phy_info_t *phy_info[] = {
#ifdef CONFIG_FEC_QS6612
&
phy_info_qs6612
,
#endif
/* CONFIG_FEC_LXT971 */
#endif
/* CONFIG_FEC_QS6612 */
#ifdef CONFIG_FEC_AM79C874
&
phy_info_amd79c874
,
#endif
/* CONFIG_FEC_AM79C874 */
NULL
};
...
...
arch/ppc/platforms/ccm.h
View file @
221dc269
/*
* Siemens Card Controller Module specific definitions
*
* Copyright (
c) 2001
Wolfgang Denk (wd@denx.de)
* Copyright (
C) 2001-2002
Wolfgang Denk (wd@denx.de)
*/
#ifndef __MACH_CCM_H
...
...
@@ -17,9 +17,9 @@
#define IMAP_ADDR CCM_IMMR_BASE
/* physical base address of IMMR area */
#define IMAP_SIZE CCM_IMAP_SIZE
/* mapped size of IMMR area */
#define FEC_INTERRUPT 1
5
/* = SIU_LEVEL7
*/
#define DEC_INTERRUPT 1
3
/* = SIU_LEVEL6
*/
#define CPM_INTERRUPT
11
/* = SIU_LEVEL5 (was: SIU_LEVEL2)
*/
#define FEC_INTERRUPT 1
3
/* = SIU_LEVEL6
*/
#define DEC_INTERRUPT 1
1
/* = SIU_LEVEL5
*/
#define CPM_INTERRUPT
9
/* = SIU_LEVEL4
*/
/* We don't use the 8259.
*/
...
...
arch/ppc/platforms/tqm8xx.h
View file @
221dc269
/*
* TQM8xx(L) board specific definitions
*
* Copyright (c) 1999
,2000,2001
Wolfgang Denk (wd@denx.de)
* Copyright (c) 1999
-2002
Wolfgang Denk (wd@denx.de)
*/
#ifdef __KERNEL__
...
...
@@ -26,7 +26,27 @@
*/
#define PCMCIA_MEM_SIZE ( 64 << 20 )
#define MAX_HWIFS 1
/* overwrite default in include/asm-ppc/ide.h */
#ifndef CONFIG_KUP4K
# define MAX_HWIFS 1
/* overwrite default in include/asm-ppc/ide.h */
#else
/* CONFIG_KUP4K */
# define MAX_HWIFS 2
/* overwrite default in include/asm-ppc/ide.h */
# ifndef __ASSEMBLY__
# include <asm/8xx_immap.h>
static
__inline__
void
ide_led
(
int
on
)
{
volatile
immap_t
*
immap
=
(
immap_t
*
)
IMAP_ADDR
;
if
(
on
)
{
immap
->
im_ioport
.
iop_padat
&=
~
0x80
;
}
else
{
immap
->
im_ioport
.
iop_padat
|=
0x80
;
}
}
# endif
/* __ASSEMBLY__ */
# define IDE_LED(x) ide_led((x))
#endif
/* CONFIG_KUP4K */
/*
* Definitions for IDE0 Interface
...
...
@@ -43,8 +63,18 @@
#define IDE0_CONTROL_REG_OFFSET 0x0106
#define IDE0_IRQ_REG_OFFSET 0x000A
/* not used */
#define IDE0_INTERRUPT 13
/* define IO_BASE for PCMCIA */
#define _IO_BASE 0x80000000
#define _IO_BASE_SIZE (64<<10)
#define FEC_INTERRUPT 9
/* = SIU_LEVEL4 */
#define PHY_INTERRUPT 12
/* = IRQ6 */
#define IDE0_INTERRUPT 13
#ifdef CONFIG_IDE
#define ide_request_irq(irq,hand,flg,dev,id) \
request_8xxirq((irq),(hand),(flg),(dev),(id))
#endif
/*-----------------------------------------------------------------------
* CPM Ethernet through SCCx.
...
...
include/asm-ppc/commproc.h
View file @
221dc269
...
...
@@ -35,18 +35,21 @@
#define CPM_CR_HUNT_MODE ((ushort)0x0003)
#define CPM_CR_STOP_TX ((ushort)0x0004)
#define CPM_CR_RESTART_TX ((ushort)0x0006)
#define CPM_CR_CLOSE_RX_BD ((ushort)0x0007)
#define CPM_CR_SET_GADDR ((ushort)0x0008)
#define CPM_CR_SET_TIMER CPM_CR_SET_GADDR
/* Channel numbers.
*/
#define CPM_CR_CH_SCC1 ((ushort)0x0000)
#define CPM_CR_CH_I2C ((ushort)0x0001)
/* I2C and IDMA1 */
#define CPM_CR_CH_SCC2 ((ushort)0x0004)
#define CPM_CR_CH_SPI ((ushort)0x0005)
/* SPI / IDMA2 / Timers */
#define CPM_CR_CH_SCC3 ((ushort)0x0008)
#define CPM_CR_CH_SMC1 ((ushort)0x0009)
/* SMC1 / DSP1 */
#define CPM_CR_CH_SCC4 ((ushort)0x000c)
#define CPM_CR_CH_SMC2 ((ushort)0x000d)
/* SMC2 / DSP2 */
#define CPM_CR_CH_SCC1 ((ushort)0x0000)
#define CPM_CR_CH_I2C ((ushort)0x0001)
/* I2C and IDMA1 */
#define CPM_CR_CH_SCC2 ((ushort)0x0004)
#define CPM_CR_CH_SPI ((ushort)0x0005)
/* SPI / IDMA2 / Timers */
#define CPM_CR_CH_TIMER CPM_CR_CH_SPI
#define CPM_CR_CH_SCC3 ((ushort)0x0008)
#define CPM_CR_CH_SMC1 ((ushort)0x0009)
/* SMC1 / DSP1 */
#define CPM_CR_CH_SCC4 ((ushort)0x000c)
#define CPM_CR_CH_SMC2 ((ushort)0x000d)
/* SMC2 / DSP2 */
#define mk_cr_cmd(CH, CMD) ((CMD << 8) | (CH << 4))
...
...
@@ -80,20 +83,25 @@ typedef struct cpm_buf_desc {
#define BD_SC_WRAP ((ushort)0x2000)
/* Last buffer descriptor */
#define BD_SC_INTRPT ((ushort)0x1000)
/* Interrupt on change */
#define BD_SC_LAST ((ushort)0x0800)
/* Last buffer in frame */
#define BD_SC_TC ((ushort)0x0400)
/* Transmit CRC */
#define BD_SC_CM ((ushort)0x0200)
/* Continous mode */
#define BD_SC_ID ((ushort)0x0100)
/* Rec'd too many idles */
#define BD_SC_P ((ushort)0x0100)
/* xmt preamble */
#define BD_SC_BR ((ushort)0x0020)
/* Break received */
#define BD_SC_FR ((ushort)0x0010)
/* Framing error */
#define BD_SC_PR ((ushort)0x0008)
/* Parity error */
#define BD_SC_NAK ((ushort)0x0004)
/* NAK - did not respond */
#define BD_SC_OV ((ushort)0x0002)
/* Overrun */
#define BD_SC_UN ((ushort)0x0002)
/* Underrun */
#define BD_SC_CD ((ushort)0x0001)
/* ?? */
#define BD_SC_CL ((ushort)0x0001)
/* Collision */
/* Parameter RAM offsets.
*/
#define PROFF_SCC1 ((uint)0x0000)
#define PROFF_IIC ((uint)0x0080)
#define PROFF_SCC2 ((uint)0x0100)
#define PROFF_SPI ((uint)0x0180)
#define PROFF_SCC3 ((uint)0x0200)
#define PROFF_SMC1 ((uint)0x0280)
#define PROFF_SCC4 ((uint)0x0300)
...
...
@@ -208,6 +216,17 @@ typedef struct smc_centronics {
#define CPM_BRG_CD_MASK ((uint)0x00001ffe)
#define CPM_BRG_DIV16 ((uint)0x00000001)
/* SI Clock Route Register
*/
#define SICR_RCLK_SCC1_BRG1 ((uint)0x00000000)
#define SICR_TCLK_SCC1_BRG1 ((uint)0x00000000)
#define SICR_RCLK_SCC2_BRG2 ((uint)0x00000800)
#define SICR_TCLK_SCC2_BRG2 ((uint)0x00000100)
#define SICR_RCLK_SCC3_BRG3 ((uint)0x00100000)
#define SICR_TCLK_SCC3_BRG3 ((uint)0x00020000)
#define SICR_RCLK_SCC4_BRG4 ((uint)0x18000000)
#define SICR_TCLK_SCC4_BRG4 ((uint)0x03000000)
/* SCCs.
*/
#define SCC_GSMRH_IRP ((uint)0x00040000)
...
...
@@ -417,6 +436,8 @@ typedef struct scc_enet {
#define BD_ENET_RX_CR ((ushort)0x0004)
#define BD_ENET_RX_OV ((ushort)0x0002)
#define BD_ENET_RX_CL ((ushort)0x0001)
#define BD_ENET_RX_BC ((ushort)0x0080)
/* DA is Broadcast */
#define BD_ENET_RX_MC ((ushort)0x0040)
/* DA is Multicast */
#define BD_ENET_RX_STATS ((ushort)0x013f)
/* All status bits */
/* Buffer descriptor control/status used by Ethernet transmit.
...
...
@@ -525,9 +546,83 @@ typedef struct iic {
ushort
iic_tbptr
;
/* Internal */
ushort
iic_tbc
;
/* Internal */
uint
iic_txtmp
;
/* Internal */
uint
iic_res
;
/* reserved */
ushort
iic_rpbase
;
/* Relocation pointer */
ushort
iic_res2
;
/* reserved */
}
iic_t
;
#define BD_IIC_START ((ushort)0x0400)
/* SPI parameter RAM.
*/
typedef
struct
spi
{
ushort
spi_rbase
;
/* Rx Buffer descriptor base address */
ushort
spi_tbase
;
/* Tx Buffer descriptor base address */
u_char
spi_rfcr
;
/* Rx function code */
u_char
spi_tfcr
;
/* Tx function code */
ushort
spi_mrblr
;
/* Max receive buffer length */
uint
spi_rstate
;
/* Internal */
uint
spi_rdp
;
/* Internal */
ushort
spi_rbptr
;
/* Internal */
ushort
spi_rbc
;
/* Internal */
uint
spi_rxtmp
;
/* Internal */
uint
spi_tstate
;
/* Internal */
uint
spi_tdp
;
/* Internal */
ushort
spi_tbptr
;
/* Internal */
ushort
spi_tbc
;
/* Internal */
uint
spi_txtmp
;
/* Internal */
uint
spi_res
;
ushort
spi_rpbase
;
/* Relocation pointer */
ushort
spi_res2
;
}
spi_t
;
/* SPI Mode register.
*/
#define SPMODE_LOOP ((ushort)0x4000)
/* Loopback */
#define SPMODE_CI ((ushort)0x2000)
/* Clock Invert */
#define SPMODE_CP ((ushort)0x1000)
/* Clock Phase */
#define SPMODE_DIV16 ((ushort)0x0800)
/* BRG/16 mode */
#define SPMODE_REV ((ushort)0x0400)
/* Reversed Data */
#define SPMODE_MSTR ((ushort)0x0200)
/* SPI Master */
#define SPMODE_EN ((ushort)0x0100)
/* Enable */
#define SPMODE_LENMSK ((ushort)0x00f0)
/* character length */
#define SPMODE_LEN4 ((ushort)0x0030)
/* 4 bits per char */
#define SPMODE_LEN8 ((ushort)0x0070)
/* 8 bits per char */
#define SPMODE_LEN16 ((ushort)0x00f0)
/* 16 bits per char */
#define SPMODE_PMMSK ((ushort)0x000f)
/* prescale modulus */
/* SPIE fields */
#define SPIE_MME 0x20
#define SPIE_TXE 0x10
#define SPIE_BSY 0x04
#define SPIE_TXB 0x02
#define SPIE_RXB 0x01
/*
* RISC Controller Configuration Register definitons
*/
#define RCCR_TIME 0x8000
/* RISC Timer Enable */
#define RCCR_TIMEP(t) (((t) & 0x3F)<<8)
/* RISC Timer Period */
#define RCCR_TIME_MASK 0x00FF
/* not RISC Timer related bits */
/* RISC Timer Parameter RAM offset */
#define PROFF_RTMR ((uint)0x01B0)
typedef
struct
risc_timer_pram
{
unsigned
short
tm_base
;
/* RISC Timer Table Base Address */
unsigned
short
tm_ptr
;
/* RISC Timer Table Pointer (internal) */
unsigned
short
r_tmr
;
/* RISC Timer Mode Register */
unsigned
short
r_tmv
;
/* RISC Timer Valid Register */
unsigned
long
tm_cmd
;
/* RISC Timer Command Register */
unsigned
long
tm_cnt
;
/* RISC Timer Internal Count */
}
rt_pram_t
;
/* Bits in RISC Timer Command Register */
#define TM_CMD_VALID 0x80000000
/* Valid - Enables the timer */
#define TM_CMD_RESTART 0x40000000
/* Restart - for automatic restart */
#define TM_CMD_PWM 0x20000000
/* Run in Pulse Width Modulation Mode */
#define TM_CMD_NUM(n) (((n)&0xF)<<16)
/* Timer Number */
#define TM_CMD_PERIOD(p) ((p)&0xFFFF)
/* Timer Period */
/* CPM interrupts. There are nearly 32 interrupts generated by CPM
* channels or devices. All of these are presented to the PPC core
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment