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
3b0eb4a1
Commit
3b0eb4a1
authored
Feb 18, 2007
by
Russell King
Committed by
Russell King
Feb 18, 2007
Browse files
Options
Browse Files
Download
Plain Diff
Merge the easy part of the IOP branch
parents
82130841
588ef769
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
182 additions
and
12 deletions
+182
-12
arch/arm/Kconfig
arch/arm/Kconfig
+2
-0
arch/arm/kernel/traps.c
arch/arm/kernel/traps.c
+4
-1
arch/arm/mach-iop13xx/irq.c
arch/arm/mach-iop13xx/irq.c
+3
-0
arch/arm/mach-iop32x/irq.c
arch/arm/mach-iop32x/irq.c
+2
-0
arch/arm/mach-iop33x/irq.c
arch/arm/mach-iop33x/irq.c
+2
-0
arch/arm/plat-iop/Makefile
arch/arm/plat-iop/Makefile
+26
-4
arch/arm/plat-iop/cp6.c
arch/arm/plat-iop/cp6.c
+50
-0
arch/arm/plat-iop/io.c
arch/arm/plat-iop/io.c
+58
-0
arch/arm/plat-iop/pci.c
arch/arm/plat-iop/pci.c
+3
-3
drivers/i2c/busses/i2c-iop3xx.c
drivers/i2c/busses/i2c-iop3xx.c
+1
-1
include/asm-arm/arch-iop32x/io.h
include/asm-arm/arch-iop32x/io.h
+8
-2
include/asm-arm/arch-iop33x/io.h
include/asm-arm/arch-iop33x/io.h
+8
-1
include/asm-arm/hardware/iop3xx.h
include/asm-arm/hardware/iop3xx.h
+15
-0
No files found.
arch/arm/Kconfig
View file @
3b0eb4a1
...
...
@@ -233,6 +233,8 @@ config ARCH_IOP33X
config ARCH_IOP13XX
bool "IOP13xx-based"
depends on MMU
select PLAT_IOP
select PCI
help
Support for Intel's IOP13XX (XScale) family of processors.
...
...
arch/arm/kernel/traps.c
View file @
3b0eb4a1
...
...
@@ -282,7 +282,10 @@ asmlinkage void do_undefinstr(struct pt_regs *regs)
regs
->
ARM_pc
-=
correction
;
pc
=
(
void
__user
*
)
instruction_pointer
(
regs
);
if
(
thumb_mode
(
regs
))
{
if
(
processor_mode
(
regs
)
==
SVC_MODE
)
{
instr
=
*
(
u32
*
)
pc
;
}
else
if
(
thumb_mode
(
regs
))
{
get_user
(
instr
,
(
u16
__user
*
)
pc
);
}
else
{
get_user
(
instr
,
(
u32
__user
*
)
pc
);
...
...
arch/arm/mach-iop13xx/irq.c
View file @
3b0eb4a1
...
...
@@ -250,11 +250,14 @@ static struct irq_chip iop13xx_irqchip4 = {
.
unmask
=
iop13xx_irq_unmask3
,
};
extern
void
iop_init_cp6_handler
(
void
);
void
__init
iop13xx_init_irq
(
void
)
{
unsigned
int
i
;
u32
cp_flags
=
iop13xx_cp6_save
();
iop_init_cp6_handler
();
/* disable all interrupts */
write_intctl_0
(
0
);
...
...
arch/arm/mach-iop32x/irq.c
View file @
3b0eb4a1
...
...
@@ -60,6 +60,8 @@ void __init iop32x_init_irq(void)
{
int
i
;
iop_init_cp6_handler
();
intctl_write
(
0
);
intstr_write
(
0
);
if
(
machine_is_glantank
()
||
...
...
arch/arm/mach-iop33x/irq.c
View file @
3b0eb4a1
...
...
@@ -110,6 +110,8 @@ void __init iop33x_init_irq(void)
{
int
i
;
iop_init_cp6_handler
();
intctl0_write
(
0
);
intctl1_write
(
0
);
intstr0_write
(
0
);
...
...
arch/arm/plat-iop/Makefile
View file @
3b0eb4a1
...
...
@@ -2,7 +2,29 @@
# Makefile for the linux kernel.
#
obj-y
:=
gpio.o i2c.o pci.o setup.o time.o
obj-m
:=
obj-n
:=
obj-
:=
obj-y
:=
# IOP32X
obj-$(CONFIG_ARCH_IOP32X)
+=
gpio.o
obj-$(CONFIG_ARCH_IOP32X)
+=
i2c.o
obj-$(CONFIG_ARCH_IOP32X)
+=
pci.o
obj-$(CONFIG_ARCH_IOP32X)
+=
setup.o
obj-$(CONFIG_ARCH_IOP32X)
+=
time.o
obj-$(CONFIG_ARCH_IOP32X)
+=
io.o
obj-$(CONFIG_ARCH_IOP32X)
+=
cp6.o
# IOP33X
obj-$(CONFIG_ARCH_IOP33X)
+=
gpio.o
obj-$(CONFIG_ARCH_IOP33X)
+=
i2c.o
obj-$(CONFIG_ARCH_IOP33X)
+=
pci.o
obj-$(CONFIG_ARCH_IOP33X)
+=
setup.o
obj-$(CONFIG_ARCH_IOP33X)
+=
time.o
obj-$(CONFIG_ARCH_IOP33X)
+=
io.o
obj-$(CONFIG_ARCH_IOP33X)
+=
cp6.o
# IOP13XX
obj-$(CONFIG_ARCH_IOP13XX)
+=
cp6.o
obj-m
:=
obj-n
:=
obj-
:=
arch/arm/plat-iop/cp6.c
0 → 100644
View file @
3b0eb4a1
/*
* IOP Coprocessor-6 access handler
* Copyright (c) 2006, Intel Corporation.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place - Suite 330, Boston, MA 02111-1307 USA.
*
*/
#include <linux/init.h>
#include <asm/traps.h>
static
int
cp6_trap
(
struct
pt_regs
*
regs
,
unsigned
int
instr
)
{
u32
temp
;
/* enable cp6 access */
asm
volatile
(
"mrc p15, 0, %0, c15, c1, 0
\n\t
"
"orr %0, %0, #(1 << 6)
\n\t
"
"mcr p15, 0, %0, c15, c1, 0
\n\t
"
:
"=r"
(
temp
));
return
0
;
}
/* permit kernel space cp6 access
* deny user space cp6 access
*/
static
struct
undef_hook
cp6_hook
=
{
.
instr_mask
=
0x0f000ff0
,
.
instr_val
=
0x0e000610
,
.
cpsr_mask
=
MODE_MASK
,
.
cpsr_val
=
SVC_MODE
,
.
fn
=
cp6_trap
,
};
void
__init
iop_init_cp6_handler
(
void
)
{
register_undef_hook
(
&
cp6_hook
);
}
arch/arm/plat-iop/io.c
0 → 100644
View file @
3b0eb4a1
/*
* iop3xx custom ioremap implementation
* Copyright (c) 2006, Intel Corporation.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place - Suite 330, Boston, MA 02111-1307 USA.
*
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <asm/hardware.h>
#include <asm/io.h>
void
*
__iomem
__iop3xx_ioremap
(
unsigned
long
cookie
,
size_t
size
,
unsigned
long
flags
)
{
void
__iomem
*
retval
;
switch
(
cookie
)
{
case
IOP3XX_PCI_LOWER_IO_PA
...
IOP3XX_PCI_UPPER_IO_PA
:
retval
=
(
void
*
)
IOP3XX_PCI_IO_PHYS_TO_VIRT
(
cookie
);
break
;
case
IOP3XX_PERIPHERAL_PHYS_BASE
...
IOP3XX_PERIPHERAL_UPPER_PA
:
retval
=
(
void
*
)
IOP3XX_PMMR_PHYS_TO_VIRT
(
cookie
);
break
;
default:
retval
=
__ioremap
(
cookie
,
size
,
flags
);
}
return
retval
;
}
EXPORT_SYMBOL
(
__iop3xx_ioremap
);
void
__iop3xx_iounmap
(
void
__iomem
*
addr
)
{
extern
void
__iounmap
(
volatile
void
__iomem
*
addr
);
switch
((
u32
)
addr
)
{
case
IOP3XX_PCI_LOWER_IO_VA
...
IOP3XX_PCI_UPPER_IO_VA
:
case
IOP3XX_PERIPHERAL_VIRT_BASE
...
IOP3XX_PERIPHERAL_UPPER_VA
:
goto
skip
;
}
__iounmap
(
addr
);
skip:
return
;
}
EXPORT_SYMBOL
(
__iop3xx_iounmap
);
arch/arm/plat-iop/pci.c
View file @
3b0eb4a1
...
...
@@ -196,8 +196,8 @@ int iop3xx_pci_setup(int nr, struct pci_sys_data *sys)
if
(
!
res
)
panic
(
"PCI: unable to alloc resources"
);
res
[
0
].
start
=
IOP3XX_PCI_LOWER_IO_
V
A
;
res
[
0
].
end
=
IOP3XX_PCI_LOWER_IO_
V
A
+
IOP3XX_PCI_IO_WINDOW_SIZE
-
1
;
res
[
0
].
start
=
IOP3XX_PCI_LOWER_IO_
P
A
;
res
[
0
].
end
=
IOP3XX_PCI_LOWER_IO_
P
A
+
IOP3XX_PCI_IO_WINDOW_SIZE
-
1
;
res
[
0
].
name
=
"IOP3XX PCI I/O Space"
;
res
[
0
].
flags
=
IORESOURCE_IO
;
request_resource
(
&
ioport_resource
,
&
res
[
0
]);
...
...
@@ -209,7 +209,7 @@ int iop3xx_pci_setup(int nr, struct pci_sys_data *sys)
request_resource
(
&
iomem_resource
,
&
res
[
1
]);
sys
->
mem_offset
=
IOP3XX_PCI_LOWER_MEM_PA
-
IOP3XX_PCI_LOWER_MEM_BA
;
sys
->
io_offset
=
IOP3XX_PCI_LOWER_IO_
V
A
-
IOP3XX_PCI_LOWER_IO_BA
;
sys
->
io_offset
=
IOP3XX_PCI_LOWER_IO_
P
A
-
IOP3XX_PCI_LOWER_IO_BA
;
sys
->
resource
[
0
]
=
&
res
[
0
];
sys
->
resource
[
1
]
=
&
res
[
1
];
...
...
drivers/i2c/busses/i2c-iop3xx.c
View file @
3b0eb4a1
...
...
@@ -84,7 +84,7 @@ iop3xx_i2c_enable(struct i2c_algo_iop3xx_data *iop3xx_adap)
* Every time unit enable is asserted, GPOD needs to be cleared
* on IOP3XX to avoid data corruption on the bus.
*/
#if
def CONFIG_PLAT_IOP
#if
defined(CONFIG_ARCH_IOP32X) || defined(CONFIG_ARCH_IOP33X)
if
(
iop3xx_adap
->
id
==
0
)
{
gpio_line_set
(
IOP3XX_GPIO_LINE
(
7
),
GPIO_LOW
);
gpio_line_set
(
IOP3XX_GPIO_LINE
(
6
),
GPIO_LOW
);
...
...
include/asm-arm/arch-iop32x/io.h
View file @
3b0eb4a1
...
...
@@ -13,10 +13,16 @@
#include <asm/hardware.h>
#define IO_SPACE_LIMIT 0xffffffff
extern
void
__iomem
*
__ioremap
(
unsigned
long
,
size_t
,
unsigned
long
);
extern
void
__iomem
*
__iop3xx_ioremap
(
unsigned
long
cookie
,
size_t
size
,
unsigned
long
flags
);
extern
void
__iop3xx_iounmap
(
void
__iomem
*
addr
);
#define __io(p) ((void __iomem *)(p))
#define IO_SPACE_LIMIT 0xffffffff
#define __io(p) ((void __iomem *)IOP3XX_PCI_IO_PHYS_TO_VIRT(p))
#define __mem_pci(a) (a)
#define __arch_ioremap(a, s, f) __iop3xx_ioremap(a, s, f)
#define __arch_iounmap(a) __iop3xx_iounmap(a)
#endif
include/asm-arm/arch-iop33x/io.h
View file @
3b0eb4a1
...
...
@@ -13,9 +13,16 @@
#include <asm/hardware.h>
extern
void
__iomem
*
__ioremap
(
unsigned
long
,
size_t
,
unsigned
long
);
extern
void
__iomem
*
__iop3xx_ioremap
(
unsigned
long
cookie
,
size_t
size
,
unsigned
long
flags
);
extern
void
__iop3xx_iounmap
(
void
__iomem
*
addr
);
#define IO_SPACE_LIMIT 0xffffffff
#define __io(p)
((void __iomem *)
(p))
#define __io(p)
((void __iomem *)IOP3XX_PCI_IO_PHYS_TO_VIRT
(p))
#define __mem_pci(a) (a)
#define __arch_ioremap(a, s, f) __iop3xx_ioremap(a, s, f)
#define __arch_iounmap(a) __iop3xx_iounmap(a)
#endif
include/asm-arm/hardware/iop3xx.h
View file @
3b0eb4a1
...
...
@@ -37,6 +37,13 @@ extern void gpio_line_set(int line, int value);
#define IOP3XX_PERIPHERAL_PHYS_BASE 0xffffe000
#define IOP3XX_PERIPHERAL_VIRT_BASE 0xfeffe000
#define IOP3XX_PERIPHERAL_SIZE 0x00002000
#define IOP3XX_PERIPHERAL_UPPER_PA (IOP3XX_PERIPHERAL_PHYS_BASE +\
IOP3XX_PERIPHERAL_SIZE - 1)
#define IOP3XX_PERIPHERAL_UPPER_VA (IOP3XX_PERIPHERAL_VIRT_BASE +\
IOP3XX_PERIPHERAL_SIZE - 1)
#define IOP3XX_PMMR_PHYS_TO_VIRT(addr) (u32) ((u32) addr -\
(IOP3XX_PERIPHERAL_PHYS_BASE\
- IOP3XX_PERIPHERAL_VIRT_BASE))
#define IOP3XX_REG_ADDR(reg) (IOP3XX_PERIPHERAL_VIRT_BASE + (reg))
/* Address Translation Unit */
...
...
@@ -258,12 +265,20 @@ extern void gpio_line_set(int line, int value);
#define IOP3XX_PCI_LOWER_IO_PA 0x90000000
#define IOP3XX_PCI_LOWER_IO_VA 0xfe000000
#define IOP3XX_PCI_LOWER_IO_BA (*IOP3XX_OIOWTVR)
#define IOP3XX_PCI_UPPER_IO_PA (IOP3XX_PCI_LOWER_IO_PA +\
IOP3XX_PCI_IO_WINDOW_SIZE - 1)
#define IOP3XX_PCI_UPPER_IO_VA (IOP3XX_PCI_LOWER_IO_VA +\
IOP3XX_PCI_IO_WINDOW_SIZE - 1)
#define IOP3XX_PCI_IO_PHYS_TO_VIRT(addr) (((u32) addr -\
IOP3XX_PCI_LOWER_IO_PA) +\
IOP3XX_PCI_LOWER_IO_VA)
#ifndef __ASSEMBLY__
void
iop3xx_map_io
(
void
);
void
iop3xx_init_time
(
unsigned
long
);
unsigned
long
iop3xx_gettimeoffset
(
void
);
void
iop_init_cp6_handler
(
void
);
extern
struct
platform_device
iop3xx_i2c0_device
;
extern
struct
platform_device
iop3xx_i2c1_device
;
...
...
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