Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
3b0eb4a1
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
3b0eb4a1
编写于
2月 18, 2007
作者:
R
Russell King
提交者:
Russell King
2月 18, 2007
浏览文件
操作
浏览文件
下载
差异文件
Merge the easy part of the IOP branch
上级
82130841
588ef769
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
182 addition
and
12 deletion
+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
未找到文件。
arch/arm/Kconfig
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录