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
Kirill Smelkov
linux
Commits
f647a274
Commit
f647a274
authored
Jun 24, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/home/rmk/linux-2.6-arm
parents
75043cb5
2966207c
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
180 additions
and
64 deletions
+180
-64
arch/arm/mach-ixp2000/core.c
arch/arm/mach-ixp2000/core.c
+67
-18
arch/arm/mach-ixp4xx/common.c
arch/arm/mach-ixp4xx/common.c
+8
-0
arch/arm/mm/proc-v6.S
arch/arm/mm/proc-v6.S
+3
-3
drivers/i2c/busses/i2c-ixp2000.c
drivers/i2c/busses/i2c-ixp2000.c
+2
-1
include/asm-arm/arch-ixp2000/gpio.h
include/asm-arm/arch-ixp2000/gpio.h
+12
-19
include/asm-arm/arch-ixp2000/io.h
include/asm-arm/arch-ixp2000/io.h
+74
-2
include/asm-arm/arch-ixp2000/platform.h
include/asm-arm/arch-ixp2000/platform.h
+1
-21
include/asm-arm/arch-ixp4xx/debug-macro.S
include/asm-arm/arch-ixp4xx/debug-macro.S
+1
-0
include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
+10
-0
include/asm-arm/io.h
include/asm-arm/io.h
+2
-0
No files found.
arch/arm/mach-ixp2000/core.c
View file @
f647a274
...
...
@@ -40,6 +40,8 @@
#include <asm/mach/time.h>
#include <asm/mach/irq.h>
#include <asm/arch/gpio.h>
static
DEFINE_SPINLOCK
(
ixp2000_slowport_lock
);
static
unsigned
long
ixp2000_slowport_irq_flags
;
...
...
@@ -238,33 +240,38 @@ void __init ixp2000_init_time(unsigned long tick_rate)
/*************************************************************************
* GPIO helpers
*************************************************************************/
static
unsigned
long
GPIO_IRQ_rising_edge
;
static
unsigned
long
GPIO_IRQ_falling_edge
;
static
unsigned
long
GPIO_IRQ_rising_edge
;
static
unsigned
long
GPIO_IRQ_level_low
;
static
unsigned
long
GPIO_IRQ_level_high
;
void
gpio_line_config
(
int
line
,
int
style
)
static
void
update_gpio_int_csrs
(
void
)
{
ixp2000_reg_write
(
IXP2000_GPIO_FEDR
,
GPIO_IRQ_falling_edge
);
ixp2000_reg_write
(
IXP2000_GPIO_REDR
,
GPIO_IRQ_rising_edge
);
ixp2000_reg_write
(
IXP2000_GPIO_LSLR
,
GPIO_IRQ_level_low
);
ixp2000_reg_write
(
IXP2000_GPIO_LSHR
,
GPIO_IRQ_level_high
);
}
void
gpio_line_config
(
int
line
,
int
direction
)
{
unsigned
long
flags
;
local_irq_save
(
flags
);
if
(
direction
==
GPIO_OUT
)
{
irq_desc
[
line
+
IRQ_IXP2000_GPIO0
].
valid
=
0
;
if
(
style
==
GPIO_OUT
)
{
/* if it's an output, it ain't an interrupt anymore */
ixp2000_reg_write
(
IXP2000_GPIO_PDSR
,
(
1
<<
line
));
GPIO_IRQ_falling_edge
&=
~
(
1
<<
line
);
GPIO_IRQ_rising_edge
&=
~
(
1
<<
line
);
GPIO_IRQ_level_low
&=
~
(
1
<<
line
);
GPIO_IRQ_level_high
&=
~
(
1
<<
line
);
ixp2000_reg_write
(
IXP2000_GPIO_FEDR
,
GPIO_IRQ_falling_edge
);
ixp2000_reg_write
(
IXP2000_GPIO_REDR
,
GPIO_IRQ_rising_edge
);
ixp2000_reg_write
(
IXP2000_GPIO_LSHR
,
GPIO_IRQ_level_high
);
ixp2000_reg_write
(
IXP2000_GPIO_LSLR
,
GPIO_IRQ_level_low
);
irq_desc
[
line
+
IRQ_IXP2000_GPIO0
].
valid
=
0
;
}
else
if
(
style
==
GPIO_IN
)
{
ixp2000_reg_write
(
IXP2000_GPIO_PDCR
,
(
1
<<
line
));
}
update_gpio_int_csrs
();
ixp2000_reg_write
(
IXP2000_GPIO_PDSR
,
1
<<
line
);
}
else
if
(
direction
==
GPIO_IN
)
{
ixp2000_reg_write
(
IXP2000_GPIO_PDCR
,
1
<<
line
);
}
local_irq_restore
(
flags
);
}
...
...
@@ -285,9 +292,50 @@ static void ixp2000_GPIO_irq_handler(unsigned int irq, struct irqdesc *desc, str
}
}
static
int
ixp2000_GPIO_irq_type
(
unsigned
int
irq
,
unsigned
int
type
)
{
int
line
=
irq
-
IRQ_IXP2000_GPIO0
;
/*
* First, configure this GPIO line as an input.
*/
ixp2000_reg_write
(
IXP2000_GPIO_PDCR
,
1
<<
line
);
/*
* Then, set the proper trigger type.
*/
if
(
type
&
IRQT_FALLING
)
GPIO_IRQ_falling_edge
|=
1
<<
line
;
else
GPIO_IRQ_falling_edge
&=
~
(
1
<<
line
);
if
(
type
&
IRQT_RISING
)
GPIO_IRQ_rising_edge
|=
1
<<
line
;
else
GPIO_IRQ_rising_edge
&=
~
(
1
<<
line
);
if
(
type
&
IRQT_LOW
)
GPIO_IRQ_level_low
|=
1
<<
line
;
else
GPIO_IRQ_level_low
&=
~
(
1
<<
line
);
if
(
type
&
IRQT_HIGH
)
GPIO_IRQ_level_high
|=
1
<<
line
;
else
GPIO_IRQ_level_high
&=
~
(
1
<<
line
);
update_gpio_int_csrs
();
/*
* Finally, mark the corresponding IRQ as valid.
*/
irq_desc
[
irq
].
valid
=
1
;
return
0
;
}
static
void
ixp2000_GPIO_irq_mask_ack
(
unsigned
int
irq
)
{
ixp2000_reg_write
(
IXP2000_GPIO_INCR
,
(
1
<<
(
irq
-
IRQ_IXP2000_GPIO0
)));
ixp2000_reg_write
(
IXP2000_GPIO_EDSR
,
(
1
<<
(
irq
-
IRQ_IXP2000_GPIO0
)));
ixp2000_reg_write
(
IXP2000_GPIO_LDSR
,
(
1
<<
(
irq
-
IRQ_IXP2000_GPIO0
)));
ixp2000_reg_write
(
IXP2000_GPIO_INST
,
(
1
<<
(
irq
-
IRQ_IXP2000_GPIO0
)));
}
...
...
@@ -302,6 +350,7 @@ static void ixp2000_GPIO_irq_unmask(unsigned int irq)
}
static
struct
irqchip
ixp2000_GPIO_irq_chip
=
{
.
type
=
ixp2000_GPIO_irq_type
,
.
ack
=
ixp2000_GPIO_irq_mask_ack
,
.
mask
=
ixp2000_GPIO_irq_mask
,
.
unmask
=
ixp2000_GPIO_irq_unmask
...
...
@@ -375,7 +424,7 @@ void __init ixp2000_init_irq(void)
* our mask/unmask code much simpler.
*/
for
(
irq
=
IRQ_IXP2000_SOFT_INT
;
irq
<=
IRQ_IXP2000_THDB3
;
irq
++
)
{
if
((
1
<<
irq
)
&
IXP2000_VALID_IRQ_MASK
)
{
if
((
1
<<
irq
)
&
IXP2000_VALID_IRQ_MASK
)
{
set_irq_chip
(
irq
,
&
ixp2000_irq_chip
);
set_irq_handler
(
irq
,
do_level_IRQ
);
set_irq_flags
(
irq
,
IRQF_VALID
);
...
...
@@ -384,7 +433,7 @@ void __init ixp2000_init_irq(void)
/*
* GPIO IRQs are invalid until someone sets the interrupt mode
* by calling
gpio_line_set();
* by calling
set_irq_type().
*/
for
(
irq
=
IRQ_IXP2000_GPIO0
;
irq
<=
IRQ_IXP2000_GPIO7
;
irq
++
)
{
set_irq_chip
(
irq
,
&
ixp2000_GPIO_irq_chip
);
...
...
arch/arm/mach-ixp4xx/common.c
View file @
f647a274
...
...
@@ -141,7 +141,15 @@ static struct map_desc ixp4xx_io_desc[] __initdata = {
.
physical
=
IXP4XX_PCI_CFG_BASE_PHYS
,
.
length
=
IXP4XX_PCI_CFG_REGION_SIZE
,
.
type
=
MT_DEVICE
},
#ifdef CONFIG_DEBUG_LL
{
/* Debug UART mapping */
.
virtual
=
IXP4XX_DEBUG_UART_BASE_VIRT
,
.
physical
=
IXP4XX_DEBUG_UART_BASE_PHYS
,
.
length
=
IXP4XX_DEBUG_UART_REGION_SIZE
,
.
type
=
MT_DEVICE
}
#endif
};
void
__init
ixp4xx_map_io
(
void
)
...
...
arch/arm/mm/proc-v6.S
View file @
f647a274
...
...
@@ -132,8 +132,8 @@ ENTRY(cpu_v6_switch_mm)
*
100
x
1
0
1
r
/
o
no
acc
*
10
x0
1
0
1
r
/
o
no
acc
*
1011
0
0
1
r
/
w
no
acc
*
110
x
1
1
0
r
/
o
r
/
o
*
11
x0
1
1
0
r
/
o
r
/
o
*
110
x
0
1
0
r
/
w
r
/
o
*
11
x0
0
1
0
r
/
w
r
/
o
*
1111
0
1
1
r
/
w
r
/
w
*/
ENTRY
(
cpu_v6_set_pte
)
...
...
@@ -150,7 +150,7 @@ ENTRY(cpu_v6_set_pte)
tst
r1
,
#
L_PTE_USER
orrne
r2
,
r2
,
#
AP1
|
nG
tstne
r2
,
#
APX
eorne
r2
,
r2
,
#
AP0
bicne
r2
,
r2
,
#
APX
|
AP0
tst
r1
,
#
L_PTE_YOUNG
biceq
r2
,
r2
,
#
APX
| AP1 |
AP0
...
...
drivers/i2c/busses/i2c-ixp2000.c
View file @
f647a274
...
...
@@ -33,7 +33,8 @@
#include <linux/i2c.h>
#include <linux/i2c-algo-bit.h>
#include <asm/hardware.h>
/* Pick up IXP42000-specific bits */
#include <asm/hardware.h>
/* Pick up IXP2000-specific bits */
#include <asm/arch/gpio.h>
static
inline
int
ixp2000_scl_pin
(
void
*
data
)
{
...
...
include/asm-arm/arch-ixp2000/gpio.h
View file @
f647a274
/*
* include/asm-arm/arch-ixp2000/
ixp2000-
gpio.h
* include/asm-arm/arch-ixp2000/gpio.h
*
* Copyright (C) 2002 Intel Corporation.
*
...
...
@@ -16,26 +16,18 @@
* Use this instead of directly setting the GPIO registers.
* GPIOs may also be used as GPIOs (e.g. for emulating i2c/smb)
*/
#ifndef _
ASM_ARCH_IXP2000_GPIO_H_
#define _
ASM_ARCH_IXP2000_GPIO_H_
#ifndef _
_ASM_ARCH_GPIO_H
#define _
_ASM_ARCH_GPIO_H
#ifndef __ASSEMBLY__
#define GPIO_OUT 0x0
#define GPIO_IN 0x80
#define GPIO_IN 0
#define GPIO_OUT 1
#define IXP2000_GPIO_LOW 0
#define IXP2000_GPIO_HIGH 1
#define GPIO_NO_EDGES 0
#define GPIO_FALLING_EDGE 1
#define GPIO_RISING_EDGE 2
#define GPIO_BOTH_EDGES 3
#define GPIO_LEVEL_LOW 4
#define GPIO_LEVEL_HIGH 8
extern
void
set_GPIO_IRQ_edge
(
int
gpio_nr
,
int
edge
);
extern
void
set_GPIO_IRQ_level
(
int
gpio_nr
,
int
level
);
extern
void
gpio_line_config
(
int
line
,
int
style
);
extern
void
gpio_line_config
(
int
line
,
int
direction
);
static
inline
int
gpio_line_get
(
int
line
)
{
...
...
@@ -45,11 +37,12 @@ static inline int gpio_line_get(int line)
static
inline
void
gpio_line_set
(
int
line
,
int
value
)
{
if
(
value
==
IXP2000_GPIO_HIGH
)
{
ixp_reg_write
(
IXP2000_GPIO_POSR
,
BIT
(
line
));
}
else
if
(
value
==
IXP2000_GPIO_LOW
)
ixp_reg_write
(
IXP2000_GPIO_POCR
,
BIT
(
line
));
ixp2000_reg_write
(
IXP2000_GPIO_POSR
,
1
<<
line
);
}
else
if
(
value
==
IXP2000_GPIO_LOW
)
{
ixp2000_reg_write
(
IXP2000_GPIO_POCR
,
1
<<
line
);
}
}
#endif
/* !__ASSEMBLY__ */
#endif
/* ASM_ARCH_IXP2000_GPIO_H_ */
#endif
/* ASM_ARCH_IXP2000_GPIO_H_ */
include/asm-arm/arch-ixp2000/io.h
View file @
f647a274
...
...
@@ -27,8 +27,8 @@
* since that isn't available on the A? revisions we just keep doing
* things manually.
*/
#define alignb(addr) (void __iomem *)((unsigned long)
addr
^ 3)
#define alignw(addr) (void __iomem *)((unsigned long)
addr
^ 2)
#define alignb(addr) (void __iomem *)((unsigned long)
(addr)
^ 3)
#define alignw(addr) (void __iomem *)((unsigned long)
(addr)
^ 2)
#define outb(v,p) __raw_writeb((v),alignb(___io(p)))
#define outw(v,p) __raw_writew((v),alignw(___io(p)))
...
...
@@ -48,6 +48,78 @@
#define insw(p,d,l) __raw_readsw(alignw(___io(p)),d,l)
#define insl(p,d,l) __raw_readsl(___io(p),d,l)
#define __is_io_address(p) ((((unsigned long)(p)) & ~(IXP2000_PCI_IO_SIZE - 1)) == IXP2000_PCI_IO_VIRT_BASE)
#define ioread8(p) \
({ \
unsigned int __v; \
\
if (__is_io_address(p)) { \
__v = __raw_readb(alignb(p)); \
} else { \
__v = __raw_readb(p); \
} \
\
__v; \
}) \
#define ioread16(p) \
({ \
unsigned int __v; \
\
if (__is_io_address(p)) { \
__v = __raw_readw(alignw(p)); \
} else { \
__v = le16_to_cpu(__raw_readw(p)); \
} \
\
__v; \
})
#define ioread32(p) \
({ \
unsigned int __v; \
\
if (__is_io_address(p)) { \
__v = __raw_readl(p); \
} else { \
__v = le32_to_cpu(__raw_readl(p)); \
} \
\
__v; \
})
#define iowrite8(v,p) \
({ \
if (__is_io_address(p)) { \
__raw_writeb((v), alignb(p)); \
} else { \
__raw_writeb((v), p); \
} \
})
#define iowrite16(v,p) \
({ \
if (__is_io_address(p)) { \
__raw_writew((v), alignw(p)); \
} else { \
__raw_writew(cpu_to_le16(v), p); \
} \
})
#define iowrite32(v,p) \
({ \
if (__is_io_address(p)) { \
__raw_writel((v), p); \
} else { \
__raw_writel(cpu_to_le32(v), p); \
} \
})
#define ioport_map(port, nr) ___io(port)
#define ioport_unmap(addr)
#ifdef CONFIG_ARCH_IXDP2X01
/*
...
...
include/asm-arm/arch-ixp2000/platform.h
View file @
f647a274
...
...
@@ -138,30 +138,10 @@ struct ixp2000_flash_data {
unsigned
long
(
*
bank_setup
)(
unsigned
long
);
};
/*
* GPIO helper functions
*/
#define GPIO_IN 0
#define GPIO_OUT 1
extern
void
gpio_line_config
(
int
line
,
int
style
);
static
inline
int
gpio_line_get
(
int
line
)
{
return
(((
*
IXP2000_GPIO_PLR
)
>>
line
)
&
1
);
}
static
inline
void
gpio_line_set
(
int
line
,
int
value
)
{
if
(
value
)
ixp2000_reg_write
(
IXP2000_GPIO_POSR
,
(
1
<<
line
));
else
ixp2000_reg_write
(
IXP2000_GPIO_POCR
,
(
1
<<
line
));
}
struct
ixp2000_i2c_pins
{
unsigned
long
sda_pin
;
unsigned
long
scl_pin
;
};
#endif
/* !__ASSEMBLY__ */
include/asm-arm/arch-ixp4xx/debug-macro.S
View file @
f647a274
...
...
@@ -14,6 +14,7 @@
mrc
p15
,
0
,
\
rx
,
c1
,
c0
tst
\
rx
,
#
1
@
MMU
enabled
?
moveq
\
rx
,
#
0xc8000000
orrne
\
rx
,
\
rx
,
#
0x00b00000
movne
\
rx
,
#
0xff000000
add
\
rx
,
\
rx
,#
3
@
Uart
regs
are
at
off
set
of
3
if
@
byte
writes
used
-
Big
Endian
.
...
...
include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
View file @
f647a274
...
...
@@ -69,6 +69,16 @@
#define IXP4XX_PERIPHERAL_BASE_VIRT (0xFFBF2000)
#define IXP4XX_PERIPHERAL_REGION_SIZE (0x0000C000)
/*
* Debug UART
*
* This is basically a remap of UART1 into a region that is section
* aligned so that it * can be used with the low-level debug code.
*/
#define IXP4XX_DEBUG_UART_BASE_PHYS (0xC8000000)
#define IXP4XX_DEBUG_UART_BASE_VIRT (0xffb00000)
#define IXP4XX_DEBUG_UART_REGION_SIZE (0x00001000)
#define IXP4XX_EXP_CS0_OFFSET 0x00
#define IXP4XX_EXP_CS1_OFFSET 0x04
#define IXP4XX_EXP_CS2_OFFSET 0x08
...
...
include/asm-arm/io.h
View file @
f647a274
...
...
@@ -275,6 +275,7 @@ extern void __iounmap(void __iomem *addr);
/*
* io{read,write}{8,16,32} macros
*/
#ifndef ioread8
#define ioread8(p) ({ unsigned int __v = __raw_readb(p); __v; })
#define ioread16(p) ({ unsigned int __v = le16_to_cpu(__raw_readw(p)); __v; })
#define ioread32(p) ({ unsigned int __v = le32_to_cpu(__raw_readl(p)); __v; })
...
...
@@ -293,6 +294,7 @@ extern void __iounmap(void __iomem *addr);
extern
void
__iomem
*
ioport_map
(
unsigned
long
port
,
unsigned
int
nr
);
extern
void
ioport_unmap
(
void
__iomem
*
addr
);
#endif
struct
pci_dev
;
...
...
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