Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
1ecc6ab6
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1ecc6ab6
编写于
7月 05, 2009
作者:
P
Paul Mundt
浏览文件
操作
浏览文件
下载
差异文件
Merge branches 'sh/hwblk', 'sh/cpuidle' and 'sh/stable-updates'
上级
4048e5ca
7426394f
9731f4a2
变更
33
展开全部
隐藏空白更改
内联
并排
Showing
33 changed file
with
1315 addition
and
613 deletion
+1315
-613
arch/sh/boards/mach-se/7724/setup.c
arch/sh/boards/mach-se/7724/setup.c
+38
-0
arch/sh/include/asm/hwblk.h
arch/sh/include/asm/hwblk.h
+61
-0
arch/sh/include/asm/suspend.h
arch/sh/include/asm/suspend.h
+9
-0
arch/sh/include/cpu-sh4/cpu/sh7722.h
arch/sh/include/cpu-sh4/cpu/sh7722.h
+14
-0
arch/sh/kernel/cpu/Makefile
arch/sh/kernel/cpu/Makefile
+1
-1
arch/sh/kernel/cpu/hwblk.c
arch/sh/kernel/cpu/hwblk.c
+130
-0
arch/sh/kernel/cpu/sh4a/Makefile
arch/sh/kernel/cpu/sh4a/Makefile
+1
-1
arch/sh/kernel/cpu/sh4a/clock-sh7722.c
arch/sh/kernel/cpu/sh4a/clock-sh7722.c
+32
-28
arch/sh/kernel/cpu/sh4a/hwblk-sh7722.c
arch/sh/kernel/cpu/sh4a/hwblk-sh7722.c
+106
-0
arch/sh/kernel/cpu/shmobile/Makefile
arch/sh/kernel/cpu/shmobile/Makefile
+1
-0
arch/sh/kernel/cpu/shmobile/cpuidle.c
arch/sh/kernel/cpu/shmobile/cpuidle.c
+102
-0
arch/sh/kernel/cpu/shmobile/pm.c
arch/sh/kernel/cpu/shmobile/pm.c
+13
-13
arch/sh/kernel/time.c
arch/sh/kernel/time.c
+2
-0
arch/x86/Kconfig
arch/x86/Kconfig
+2
-13
arch/x86/kernel/pci-dma.c
arch/x86/kernel/pci-dma.c
+1
-1
drivers/pci/intel-iommu.c
drivers/pci/intel-iommu.c
+350
-345
drivers/scsi/cxgb3i/cxgb3i_iscsi.c
drivers/scsi/cxgb3i/cxgb3i_iscsi.c
+4
-0
drivers/scsi/fnic/fnic_main.c
drivers/scsi/fnic/fnic_main.c
+4
-4
drivers/scsi/fnic/fnic_scsi.c
drivers/scsi/fnic/fnic_scsi.c
+2
-5
drivers/scsi/ibmvscsi/ibmvscsi.c
drivers/scsi/ibmvscsi/ibmvscsi.c
+6
-1
drivers/scsi/scsi_transport_fc.c
drivers/scsi/scsi_transport_fc.c
+3
-2
drivers/scsi/zalon.c
drivers/scsi/zalon.c
+1
-1
drivers/serial/sh-sci.c
drivers/serial/sh-sci.c
+4
-3
drivers/usb/host/Kconfig
drivers/usb/host/Kconfig
+2
-2
fs/btrfs/async-thread.c
fs/btrfs/async-thread.c
+1
-1
fs/btrfs/ctree.h
fs/btrfs/ctree.h
+1
-2
fs/btrfs/extent-tree.c
fs/btrfs/extent-tree.c
+391
-175
fs/btrfs/file.c
fs/btrfs/file.c
+4
-1
fs/btrfs/inode.c
fs/btrfs/inode.c
+18
-7
fs/btrfs/ioctl.c
fs/btrfs/ioctl.c
+4
-2
fs/btrfs/relocation.c
fs/btrfs/relocation.c
+1
-4
fs/btrfs/transaction.c
fs/btrfs/transaction.c
+3
-1
fs/notify/inotify/inotify_user.c
fs/notify/inotify/inotify_user.c
+3
-0
未找到文件。
arch/sh/boards/mach-se/7724/setup.c
浏览文件 @
1ecc6ab6
...
...
@@ -19,6 +19,7 @@
#include <linux/smc91x.h>
#include <linux/gpio.h>
#include <linux/input.h>
#include <linux/usb/r8a66597.h>
#include <video/sh_mobile_lcdc.h>
#include <media/sh_mobile_ceu.h>
#include <asm/io.h>
...
...
@@ -302,6 +303,34 @@ static struct platform_device sh_eth_device = {
.
resource
=
sh_eth_resources
,
};
static
struct
r8a66597_platdata
sh7724_usb0_host_data
=
{
};
static
struct
resource
sh7724_usb0_host_resources
[]
=
{
[
0
]
=
{
.
start
=
0xa4d80000
,
.
end
=
0xa4d800ff
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
65
,
.
end
=
65
,
.
flags
=
IORESOURCE_IRQ
|
IRQF_TRIGGER_LOW
,
},
};
static
struct
platform_device
sh7724_usb0_host_device
=
{
.
name
=
"r8a66597_hcd"
,
.
id
=
0
,
.
dev
=
{
.
dma_mask
=
NULL
,
/* not use dma */
.
coherent_dma_mask
=
0xffffffff
,
.
platform_data
=
&
sh7724_usb0_host_data
,
},
.
num_resources
=
ARRAY_SIZE
(
sh7724_usb0_host_resources
),
.
resource
=
sh7724_usb0_host_resources
,
};
static
struct
platform_device
*
ms7724se_devices
[]
__initdata
=
{
&
heartbeat_device
,
&
smc91x_eth_device
,
...
...
@@ -311,6 +340,7 @@ static struct platform_device *ms7724se_devices[] __initdata = {
&
ceu1_device
,
&
keysc_device
,
&
sh_eth_device
,
&
sh7724_usb0_host_device
,
};
#define EEPROM_OP 0xBA206000
...
...
@@ -364,6 +394,7 @@ static void __init sh_eth_init(void)
#define SW4140 0xBA201000
#define FPGA_OUT 0xBA200400
#define PORT_HIZA 0xA4050158
#define PORT_MSELCRB 0xA4050182
#define SW41_A 0x0100
#define SW41_B 0x0200
...
...
@@ -373,6 +404,7 @@ static void __init sh_eth_init(void)
#define SW41_F 0x2000
#define SW41_G 0x4000
#define SW41_H 0x8000
static
int
__init
devices_setup
(
void
)
{
u16
sw
=
ctrl_inw
(
SW4140
);
/* select camera, monitor */
...
...
@@ -385,6 +417,12 @@ static int __init devices_setup(void)
(
1
<<
14
)),
/* RMII */
FPGA_OUT
);
/* turn on USB clocks, use external clock */
ctrl_outw
((
ctrl_inw
(
PORT_MSELCRB
)
&
~
0xc000
)
|
0x8000
,
PORT_MSELCRB
);
/* enable USB0 port */
ctrl_outw
(
0x0600
,
0xa40501d4
);
/* enable IRQ 0,1,2 */
gpio_request
(
GPIO_FN_INTC_IRQ0
,
NULL
);
gpio_request
(
GPIO_FN_INTC_IRQ1
,
NULL
);
...
...
arch/sh/include/asm/hwblk.h
0 → 100644
浏览文件 @
1ecc6ab6
#ifndef __ASM_SH_HWBLK_H
#define __ASM_SH_HWBLK_H
#include <asm/clock.h>
#include <asm/io.h>
#define HWBLK_AREA_FLAG_PARENT (1 << 0)
/* valid parent */
#define HWBLK_AREA(_flags, _parent) \
{ \
.flags = _flags, \
.parent = _parent, \
}
struct
hwblk_area
{
unsigned
long
cnt
;
unsigned
char
parent
;
unsigned
char
flags
;
};
#define HWBLK(_mstp, _bit, _area) \
{ \
.mstp = (void __iomem *)_mstp, \
.bit = _bit, \
.area = _area, \
}
struct
hwblk
{
void
__iomem
*
mstp
;
unsigned
char
bit
;
unsigned
char
area
;
unsigned
long
cnt
;
};
struct
hwblk_info
{
struct
hwblk_area
*
areas
;
int
nr_areas
;
struct
hwblk
*
hwblks
;
int
nr_hwblks
;
};
/* Should be defined by processor-specific code */
int
arch_hwblk_init
(
void
);
int
arch_hwblk_sleep_mode
(
void
);
int
hwblk_register
(
struct
hwblk_info
*
info
);
int
hwblk_init
(
void
);
/* allow clocks to enable and disable hardware blocks */
#define SH_HWBLK_CLK(_name, _id, _parent, _hwblk, _flags) \
{ \
.name = _name, \
.id = _id, \
.parent = _parent, \
.arch_flags = _hwblk, \
.flags = _flags, \
}
int
sh_hwblk_clk_register
(
struct
clk
*
clks
,
int
nr
);
#endif
/* __ASM_SH_HWBLK_H */
arch/sh/include/asm/suspend.h
浏览文件 @
1ecc6ab6
...
...
@@ -10,6 +10,15 @@ struct swsusp_arch_regs {
struct
pt_regs
user_regs
;
unsigned
long
bank1_regs
[
8
];
};
void
sh_mobile_call_standby
(
unsigned
long
mode
);
#ifdef CONFIG_CPU_IDLE
void
sh_mobile_setup_cpuidle
(
void
);
#else
static
inline
void
sh_mobile_setup_cpuidle
(
void
)
{}
#endif
#endif
/* flags passed to assembly suspend code */
...
...
arch/sh/include/cpu-sh4/cpu/sh7722.h
浏览文件 @
1ecc6ab6
...
...
@@ -221,4 +221,18 @@ enum {
GPIO_FN_KEYOUT3
,
GPIO_FN_KEYOUT4_IN6
,
GPIO_FN_KEYOUT5_IN5
,
};
enum
{
HWBLK_UNKNOWN
=
0
,
HWBLK_TLB
,
HWBLK_IC
,
HWBLK_OC
,
HWBLK_URAM
,
HWBLK_XYMEM
,
HWBLK_INTC
,
HWBLK_DMAC
,
HWBLK_SHYWAY
,
HWBLK_HUDI
,
HWBLK_UBC
,
HWBLK_TMU
,
HWBLK_CMT
,
HWBLK_RWDT
,
HWBLK_FLCTL
,
HWBLK_SCIF0
,
HWBLK_SCIF1
,
HWBLK_SCIF2
,
HWBLK_SIO
,
HWBLK_SIOF0
,
HWBLK_SIOF1
,
HWBLK_IIC
,
HWBLK_RTC
,
HWBLK_TPU
,
HWBLK_IRDA
,
HWBLK_SDHI
,
HWBLK_SIM
,
HWBLK_KEYSC
,
HWBLK_TSIF
,
HWBLK_USBF
,
HWBLK_2DG
,
HWBLK_SIU
,
HWBLK_VOU
,
HWBLK_JPU
,
HWBLK_BEU
,
HWBLK_CEU
,
HWBLK_VEU
,
HWBLK_VPU
,
HWBLK_LCDC
,
HWBLK_NR
,
};
#endif
/* __ASM_SH7722_H__ */
arch/sh/kernel/cpu/Makefile
浏览文件 @
1ecc6ab6
...
...
@@ -19,4 +19,4 @@ obj-$(CONFIG_UBC_WAKEUP) += ubc.o
obj-$(CONFIG_SH_ADC)
+=
adc.o
obj-$(CONFIG_SH_CLK_CPG)
+=
clock-cpg.o
obj-y
+=
irq/ init.o clock.o
obj-y
+=
irq/ init.o clock.o
hwblk.o
arch/sh/kernel/cpu/hwblk.c
0 → 100644
浏览文件 @
1ecc6ab6
#include <linux/clk.h>
#include <linux/compiler.h>
#include <linux/slab.h>
#include <linux/io.h>
#include <linux/spinlock.h>
#include <asm/suspend.h>
#include <asm/hwblk.h>
#include <asm/clock.h>
static
DEFINE_SPINLOCK
(
hwblk_lock
);
static
void
hwblk_area_inc
(
struct
hwblk_info
*
info
,
int
area
)
{
struct
hwblk_area
*
hap
=
info
->
areas
+
area
;
hap
->
cnt
++
;
if
(
hap
->
cnt
==
1
)
if
(
hap
->
flags
&
HWBLK_AREA_FLAG_PARENT
)
hwblk_area_inc
(
info
,
hap
->
parent
);
}
static
void
hwblk_area_dec
(
struct
hwblk_info
*
info
,
int
area
)
{
struct
hwblk_area
*
hap
=
info
->
areas
+
area
;
if
(
hap
->
cnt
==
1
)
if
(
hap
->
flags
&
HWBLK_AREA_FLAG_PARENT
)
hwblk_area_dec
(
info
,
hap
->
parent
);
hap
->
cnt
--
;
}
static
void
hwblk_enable
(
struct
hwblk_info
*
info
,
int
hwblk
)
{
struct
hwblk
*
hp
=
info
->
hwblks
+
hwblk
;
unsigned
long
tmp
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
hwblk_lock
,
flags
);
hp
->
cnt
++
;
if
(
hp
->
cnt
==
1
)
{
hwblk_area_inc
(
info
,
hp
->
area
);
tmp
=
__raw_readl
(
hp
->
mstp
);
tmp
&=
~
(
1
<<
hp
->
bit
);
__raw_writel
(
tmp
,
hp
->
mstp
);
}
spin_unlock_irqrestore
(
&
hwblk_lock
,
flags
);
}
static
void
hwblk_disable
(
struct
hwblk_info
*
info
,
int
hwblk
)
{
struct
hwblk
*
hp
=
info
->
hwblks
+
hwblk
;
unsigned
long
tmp
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
hwblk_lock
,
flags
);
if
(
hp
->
cnt
==
1
)
{
hwblk_area_dec
(
info
,
hp
->
area
);
tmp
=
__raw_readl
(
hp
->
mstp
);
tmp
|=
1
<<
hp
->
bit
;
__raw_writel
(
tmp
,
hp
->
mstp
);
}
hp
->
cnt
--
;
spin_unlock_irqrestore
(
&
hwblk_lock
,
flags
);
}
static
struct
hwblk_info
*
hwblk_info
;
int
__init
hwblk_register
(
struct
hwblk_info
*
info
)
{
hwblk_info
=
info
;
return
0
;
}
int
__init
__weak
arch_hwblk_init
(
void
)
{
return
0
;
}
int
__weak
arch_hwblk_sleep_mode
(
void
)
{
return
SUSP_SH_SLEEP
;
}
int
__init
hwblk_init
(
void
)
{
return
arch_hwblk_init
();
}
/* allow clocks to enable and disable hardware blocks */
static
int
sh_hwblk_clk_enable
(
struct
clk
*
clk
)
{
if
(
!
hwblk_info
)
return
-
ENOENT
;
hwblk_enable
(
hwblk_info
,
clk
->
arch_flags
);
return
0
;
}
static
void
sh_hwblk_clk_disable
(
struct
clk
*
clk
)
{
if
(
hwblk_info
)
hwblk_disable
(
hwblk_info
,
clk
->
arch_flags
);
}
static
struct
clk_ops
sh_hwblk_clk_ops
=
{
.
enable
=
sh_hwblk_clk_enable
,
.
disable
=
sh_hwblk_clk_disable
,
.
recalc
=
followparent_recalc
,
};
int
__init
sh_hwblk_clk_register
(
struct
clk
*
clks
,
int
nr
)
{
struct
clk
*
clkp
;
int
ret
=
0
;
int
k
;
for
(
k
=
0
;
!
ret
&&
(
k
<
nr
);
k
++
)
{
clkp
=
clks
+
k
;
clkp
->
ops
=
&
sh_hwblk_clk_ops
;
ret
|=
clk_register
(
clkp
);
}
return
ret
;
}
arch/sh/kernel/cpu/sh4a/Makefile
浏览文件 @
1ecc6ab6
...
...
@@ -25,7 +25,7 @@ clock-$(CONFIG_CPU_SUBTYPE_SH7780) := clock-sh7780.o
clock-$(CONFIG_CPU_SUBTYPE_SH7785)
:=
clock-sh7785.o
clock-$(CONFIG_CPU_SUBTYPE_SH7786)
:=
clock-sh7786.o
clock-$(CONFIG_CPU_SUBTYPE_SH7343)
:=
clock-sh7343.o
clock-$(CONFIG_CPU_SUBTYPE_SH7722)
:=
clock-sh7722.o
clock-$(CONFIG_CPU_SUBTYPE_SH7722)
:=
clock-sh7722.o
hwblk-sh7722.o
clock-$(CONFIG_CPU_SUBTYPE_SH7723)
:=
clock-sh7723.o
clock-$(CONFIG_CPU_SUBTYPE_SH7724)
:=
clock-sh7724.o
clock-$(CONFIG_CPU_SUBTYPE_SH7366)
:=
clock-sh7366.o
...
...
arch/sh/kernel/cpu/sh4a/clock-sh7722.c
浏览文件 @
1ecc6ab6
...
...
@@ -22,6 +22,8 @@
#include <linux/kernel.h>
#include <linux/io.h>
#include <asm/clock.h>
#include <asm/hwblk.h>
#include <cpu/sh7722.h>
/* SH7722 registers */
#define FRQCR 0xa4150000
...
...
@@ -140,35 +142,37 @@ struct clk div6_clks[] = {
SH_CLK_DIV6
(
"video_clk"
,
&
pll_clk
,
VCLKCR
,
0
),
};
#define MSTP(_str, _parent, _reg, _bit, _flags) \
SH_CLK_MSTP32(_str, -1, _parent, _reg, _bit, _flags)
#define R_CLK &r_clk
#define P_CLK &div4_clks[DIV4_P]
#define B_CLK &div4_clks[DIV4_B]
#define U_CLK &div4_clks[DIV4_U]
static
struct
clk
mstp_clks
[]
=
{
MSTP
(
"uram0"
,
&
div4_clks
[
DIV4_U
],
MSTPCR0
,
28
,
CLK_ENABLE_ON_INIT
),
MSTP
(
"xymem0"
,
&
div4_clks
[
DIV4_B
],
MSTPCR0
,
26
,
CLK_ENABLE_ON_INIT
),
MSTP
(
"tmu0"
,
&
div4_clks
[
DIV4_P
],
MSTPCR0
,
15
,
0
),
MSTP
(
"cmt0"
,
&
r_clk
,
MSTPCR0
,
14
,
0
),
MSTP
(
"rwdt0"
,
&
r_clk
,
MSTPCR0
,
13
,
0
),
MSTP
(
"flctl0"
,
&
div4_clks
[
DIV4_P
],
MSTPCR0
,
10
,
0
),
MSTP
(
"scif0"
,
&
div4_clks
[
DIV4_P
],
MSTPCR0
,
7
,
0
),
MSTP
(
"scif1"
,
&
div4_clks
[
DIV4_P
],
MSTPCR0
,
6
,
0
),
MSTP
(
"scif2"
,
&
div4_clks
[
DIV4_P
],
MSTPCR0
,
5
,
0
),
MSTP
(
"i2c0"
,
&
div4_clks
[
DIV4_P
],
MSTPCR1
,
9
,
0
),
MSTP
(
"rtc0"
,
&
r_clk
,
MSTPCR1
,
8
,
0
),
MSTP
(
"sdhi0"
,
&
div4_clks
[
DIV4_P
],
MSTPCR2
,
18
,
0
),
MSTP
(
"keysc0"
,
&
r_clk
,
MSTPCR2
,
14
,
0
),
MSTP
(
"usbf0"
,
&
div4_clks
[
DIV4_P
],
MSTPCR2
,
11
,
0
),
MSTP
(
"2dg0"
,
&
div4_clks
[
DIV4_B
],
MSTPCR2
,
9
,
0
),
MSTP
(
"siu0"
,
&
div4_clks
[
DIV4_B
],
MSTPCR2
,
8
,
0
),
MSTP
(
"vou0"
,
&
div4_clks
[
DIV4_B
],
MSTPCR2
,
5
,
0
),
MSTP
(
"jpu0"
,
&
div4_clks
[
DIV4_B
],
MSTPCR2
,
6
,
CLK_ENABLE_ON_INIT
),
MSTP
(
"beu0"
,
&
div4_clks
[
DIV4_B
],
MSTPCR2
,
4
,
0
),
MSTP
(
"ceu0"
,
&
div4_clks
[
DIV4_B
],
MSTPCR2
,
3
,
0
),
MSTP
(
"veu0"
,
&
div4_clks
[
DIV4_B
],
MSTPCR2
,
2
,
CLK_ENABLE_ON_INIT
),
MSTP
(
"vpu0"
,
&
div4_clks
[
DIV4_B
],
MSTPCR2
,
1
,
CLK_ENABLE_ON_INIT
),
MSTP
(
"lcdc0"
,
&
div4_clks
[
DIV4_B
],
MSTPCR2
,
0
,
0
),
SH_HWBLK_CLK
(
"uram0"
,
-
1
,
U_CLK
,
HWBLK_URAM
,
CLK_ENABLE_ON_INIT
),
SH_HWBLK_CLK
(
"xymem0"
,
-
1
,
B_CLK
,
HWBLK_XYMEM
,
CLK_ENABLE_ON_INIT
),
SH_HWBLK_CLK
(
"tmu0"
,
-
1
,
P_CLK
,
HWBLK_TMU
,
0
),
SH_HWBLK_CLK
(
"cmt0"
,
-
1
,
R_CLK
,
HWBLK_CMT
,
0
),
SH_HWBLK_CLK
(
"rwdt0"
,
-
1
,
R_CLK
,
HWBLK_RWDT
,
0
),
SH_HWBLK_CLK
(
"flctl0"
,
-
1
,
P_CLK
,
HWBLK_FLCTL
,
0
),
SH_HWBLK_CLK
(
"scif0"
,
-
1
,
P_CLK
,
HWBLK_SCIF0
,
0
),
SH_HWBLK_CLK
(
"scif1"
,
-
1
,
P_CLK
,
HWBLK_SCIF1
,
0
),
SH_HWBLK_CLK
(
"scif2"
,
-
1
,
P_CLK
,
HWBLK_SCIF2
,
0
),
SH_HWBLK_CLK
(
"i2c0"
,
-
1
,
P_CLK
,
HWBLK_IIC
,
0
),
SH_HWBLK_CLK
(
"rtc0"
,
-
1
,
R_CLK
,
HWBLK_RTC
,
0
),
SH_HWBLK_CLK
(
"sdhi0"
,
-
1
,
P_CLK
,
HWBLK_SDHI
,
0
),
SH_HWBLK_CLK
(
"keysc0"
,
-
1
,
R_CLK
,
HWBLK_KEYSC
,
0
),
SH_HWBLK_CLK
(
"usbf0"
,
-
1
,
P_CLK
,
HWBLK_USBF
,
0
),
SH_HWBLK_CLK
(
"2dg0"
,
-
1
,
B_CLK
,
HWBLK_2DG
,
0
),
SH_HWBLK_CLK
(
"siu0"
,
-
1
,
B_CLK
,
HWBLK_SIU
,
0
),
SH_HWBLK_CLK
(
"vou0"
,
-
1
,
B_CLK
,
HWBLK_VOU
,
0
),
SH_HWBLK_CLK
(
"jpu0"
,
-
1
,
B_CLK
,
HWBLK_JPU
,
CLK_ENABLE_ON_INIT
),
SH_HWBLK_CLK
(
"beu0"
,
-
1
,
B_CLK
,
HWBLK_BEU
,
0
),
SH_HWBLK_CLK
(
"ceu0"
,
-
1
,
B_CLK
,
HWBLK_CEU
,
0
),
SH_HWBLK_CLK
(
"veu0"
,
-
1
,
B_CLK
,
HWBLK_VEU
,
CLK_ENABLE_ON_INIT
),
SH_HWBLK_CLK
(
"vpu0"
,
-
1
,
B_CLK
,
HWBLK_VPU
,
CLK_ENABLE_ON_INIT
),
SH_HWBLK_CLK
(
"lcdc0"
,
-
1
,
P_CLK
,
HWBLK_LCDC
,
0
),
};
int
__init
arch_clk_init
(
void
)
...
...
@@ -191,7 +195,7 @@ int __init arch_clk_init(void)
ret
=
sh_clk_div6_register
(
div6_clks
,
ARRAY_SIZE
(
div6_clks
));
if
(
!
ret
)
ret
=
sh_
clk_mstp32
_register
(
mstp_clks
,
ARRAY_SIZE
(
mstp_clks
));
ret
=
sh_
hwblk_clk
_register
(
mstp_clks
,
ARRAY_SIZE
(
mstp_clks
));
return
ret
;
}
arch/sh/kernel/cpu/sh4a/hwblk-sh7722.c
0 → 100644
浏览文件 @
1ecc6ab6
/*
* arch/sh/kernel/cpu/sh4a/hwblk-sh7722.c
*
* SH7722 hardware block support
*
* Copyright (C) 2009 Magnus Damm
*
* 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
*
* This program is distributed in the hope that 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 <linux/kernel.h>
#include <linux/io.h>
#include <asm/suspend.h>
#include <asm/hwblk.h>
#include <cpu/sh7722.h>
/* SH7722 registers */
#define MSTPCR0 0xa4150030
#define MSTPCR1 0xa4150034
#define MSTPCR2 0xa4150038
/* SH7722 Power Domains */
enum
{
CORE_AREA
,
SUB_AREA
,
CORE_AREA_BM
};
static
struct
hwblk_area
sh7722_hwblk_area
[]
=
{
[
CORE_AREA
]
=
HWBLK_AREA
(
0
,
0
),
[
CORE_AREA_BM
]
=
HWBLK_AREA
(
HWBLK_AREA_FLAG_PARENT
,
CORE_AREA
),
[
SUB_AREA
]
=
HWBLK_AREA
(
0
,
0
),
};
/* Table mapping HWBLK to Module Stop Bit and Power Domain */
static
struct
hwblk
sh7722_hwblk
[
HWBLK_NR
]
=
{
[
HWBLK_TLB
]
=
HWBLK
(
MSTPCR0
,
31
,
CORE_AREA
),
[
HWBLK_IC
]
=
HWBLK
(
MSTPCR0
,
30
,
CORE_AREA
),
[
HWBLK_OC
]
=
HWBLK
(
MSTPCR0
,
29
,
CORE_AREA
),
[
HWBLK_URAM
]
=
HWBLK
(
MSTPCR0
,
28
,
CORE_AREA
),
[
HWBLK_XYMEM
]
=
HWBLK
(
MSTPCR0
,
26
,
CORE_AREA
),
[
HWBLK_INTC
]
=
HWBLK
(
MSTPCR0
,
22
,
CORE_AREA
),
[
HWBLK_DMAC
]
=
HWBLK
(
MSTPCR0
,
21
,
CORE_AREA_BM
),
[
HWBLK_SHYWAY
]
=
HWBLK
(
MSTPCR0
,
20
,
CORE_AREA
),
[
HWBLK_HUDI
]
=
HWBLK
(
MSTPCR0
,
19
,
CORE_AREA
),
[
HWBLK_UBC
]
=
HWBLK
(
MSTPCR0
,
17
,
CORE_AREA
),
[
HWBLK_TMU
]
=
HWBLK
(
MSTPCR0
,
15
,
CORE_AREA
),
[
HWBLK_CMT
]
=
HWBLK
(
MSTPCR0
,
14
,
SUB_AREA
),
[
HWBLK_RWDT
]
=
HWBLK
(
MSTPCR0
,
13
,
SUB_AREA
),
[
HWBLK_FLCTL
]
=
HWBLK
(
MSTPCR0
,
10
,
CORE_AREA
),
[
HWBLK_SCIF0
]
=
HWBLK
(
MSTPCR0
,
7
,
CORE_AREA
),
[
HWBLK_SCIF1
]
=
HWBLK
(
MSTPCR0
,
6
,
CORE_AREA
),
[
HWBLK_SCIF2
]
=
HWBLK
(
MSTPCR0
,
5
,
CORE_AREA
),
[
HWBLK_SIO
]
=
HWBLK
(
MSTPCR0
,
3
,
CORE_AREA
),
[
HWBLK_SIOF0
]
=
HWBLK
(
MSTPCR0
,
2
,
CORE_AREA
),
[
HWBLK_SIOF1
]
=
HWBLK
(
MSTPCR0
,
1
,
CORE_AREA
),
[
HWBLK_IIC
]
=
HWBLK
(
MSTPCR1
,
9
,
CORE_AREA
),
[
HWBLK_RTC
]
=
HWBLK
(
MSTPCR1
,
8
,
SUB_AREA
),
[
HWBLK_TPU
]
=
HWBLK
(
MSTPCR2
,
25
,
CORE_AREA
),
[
HWBLK_IRDA
]
=
HWBLK
(
MSTPCR2
,
24
,
CORE_AREA
),
[
HWBLK_SDHI
]
=
HWBLK
(
MSTPCR2
,
18
,
CORE_AREA
),
[
HWBLK_SIM
]
=
HWBLK
(
MSTPCR2
,
16
,
CORE_AREA
),
[
HWBLK_KEYSC
]
=
HWBLK
(
MSTPCR2
,
14
,
SUB_AREA
),
[
HWBLK_TSIF
]
=
HWBLK
(
MSTPCR2
,
13
,
SUB_AREA
),
[
HWBLK_USBF
]
=
HWBLK
(
MSTPCR2
,
11
,
CORE_AREA
),
[
HWBLK_2DG
]
=
HWBLK
(
MSTPCR2
,
9
,
CORE_AREA_BM
),
[
HWBLK_SIU
]
=
HWBLK
(
MSTPCR2
,
8
,
CORE_AREA
),
[
HWBLK_JPU
]
=
HWBLK
(
MSTPCR2
,
6
,
CORE_AREA_BM
),
[
HWBLK_VOU
]
=
HWBLK
(
MSTPCR2
,
5
,
CORE_AREA_BM
),
[
HWBLK_BEU
]
=
HWBLK
(
MSTPCR2
,
4
,
CORE_AREA_BM
),
[
HWBLK_CEU
]
=
HWBLK
(
MSTPCR2
,
3
,
CORE_AREA_BM
),
[
HWBLK_VEU
]
=
HWBLK
(
MSTPCR2
,
2
,
CORE_AREA_BM
),
[
HWBLK_VPU
]
=
HWBLK
(
MSTPCR2
,
1
,
CORE_AREA_BM
),
[
HWBLK_LCDC
]
=
HWBLK
(
MSTPCR2
,
0
,
CORE_AREA_BM
),
};
static
struct
hwblk_info
sh7722_hwblk_info
=
{
.
areas
=
sh7722_hwblk_area
,
.
nr_areas
=
ARRAY_SIZE
(
sh7722_hwblk_area
),
.
hwblks
=
sh7722_hwblk
,
.
nr_hwblks
=
ARRAY_SIZE
(
sh7722_hwblk
),
};
int
arch_hwblk_sleep_mode
(
void
)
{
if
(
!
sh7722_hwblk_area
[
CORE_AREA
].
cnt
)
return
SUSP_SH_STANDBY
|
SUSP_SH_SF
;
if
(
!
sh7722_hwblk_area
[
CORE_AREA_BM
].
cnt
)
return
SUSP_SH_SLEEP
|
SUSP_SH_SF
;
return
SUSP_SH_SLEEP
;
}
int
__init
arch_hwblk_init
(
void
)
{
return
hwblk_register
(
&
sh7722_hwblk_info
);
}
arch/sh/kernel/cpu/shmobile/Makefile
浏览文件 @
1ecc6ab6
...
...
@@ -4,3 +4,4 @@
# Power Management & Sleep mode
obj-$(CONFIG_PM)
+=
pm.o sleep.o
obj-$(CONFIG_CPU_IDLE)
+=
cpuidle.o
arch/sh/kernel/cpu/shmobile/cpuidle.c
0 → 100644
浏览文件 @
1ecc6ab6
/*
* arch/sh/kernel/cpu/shmobile/cpuidle.c
*
* Cpuidle support code for SuperH Mobile
*
* Copyright (C) 2009 Magnus Damm
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*/
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/io.h>
#include <linux/suspend.h>
#include <linux/cpuidle.h>
#include <asm/suspend.h>
#include <asm/uaccess.h>
#include <asm/hwblk.h>
static
unsigned
long
cpuidle_mode
[]
=
{
SUSP_SH_SLEEP
,
/* regular sleep mode */
SUSP_SH_SLEEP
|
SUSP_SH_SF
,
/* sleep mode + self refresh */
};
static
int
cpuidle_sleep_enter
(
struct
cpuidle_device
*
dev
,
struct
cpuidle_state
*
state
)
{
unsigned
long
allowed_mode
=
arch_hwblk_sleep_mode
();
ktime_t
before
,
after
;
int
requested_state
=
state
-
&
dev
->
states
[
0
];
int
allowed_state
;
int
k
;
/* convert allowed mode to allowed state */
for
(
k
=
ARRAY_SIZE
(
cpuidle_mode
)
-
1
;
k
>
0
;
k
--
)
if
(
cpuidle_mode
[
k
]
==
allowed_mode
)
break
;
allowed_state
=
k
;
/* take the following into account for sleep mode selection:
* - allowed_state: best mode allowed by hardware (clock deps)
* - requested_state: best mode allowed by software (latencies)
*/
k
=
min_t
(
int
,
allowed_state
,
requested_state
);
dev
->
last_state
=
&
dev
->
states
[
k
];
before
=
ktime_get
();
sh_mobile_call_standby
(
cpuidle_mode
[
k
]);
after
=
ktime_get
();
return
ktime_to_ns
(
ktime_sub
(
after
,
before
))
>>
10
;
}
static
struct
cpuidle_device
cpuidle_dev
;
static
struct
cpuidle_driver
cpuidle_driver
=
{
.
name
=
"sh_idle"
,
.
owner
=
THIS_MODULE
,
};
void
sh_mobile_setup_cpuidle
(
void
)
{
struct
cpuidle_device
*
dev
=
&
cpuidle_dev
;
struct
cpuidle_state
*
state
;
int
i
;
cpuidle_register_driver
(
&
cpuidle_driver
);
for
(
i
=
0
;
i
<
CPUIDLE_STATE_MAX
;
i
++
)
{
dev
->
states
[
i
].
name
[
0
]
=
'\0'
;
dev
->
states
[
i
].
desc
[
0
]
=
'\0'
;
}
i
=
CPUIDLE_DRIVER_STATE_START
;
state
=
&
dev
->
states
[
i
++
];
snprintf
(
state
->
name
,
CPUIDLE_NAME_LEN
,
"C0"
);
strncpy
(
state
->
desc
,
"SuperH Sleep Mode"
,
CPUIDLE_DESC_LEN
);
state
->
exit_latency
=
1
;
state
->
target_residency
=
1
*
2
;
state
->
power_usage
=
3
;
state
->
flags
=
0
;
state
->
flags
|=
CPUIDLE_FLAG_SHALLOW
;
state
->
flags
|=
CPUIDLE_FLAG_TIME_VALID
;
state
->
enter
=
cpuidle_sleep_enter
;
dev
->
safe_state
=
state
;
state
=
&
dev
->
states
[
i
++
];
snprintf
(
state
->
name
,
CPUIDLE_NAME_LEN
,
"C1"
);
strncpy
(
state
->
desc
,
"SuperH Sleep Mode [SF]"
,
CPUIDLE_DESC_LEN
);
state
->
exit_latency
=
100
;
state
->
target_residency
=
1
*
2
;
state
->
power_usage
=
1
;
state
->
flags
=
0
;
state
->
flags
|=
CPUIDLE_FLAG_TIME_VALID
;
state
->
enter
=
cpuidle_sleep_enter
;
dev
->
state_count
=
i
;
cpuidle_register_device
(
dev
);
}
arch/sh/kernel/cpu/shmobile/pm.c
浏览文件 @
1ecc6ab6
/*
* arch/sh/kernel/cpu/sh
4a/pm-sh_mobile
.c
* arch/sh/kernel/cpu/sh
mobile/pm
.c
*
* Power management support code for SuperH Mobile
*
...
...
@@ -32,20 +32,17 @@
*
* R-standby mode is unsupported, but will be added in the future
* U-standby mode is low priority since it needs bootloader hacks
*
* All modes should be tied in with cpuidle. But before that can
* happen we need to keep track of enabled hardware blocks so we
* can avoid entering sleep modes that stop clocks to hardware
* blocks that are in use even though the cpu core is idle.
*/
#define ILRAM_BASE 0xe5200000
extern
const
unsigned
char
sh_mobile_standby
[];
extern
const
unsigned
int
sh_mobile_standby_size
;
static
void
sh_mobile_call_standby
(
unsigned
long
mode
)
void
sh_mobile_call_standby
(
unsigned
long
mode
)
{
extern
void
*
vbr_base
;
void
*
onchip_mem
=
(
void
*
)
0xe5200000
;
/* ILRAM */
void
*
onchip_mem
=
(
void
*
)
ILRAM_BASE
;
void
(
*
standby_onchip_mem
)(
unsigned
long
)
=
onchip_mem
;
/* Note: Wake up from sleep may generate exceptions!
...
...
@@ -55,11 +52,6 @@ static void sh_mobile_call_standby(unsigned long mode)
if
(
mode
&
SUSP_SH_SF
)
asm
volatile
(
"ldc %0, vbr"
:
:
"r"
(
onchip_mem
)
:
"memory"
);
/* Copy the assembly snippet to the otherwise ununsed ILRAM */
memcpy
(
onchip_mem
,
sh_mobile_standby
,
sh_mobile_standby_size
);
wmb
();
ctrl_barrier
();
/* Let assembly snippet in on-chip memory handle the rest */
standby_onchip_mem
(
mode
);
...
...
@@ -85,7 +77,15 @@ static struct platform_suspend_ops sh_pm_ops = {
static
int
__init
sh_pm_init
(
void
)
{
void
*
onchip_mem
=
(
void
*
)
ILRAM_BASE
;
/* Copy the assembly snippet to the otherwise ununsed ILRAM */
memcpy
(
onchip_mem
,
sh_mobile_standby
,
sh_mobile_standby_size
);
wmb
();
ctrl_barrier
();
suspend_set_ops
(
&
sh_pm_ops
);
sh_mobile_setup_cpuidle
();
return
0
;
}
...
...
arch/sh/kernel/time.c
浏览文件 @
1ecc6ab6
...
...
@@ -21,6 +21,7 @@
#include <linux/smp.h>
#include <linux/rtc.h>
#include <asm/clock.h>
#include <asm/hwblk.h>
#include <asm/rtc.h>
/* Dummy RTC ops */
...
...
@@ -96,6 +97,7 @@ void __init time_init(void)
if
(
board_time_init
)
board_time_init
();
hwblk_init
();
clk_init
();
rtc_sh_get_time
(
&
xtime
);
...
...
arch/x86/Kconfig
浏览文件 @
1ecc6ab6
...
...
@@ -1913,25 +1913,14 @@ config DMAR_DEFAULT_ON
recommended you say N here while the DMAR code remains
experimental.
config DMAR_GFX_WA
def_bool y
prompt "Support for Graphics workaround"
depends on DMAR
---help---
Current Graphics drivers tend to use physical address
for DMA and avoid using DMA APIs. Setting this config
option permits the IOMMU driver to set a unity map for
all the OS-visible memory. Hence the driver can continue
to use physical addresses for DMA.
config DMAR_FLOPPY_WA
def_bool y
depends on DMAR
---help---
Floppy disk drivers are know to bypass DMA API calls
Floppy disk drivers are know
n
to bypass DMA API calls
thereby failing to work when IOMMU is enabled. This
workaround will setup a 1:1 mapping for the first
16M to make floppy (an ISA device) work.
16M
iB
to make floppy (an ISA device) work.
config INTR_REMAP
bool "Support for Interrupt Remapping (EXPERIMENTAL)"
...
...
arch/x86/kernel/pci-dma.c
浏览文件 @
1ecc6ab6
...
...
@@ -211,11 +211,11 @@ static __init int iommu_setup(char *p)
#ifdef CONFIG_SWIOTLB
if
(
!
strncmp
(
p
,
"soft"
,
4
))
swiotlb
=
1
;
#endif
if
(
!
strncmp
(
p
,
"pt"
,
2
))
{
iommu_pass_through
=
1
;
return
1
;
}
#endif
gart_parse_options
(
p
);
...
...
drivers/pci/intel-iommu.c
浏览文件 @
1ecc6ab6
此差异已折叠。
点击以展开。
drivers/scsi/cxgb3i/cxgb3i_iscsi.c
浏览文件 @
1ecc6ab6
...
...
@@ -13,6 +13,7 @@
#include <linux/inet.h>
#include <linux/crypto.h>
#include <linux/if_vlan.h>
#include <net/dst.h>
#include <net/tcp.h>
#include <scsi/scsi_cmnd.h>
...
...
@@ -184,6 +185,9 @@ static struct cxgb3i_hba *cxgb3i_hba_find_by_netdev(struct net_device *ndev)
struct
cxgb3i_adapter
*
snic
;
int
i
;
if
(
ndev
->
priv_flags
&
IFF_802_1Q_VLAN
)
ndev
=
vlan_dev_real_dev
(
ndev
);
read_lock
(
&
cxgb3i_snic_rwlock
);
list_for_each_entry
(
snic
,
&
cxgb3i_snic_list
,
list_head
)
{
for
(
i
=
0
;
i
<
snic
->
hba_cnt
;
i
++
)
{
...
...
drivers/scsi/fnic/fnic_main.c
浏览文件 @
1ecc6ab6
...
...
@@ -473,16 +473,16 @@ static int __devinit fnic_probe(struct pci_dev *pdev,
* limitation for the device. Try 40-bit first, and
* fail to 32-bit.
*/
err
=
pci_set_dma_mask
(
pdev
,
DMA_
40BIT_MASK
);
err
=
pci_set_dma_mask
(
pdev
,
DMA_
BIT_MASK
(
40
)
);
if
(
err
)
{
err
=
pci_set_dma_mask
(
pdev
,
DMA_
32BIT_MASK
);
err
=
pci_set_dma_mask
(
pdev
,
DMA_
BIT_MASK
(
32
)
);
if
(
err
)
{
shost_printk
(
KERN_ERR
,
fnic
->
lport
->
host
,
"No usable DMA configuration "
"aborting
\n
"
);
goto
err_out_release_regions
;
}
err
=
pci_set_consistent_dma_mask
(
pdev
,
DMA_
32BIT_MASK
);
err
=
pci_set_consistent_dma_mask
(
pdev
,
DMA_
BIT_MASK
(
32
)
);
if
(
err
)
{
shost_printk
(
KERN_ERR
,
fnic
->
lport
->
host
,
"Unable to obtain 32-bit DMA "
...
...
@@ -490,7 +490,7 @@ static int __devinit fnic_probe(struct pci_dev *pdev,
goto
err_out_release_regions
;
}
}
else
{
err
=
pci_set_consistent_dma_mask
(
pdev
,
DMA_
40BIT_MASK
);
err
=
pci_set_consistent_dma_mask
(
pdev
,
DMA_
BIT_MASK
(
40
)
);
if
(
err
)
{
shost_printk
(
KERN_ERR
,
fnic
->
lport
->
host
,
"Unable to obtain 40-bit DMA "
...
...
drivers/scsi/fnic/fnic_scsi.c
浏览文件 @
1ecc6ab6
...
...
@@ -245,7 +245,7 @@ static inline int fnic_queue_wq_copy_desc(struct fnic *fnic,
struct
vnic_wq_copy
*
wq
,
struct
fnic_io_req
*
io_req
,
struct
scsi_cmnd
*
sc
,
u32
sg_count
)
int
sg_count
)
{
struct
scatterlist
*
sg
;
struct
fc_rport
*
rport
=
starget_to_rport
(
scsi_target
(
sc
->
device
));
...
...
@@ -260,9 +260,6 @@ static inline int fnic_queue_wq_copy_desc(struct fnic *fnic,
char
msg
[
2
];
if
(
sg_count
)
{
BUG_ON
(
sg_count
<
0
);
BUG_ON
(
sg_count
>
FNIC_MAX_SG_DESC_CNT
);
/* For each SGE, create a device desc entry */
desc
=
io_req
->
sgl_list
;
for_each_sg
(
scsi_sglist
(
sc
),
sg
,
sg_count
,
i
)
{
...
...
@@ -344,7 +341,7 @@ int fnic_queuecommand(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
struct
fnic
*
fnic
;
struct
vnic_wq_copy
*
wq
;
int
ret
;
u32
sg_count
;
int
sg_count
;
unsigned
long
flags
;
unsigned
long
ptr
;
...
...
drivers/scsi/ibmvscsi/ibmvscsi.c
浏览文件 @
1ecc6ab6
...
...
@@ -1095,9 +1095,14 @@ static void adapter_info_rsp(struct srp_event_struct *evt_struct)
MAX_INDIRECT_BUFS
);
hostdata
->
host
->
sg_tablesize
=
MAX_INDIRECT_BUFS
;
}
if
(
hostdata
->
madapter_info
.
os_type
==
3
)
{
enable_fast_fail
(
hostdata
);
return
;
}
}
enable_fast_fail
(
hostdata
);
send_srp_login
(
hostdata
);
}
/**
...
...
drivers/scsi/scsi_transport_fc.c
浏览文件 @
1ecc6ab6
...
...
@@ -3670,13 +3670,14 @@ static void
fc_bsg_goose_queue
(
struct
fc_rport
*
rport
)
{
int
flagset
;
unsigned
long
flags
;
if
(
!
rport
->
rqst_q
)
return
;
get_device
(
&
rport
->
dev
);
spin_lock
(
rport
->
rqst_q
->
queue_lock
);
spin_lock
_irqsave
(
rport
->
rqst_q
->
queue_lock
,
flags
);
flagset
=
test_bit
(
QUEUE_FLAG_REENTER
,
&
rport
->
rqst_q
->
queue_flags
)
&&
!
test_bit
(
QUEUE_FLAG_REENTER
,
&
rport
->
rqst_q
->
queue_flags
);
if
(
flagset
)
...
...
@@ -3684,7 +3685,7 @@ fc_bsg_goose_queue(struct fc_rport *rport)
__blk_run_queue
(
rport
->
rqst_q
);
if
(
flagset
)
queue_flag_clear
(
QUEUE_FLAG_REENTER
,
rport
->
rqst_q
);
spin_unlock
(
rport
->
rqst_q
->
queue_lock
);
spin_unlock
_irqrestore
(
rport
->
rqst_q
->
queue_lock
,
flags
);
put_device
(
&
rport
->
dev
);
}
...
...
drivers/scsi/zalon.c
浏览文件 @
1ecc6ab6
...
...
@@ -134,7 +134,7 @@ zalon_probe(struct parisc_device *dev)
host
=
ncr_attach
(
&
zalon7xx_template
,
unit
,
&
device
);
if
(
!
host
)
goto
fail
;
return
-
ENODEV
;
if
(
request_irq
(
dev
->
irq
,
ncr53c8xx_intr
,
IRQF_SHARED
,
"zalon"
,
host
))
{
dev_printk
(
KERN_ERR
,
&
dev
->
dev
,
"irq problem with %d, detaching
\n
"
,
...
...
drivers/serial/sh-sci.c
浏览文件 @
1ecc6ab6
...
...
@@ -707,12 +707,13 @@ static irqreturn_t sci_br_interrupt(int irq, void *ptr)
static
irqreturn_t
sci_mpxed_interrupt
(
int
irq
,
void
*
ptr
)
{
unsigned
short
ssr_status
,
scr_status
;
unsigned
short
ssr_status
,
scr_status
,
err_enabled
;
struct
uart_port
*
port
=
ptr
;
irqreturn_t
ret
=
IRQ_NONE
;
ssr_status
=
sci_in
(
port
,
SCxSR
);
scr_status
=
sci_in
(
port
,
SCSCR
);
err_enabled
=
scr_status
&
(
SCI_CTRL_FLAGS_REIE
|
SCI_CTRL_FLAGS_RIE
);
/* Tx Interrupt */
if
((
ssr_status
&
0x0020
)
&&
(
scr_status
&
SCI_CTRL_FLAGS_TIE
))
...
...
@@ -721,10 +722,10 @@ static irqreturn_t sci_mpxed_interrupt(int irq, void *ptr)
if
((
ssr_status
&
0x0002
)
&&
(
scr_status
&
SCI_CTRL_FLAGS_RIE
))
ret
=
sci_rx_interrupt
(
irq
,
ptr
);
/* Error Interrupt */
if
((
ssr_status
&
0x0080
)
&&
(
scr_status
&
SCI_CTRL_FLAGS_REIE
)
)
if
((
ssr_status
&
0x0080
)
&&
err_enabled
)
ret
=
sci_er_interrupt
(
irq
,
ptr
);
/* Break Interrupt */
if
((
ssr_status
&
0x0010
)
&&
(
scr_status
&
SCI_CTRL_FLAGS_REIE
)
)
if
((
ssr_status
&
0x0010
)
&&
err_enabled
)
ret
=
sci_br_interrupt
(
irq
,
ptr
);
return
ret
;
...
...
drivers/usb/host/Kconfig
浏览文件 @
1ecc6ab6
...
...
@@ -337,10 +337,10 @@ config USB_R8A66597_HCD
config SUPERH_ON_CHIP_R8A66597
boolean "Enable SuperH on-chip R8A66597 USB"
depends on USB_R8A66597_HCD && (CPU_SUBTYPE_SH7366 || CPU_SUBTYPE_SH7723)
depends on USB_R8A66597_HCD && (CPU_SUBTYPE_SH7366 || CPU_SUBTYPE_SH7723
|| CPU_SUBTYPE_SH7724
)
help
This driver enables support for the on-chip R8A66597 in the
SH7366
and SH7723
processors.
SH7366
, SH7723 and SH7724
processors.
config USB_WHCI_HCD
tristate "Wireless USB Host Controller Interface (WHCI) driver (EXPERIMENTAL)"
...
...
fs/btrfs/async-thread.c
浏览文件 @
1ecc6ab6
...
...
@@ -299,8 +299,8 @@ int btrfs_start_workers(struct btrfs_workers *workers, int num_workers)
"btrfs-%s-%d"
,
workers
->
name
,
workers
->
num_workers
+
i
);
if
(
IS_ERR
(
worker
->
task
))
{
kfree
(
worker
);
ret
=
PTR_ERR
(
worker
->
task
);
kfree
(
worker
);
goto
fail
;
}
...
...
fs/btrfs/ctree.h
浏览文件 @
1ecc6ab6
...
...
@@ -2074,8 +2074,7 @@ static inline int btrfs_insert_empty_item(struct btrfs_trans_handle *trans,
int
btrfs_next_leaf
(
struct
btrfs_root
*
root
,
struct
btrfs_path
*
path
);
int
btrfs_prev_leaf
(
struct
btrfs_root
*
root
,
struct
btrfs_path
*
path
);
int
btrfs_leaf_free_space
(
struct
btrfs_root
*
root
,
struct
extent_buffer
*
leaf
);
int
btrfs_drop_snapshot
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
);
int
btrfs_drop_snapshot
(
struct
btrfs_root
*
root
,
int
update_ref
);
int
btrfs_drop_subtree
(
struct
btrfs_trans_handle
*
trans
,
struct
btrfs_root
*
root
,
struct
extent_buffer
*
node
,
...
...
fs/btrfs/extent-tree.c
浏览文件 @
1ecc6ab6
此差异已折叠。
点击以展开。
fs/btrfs/file.c
浏览文件 @
1ecc6ab6
...
...
@@ -151,7 +151,10 @@ static noinline int dirty_and_release_pages(struct btrfs_trans_handle *trans,
}
if
(
end_pos
>
isize
)
{
i_size_write
(
inode
,
end_pos
);
btrfs_update_inode
(
trans
,
root
,
inode
);
/* we've only changed i_size in ram, and we haven't updated
* the disk i_size. There is no need to log the inode
* at this time.
*/
}
err
=
btrfs_end_transaction
(
trans
,
root
);
out_unlock:
...
...
fs/btrfs/inode.c
浏览文件 @
1ecc6ab6
...
...
@@ -3580,12 +3580,6 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
owner
=
1
;
BTRFS_I
(
inode
)
->
block_group
=
btrfs_find_block_group
(
root
,
0
,
alloc_hint
,
owner
);
if
((
mode
&
S_IFREG
))
{
if
(
btrfs_test_opt
(
root
,
NODATASUM
))
BTRFS_I
(
inode
)
->
flags
|=
BTRFS_INODE_NODATASUM
;
if
(
btrfs_test_opt
(
root
,
NODATACOW
))
BTRFS_I
(
inode
)
->
flags
|=
BTRFS_INODE_NODATACOW
;
}
key
[
0
].
objectid
=
objectid
;
btrfs_set_key_type
(
&
key
[
0
],
BTRFS_INODE_ITEM_KEY
);
...
...
@@ -3640,6 +3634,13 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
btrfs_inherit_iflags
(
inode
,
dir
);
if
((
mode
&
S_IFREG
))
{
if
(
btrfs_test_opt
(
root
,
NODATASUM
))
BTRFS_I
(
inode
)
->
flags
|=
BTRFS_INODE_NODATASUM
;
if
(
btrfs_test_opt
(
root
,
NODATACOW
))
BTRFS_I
(
inode
)
->
flags
|=
BTRFS_INODE_NODATACOW
;
}
insert_inode_hash
(
inode
);
inode_tree_add
(
inode
);
return
inode
;
...
...
@@ -5082,6 +5083,7 @@ static long btrfs_fallocate(struct inode *inode, int mode,
u64
mask
=
BTRFS_I
(
inode
)
->
root
->
sectorsize
-
1
;
struct
extent_map
*
em
;
struct
btrfs_trans_handle
*
trans
;
struct
btrfs_root
*
root
;
int
ret
;
alloc_start
=
offset
&
~
mask
;
...
...
@@ -5100,6 +5102,13 @@ static long btrfs_fallocate(struct inode *inode, int mode,
goto
out
;
}
root
=
BTRFS_I
(
inode
)
->
root
;
ret
=
btrfs_check_data_free_space
(
root
,
inode
,
alloc_end
-
alloc_start
);
if
(
ret
)
goto
out
;
locked_end
=
alloc_end
-
1
;
while
(
1
)
{
struct
btrfs_ordered_extent
*
ordered
;
...
...
@@ -5107,7 +5116,7 @@ static long btrfs_fallocate(struct inode *inode, int mode,
trans
=
btrfs_start_transaction
(
BTRFS_I
(
inode
)
->
root
,
1
);
if
(
!
trans
)
{
ret
=
-
EIO
;
goto
out
;
goto
out
_free
;
}
/* the extent lock is ordered inside the running
...
...
@@ -5168,6 +5177,8 @@ static long btrfs_fallocate(struct inode *inode, int mode,
GFP_NOFS
);
btrfs_end_transaction
(
trans
,
BTRFS_I
(
inode
)
->
root
);
out_free:
btrfs_free_reserved_data_space
(
root
,
inode
,
alloc_end
-
alloc_start
);
out:
mutex_unlock
(
&
inode
->
i_mutex
);
return
ret
;
...
...
fs/btrfs/ioctl.c
浏览文件 @
1ecc6ab6
...
...
@@ -1028,7 +1028,8 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
struct
btrfs_file_extent_item
);
comp
=
btrfs_file_extent_compression
(
leaf
,
extent
);
type
=
btrfs_file_extent_type
(
leaf
,
extent
);
if
(
type
==
BTRFS_FILE_EXTENT_REG
)
{
if
(
type
==
BTRFS_FILE_EXTENT_REG
||
type
==
BTRFS_FILE_EXTENT_PREALLOC
)
{
disko
=
btrfs_file_extent_disk_bytenr
(
leaf
,
extent
);
diskl
=
btrfs_file_extent_disk_num_bytes
(
leaf
,
...
...
@@ -1051,7 +1052,8 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
new_key
.
objectid
=
inode
->
i_ino
;
new_key
.
offset
=
key
.
offset
+
destoff
-
off
;
if
(
type
==
BTRFS_FILE_EXTENT_REG
)
{
if
(
type
==
BTRFS_FILE_EXTENT_REG
||
type
==
BTRFS_FILE_EXTENT_PREALLOC
)
{
ret
=
btrfs_insert_empty_item
(
trans
,
root
,
path
,
&
new_key
,
size
);
if
(
ret
)
...
...
fs/btrfs/relocation.c
浏览文件 @
1ecc6ab6
...
...
@@ -1788,7 +1788,7 @@ static void merge_func(struct btrfs_work *work)
btrfs_end_transaction
(
trans
,
root
);
}
btrfs_drop_
dead_root
(
reloc_root
);
btrfs_drop_
snapshot
(
reloc_root
,
0
);
if
(
atomic_dec_and_test
(
async
->
num_pending
))
complete
(
async
->
done
);
...
...
@@ -2075,9 +2075,6 @@ static int do_relocation(struct btrfs_trans_handle *trans,
ret
=
btrfs_drop_subtree
(
trans
,
root
,
eb
,
upper
->
eb
);
BUG_ON
(
ret
);
btrfs_tree_unlock
(
eb
);
free_extent_buffer
(
eb
);
}
if
(
!
lowest
)
{
btrfs_tree_unlock
(
upper
->
eb
);
...
...
fs/btrfs/transaction.c
浏览文件 @
1ecc6ab6
...
...
@@ -593,6 +593,7 @@ int btrfs_defrag_root(struct btrfs_root *root, int cacheonly)
return
0
;
}
#if 0
/*
* when dropping snapshots, we generate a ton of delayed refs, and it makes
* sense not to join the transaction while it is trying to flush the current
...
...
@@ -681,6 +682,7 @@ int btrfs_drop_dead_root(struct btrfs_root *root)
btrfs_btree_balance_dirty(tree_root, nr);
return ret;
}
#endif
/*
* new snapshots need to be created at a very specific time in the
...
...
@@ -1081,7 +1083,7 @@ int btrfs_clean_old_snapshots(struct btrfs_root *root)
while
(
!
list_empty
(
&
list
))
{
root
=
list_entry
(
list
.
next
,
struct
btrfs_root
,
root_list
);
list_del_init
(
&
root
->
root_list
);
btrfs_drop_
dead_root
(
root
);
btrfs_drop_
snapshot
(
root
,
0
);
}
return
0
;
}
fs/notify/inotify/inotify_user.c
浏览文件 @
1ecc6ab6
...
...
@@ -296,12 +296,15 @@ static int inotify_fasync(int fd, struct file *file, int on)
static
int
inotify_release
(
struct
inode
*
ignored
,
struct
file
*
file
)
{
struct
fsnotify_group
*
group
=
file
->
private_data
;
struct
user_struct
*
user
=
group
->
inotify_data
.
user
;
fsnotify_clear_marks_by_group
(
group
);
/* free this group, matching get was inotify_init->fsnotify_obtain_group */
fsnotify_put_group
(
group
);
atomic_dec
(
&
user
->
inotify_devs
);
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录