Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
c3455b0e
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
c3455b0e
编写于
6月 30, 2005
作者:
M
Maciej W. Rozycki
提交者:
Ralf Baechle
10月 29, 2005
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Inline ioremap() calls for constant addresses that map to KSEG1.
Signed-off-by:
N
Ralf Baechle
<
ralf@linux-mips.org
>
上级
c134a5ec
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
86 addition
and
15 deletion
+86
-15
arch/mips/au1000/common/setup.c
arch/mips/au1000/common/setup.c
+1
-1
arch/mips/mm/ioremap.c
arch/mips/mm/ioremap.c
+3
-12
include/asm-mips/io.h
include/asm-mips/io.h
+29
-2
include/asm-mips/mach-au1x00/ioremap.h
include/asm-mips/mach-au1x00/ioremap.h
+30
-0
include/asm-mips/mach-generic/ioremap.h
include/asm-mips/mach-generic/ioremap.h
+23
-0
未找到文件。
arch/mips/au1000/common/setup.c
浏览文件 @
c3455b0e
...
...
@@ -155,7 +155,7 @@ void __init plat_setup(void)
#if defined(CONFIG_64BIT_PHYS_ADDR)
/* This routine should be valid for all Au1x based boards */
phys_t
fixup_bigphys_addr
(
phys_t
phys_addr
,
phys_t
size
)
phys_t
__
fixup_bigphys_addr
(
phys_t
phys_addr
,
phys_t
size
)
{
u32
start
,
end
;
...
...
arch/mips/mm/ioremap.c
浏览文件 @
c3455b0e
...
...
@@ -101,15 +101,6 @@ static int remap_area_pages(unsigned long address, phys_t phys_addr,
return
error
;
}
/*
* Allow physical addresses to be fixed up to help 36 bit peripherals.
*/
phys_t
__attribute__
((
weak
))
fixup_bigphys_addr
(
phys_t
phys_addr
,
phys_t
size
)
{
return
phys_addr
;
}
/*
* Generic mapping function (not visible outside):
*/
...
...
@@ -126,7 +117,7 @@ fixup_bigphys_addr(phys_t phys_addr, phys_t size)
#define IS_LOW512(addr) (!((phys_t)(addr) & (phys_t) ~0x1fffffffULL))
void
*
__ioremap
(
phys_t
phys_addr
,
phys_t
size
,
unsigned
long
flags
)
void
__iomem
*
__ioremap
(
phys_t
phys_addr
,
phys_t
size
,
unsigned
long
flags
)
{
struct
vm_struct
*
area
;
unsigned
long
offset
;
...
...
@@ -146,7 +137,7 @@ void * __ioremap(phys_t phys_addr, phys_t size, unsigned long flags)
*/
if
(
IS_LOW512
(
phys_addr
)
&&
IS_LOW512
(
last_addr
)
&&
flags
==
_CACHE_UNCACHED
)
return
(
void
*
)
CKSEG1ADDR
(
phys_addr
);
return
(
void
__iomem
*
)
CKSEG1ADDR
(
phys_addr
);
/*
* Don't allow anybody to remap normal RAM that we're using..
...
...
@@ -182,7 +173,7 @@ void * __ioremap(phys_t phys_addr, phys_t size, unsigned long flags)
return
NULL
;
}
return
(
void
*
)
(
offset
+
(
char
*
)
addr
);
return
(
void
__iomem
*
)
(
offset
+
(
char
*
)
addr
);
}
#define IS_KSEG1(addr) (((unsigned long)(addr) & ~0x1fffffffUL) == CKSEG1)
...
...
include/asm-mips/io.h
浏览文件 @
c3455b0e
...
...
@@ -27,6 +27,7 @@
#include <asm/processor.h>
#include <asm/string.h>
#include <ioremap.h>
#include <mangle-port.h>
/*
...
...
@@ -209,6 +210,8 @@ extern void __iounmap(volatile void __iomem *addr);
static
inline
void
__iomem
*
__ioremap_mode
(
phys_t
offset
,
unsigned
long
size
,
unsigned
long
flags
)
{
#define __IS_LOW512(addr) (!((phys_t)(addr) & (phys_t) ~0x1fffffffULL))
if
(
cpu_has_64bit_addresses
)
{
u64
base
=
UNCAC_BASE
;
...
...
@@ -219,9 +222,29 @@ static inline void __iomem * __ioremap_mode(phys_t offset, unsigned long size,
if
(
flags
==
_CACHE_UNCACHED
)
base
=
(
u64
)
IO_BASE
;
return
(
void
__iomem
*
)
(
unsigned
long
)
(
base
+
offset
);
}
else
if
(
__builtin_constant_p
(
offset
)
&&
__builtin_constant_p
(
size
)
&&
__builtin_constant_p
(
flags
))
{
phys_t
phys_addr
,
last_addr
;
phys_addr
=
fixup_bigphys_addr
(
offset
,
size
);
/* Don't allow wraparound or zero size. */
last_addr
=
phys_addr
+
size
-
1
;
if
(
!
size
||
last_addr
<
phys_addr
)
return
NULL
;
/*
* Map uncached objects in the low 512MB of address
* space using KSEG1.
*/
if
(
__IS_LOW512
(
phys_addr
)
&&
__IS_LOW512
(
last_addr
)
&&
flags
==
_CACHE_UNCACHED
)
return
(
void
__iomem
*
)
CKSEG1ADDR
(
phys_addr
);
}
return
__ioremap
(
offset
,
size
,
flags
);
#undef __IS_LOW512
}
/*
...
...
@@ -273,12 +296,16 @@ static inline void __iomem * __ioremap_mode(phys_t offset, unsigned long size,
static
inline
void
iounmap
(
volatile
void
__iomem
*
addr
)
{
if
(
cpu_has_64bit_addresses
)
#define __IS_KSEG1(addr) (((unsigned long)(addr) & ~0x1fffffffUL) == CKSEG1)
if
(
cpu_has_64bit_addresses
||
(
__builtin_constant_p
(
addr
)
&&
__IS_KSEG1
(
addr
)))
return
;
__iounmap
(
addr
);
}
#undef __IS_KSEG1
}
#define __BUILD_MEMORY_SINGLE(pfx, bwlq, type, irq) \
\
...
...
include/asm-mips/mach-au1x00/ioremap.h
0 → 100644
浏览文件 @
c3455b0e
/*
* include/asm-mips/mach-au1x00/ioremap.h
*
* 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 Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#ifndef __ASM_MACH_AU1X00_IOREMAP_H
#define __ASM_MACH_AU1X00_IOREMAP_H
#include <linux/config.h>
#include <linux/types.h>
#ifndef CONFIG_64BIT_PHYS_ADDR
static
inline
phys_t
__fixup_bigphys_addr
(
phys_t
phys_addr
,
phys_t
size
)
{
return
phys_addr
;
}
#endif
/*
* Allow physical addresses to be fixed up to help 36-bit peripherals.
*/
static
inline
phys_t
fixup_bigphys_addr
(
phys_t
phys_addr
,
phys_t
size
)
{
return
__fixup_bigphys_addr
(
phys_addr
,
size
);
}
#endif
/* __ASM_MACH_AU1X00_IOREMAP_H */
include/asm-mips/mach-generic/ioremap.h
0 → 100644
浏览文件 @
c3455b0e
/*
* include/asm-mips/mach-generic/ioremap.h
*
* 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 Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#ifndef __ASM_MACH_GENERIC_IOREMAP_H
#define __ASM_MACH_GENERIC_IOREMAP_H
#include <linux/types.h>
/*
* Allow physical addresses to be fixed up to help peripherals located
* outside the low 32-bit range -- generic pass-through version.
*/
static
inline
phys_t
fixup_bigphys_addr
(
phys_t
phys_addr
,
phys_t
size
)
{
return
phys_addr
;
}
#endif
/* __ASM_MACH_GENERIC_IOREMAP_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录