Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
packages
kernel
linux
Commits
e39996ed
Commit
e39996ed
authored
Apr 23, 2017
by
Lorenzo "Palinuro" Faletra
Browse files
Import Upstream version 4.9.18
parent
4ae6901a
Changes
423
Hide whitespace changes
Inline
Side-by-side
arch/mips/configs/nlm_xlr_defconfig
View file @
e39996ed
...
...
@@ -90,7 +90,7 @@ CONFIG_NETFILTER=y
CONFIG_NF_CONNTRACK=m
CONFIG_NF_CONNTRACK_SECMARK=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CT_PROTO_UDPLITE=
m
CONFIG_NF_CT_PROTO_UDPLITE=
y
CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CONNTRACK_H323=m
...
...
arch/mips/include/asm/checksum.h
View file @
e39996ed
...
...
@@ -186,7 +186,9 @@ static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
" daddu %0, %4
\n
"
" dsll32 $1, %0, 0
\n
"
" daddu %0, $1
\n
"
" sltu $1, %0, $1
\n
"
" dsra32 %0, %0, 0
\n
"
" addu %0, $1
\n
"
#endif
" .set pop"
:
"=r"
(
sum
)
...
...
arch/mips/include/asm/mach-ip27/spaces.h
View file @
e39996ed
...
...
@@ -12,14 +12,16 @@
/*
* IP27 uses the R10000's uncached attribute feature. Attribute 3 selects
* uncached memory addressing.
* uncached memory addressing. Hide the definitions on 32-bit compilation
* of the compat-vdso code.
*/
#ifdef CONFIG_64BIT
#define HSPEC_BASE 0x9000000000000000
#define IO_BASE 0x9200000000000000
#define MSPEC_BASE 0x9400000000000000
#define UNCAC_BASE 0x9600000000000000
#define CAC_BASE 0xa800000000000000
#endif
#define TO_MSPEC(x) (MSPEC_BASE | ((x) & TO_PHYS_MASK))
#define TO_HSPEC(x) (HSPEC_BASE | ((x) & TO_PHYS_MASK))
...
...
arch/mips/kernel/process.c
View file @
e39996ed
...
...
@@ -195,11 +195,9 @@ struct mips_frame_info {
#define J_TARGET(pc,target) \
(((unsigned long)(pc) & 0xf0000000) | ((target) << 2))
static
inline
int
is_ra_save_ins
(
union
mips_instruction
*
ip
)
static
inline
int
is_ra_save_ins
(
union
mips_instruction
*
ip
,
int
*
poff
)
{
#ifdef CONFIG_CPU_MICROMIPS
union
mips_instruction
mmi
;
/*
* swsp ra,offset
* swm16 reglist,offset(sp)
...
...
@@ -209,29 +207,71 @@ static inline int is_ra_save_ins(union mips_instruction *ip)
*
* microMIPS is way more fun...
*/
if
(
mm_insn_16bit
(
ip
->
halfword
[
0
]))
{
mmi
.
word
=
(
ip
->
halfword
[
0
]
<<
16
);
return
(
mmi
.
mm16_r5_format
.
opcode
==
mm_swsp16_op
&&
mmi
.
mm16_r5_format
.
rt
==
31
)
||
(
mmi
.
mm16_m_format
.
opcode
==
mm_pool16c_op
&&
mmi
.
mm16_m_format
.
func
==
mm_swm16_op
);
if
(
mm_insn_16bit
(
ip
->
halfword
[
1
]))
{
switch
(
ip
->
mm16_r5_format
.
opcode
)
{
case
mm_swsp16_op
:
if
(
ip
->
mm16_r5_format
.
rt
!=
31
)
return
0
;
*
poff
=
ip
->
mm16_r5_format
.
simmediate
;
*
poff
=
(
*
poff
<<
2
)
/
sizeof
(
ulong
);
return
1
;
case
mm_pool16c_op
:
switch
(
ip
->
mm16_m_format
.
func
)
{
case
mm_swm16_op
:
*
poff
=
ip
->
mm16_m_format
.
imm
;
*
poff
+=
1
+
ip
->
mm16_m_format
.
rlist
;
*
poff
=
(
*
poff
<<
2
)
/
sizeof
(
ulong
);
return
1
;
default:
return
0
;
}
default:
return
0
;
}
}
else
{
mmi
.
halfword
[
0
]
=
ip
->
halfword
[
1
];
mmi
.
halfword
[
1
]
=
ip
->
halfword
[
0
];
return
(
mmi
.
mm_m_format
.
opcode
==
mm_pool32b_op
&&
mmi
.
mm_m_format
.
rd
>
9
&&
mmi
.
mm_m_format
.
base
==
29
&&
mmi
.
mm_m_format
.
func
==
mm_swm32_func
)
||
(
mmi
.
i_format
.
opcode
==
mm_sw32_op
&&
mmi
.
i_format
.
rs
==
29
&&
mmi
.
i_format
.
rt
==
31
);
switch
(
ip
->
i_format
.
opcode
)
{
case
mm_sw32_op
:
if
(
ip
->
i_format
.
rs
!=
29
)
return
0
;
if
(
ip
->
i_format
.
rt
!=
31
)
return
0
;
*
poff
=
ip
->
i_format
.
simmediate
/
sizeof
(
ulong
);
return
1
;
case
mm_pool32b_op
:
switch
(
ip
->
mm_m_format
.
func
)
{
case
mm_swm32_func
:
if
(
ip
->
mm_m_format
.
rd
<
0x10
)
return
0
;
if
(
ip
->
mm_m_format
.
base
!=
29
)
return
0
;
*
poff
=
ip
->
mm_m_format
.
simmediate
;
*
poff
+=
(
ip
->
mm_m_format
.
rd
&
0xf
)
*
sizeof
(
u32
);
*
poff
/=
sizeof
(
ulong
);
return
1
;
default:
return
0
;
}
default:
return
0
;
}
#else
/* sw / sd $ra, offset($sp) */
return
(
ip
->
i_format
.
opcode
==
sw_op
||
ip
->
i_format
.
opcode
==
sd_op
)
&&
ip
->
i_format
.
rs
==
29
&&
ip
->
i_format
.
rt
==
31
;
if
((
ip
->
i_format
.
opcode
==
sw_op
||
ip
->
i_format
.
opcode
==
sd_op
)
&&
ip
->
i_format
.
rs
==
29
&&
ip
->
i_format
.
rt
==
31
)
{
*
poff
=
ip
->
i_format
.
simmediate
/
sizeof
(
ulong
);
return
1
;
}
return
0
;
#endif
}
...
...
@@ -246,13 +286,16 @@ static inline int is_jump_ins(union mips_instruction *ip)
*
* microMIPS is kind of more fun...
*/
union
mips_instruction
mmi
;
mmi
.
word
=
(
ip
->
halfword
[
0
]
<<
16
);
if
(
mm_insn_16bit
(
ip
->
halfword
[
1
]))
{
if
((
ip
->
mm16_r5_format
.
opcode
==
mm_pool16c_op
&&
(
ip
->
mm16_r5_format
.
rt
&
mm_jr16_op
)
==
mm_jr16_op
))
return
1
;
return
0
;
}
if
(
(
mmi
.
mm16_r5
_format
.
opcode
==
mm_
pool16c_op
&&
(
mmi
.
mm16_r5_format
.
rt
&
mm_jr16_op
)
==
mm_jr16_op
)
||
ip
->
j_format
.
opcode
==
mm_jal32_op
)
if
(
ip
->
j
_format
.
opcode
==
mm_
j32_op
)
return
1
;
if
(
ip
->
j_format
.
opcode
==
mm_jal32_op
)
return
1
;
if
(
ip
->
r_format
.
opcode
!=
mm_pool32a_op
||
ip
->
r_format
.
func
!=
mm_pool32axf_op
)
...
...
@@ -280,15 +323,13 @@ static inline int is_sp_move_ins(union mips_instruction *ip)
*
* microMIPS is not more fun...
*/
if
(
mm_insn_16bit
(
ip
->
halfword
[
0
]))
{
union
mips_instruction
mmi
;
mmi
.
word
=
(
ip
->
halfword
[
0
]
<<
16
);
return
(
mmi
.
mm16_r3_format
.
opcode
==
mm_pool16d_op
&&
mmi
.
mm16_r3_format
.
simmediate
&&
mm_addiusp_func
)
||
(
mmi
.
mm16_r5_format
.
opcode
==
mm_pool16d_op
&&
mmi
.
mm16_r5_format
.
rt
==
29
);
if
(
mm_insn_16bit
(
ip
->
halfword
[
1
]))
{
return
(
ip
->
mm16_r3_format
.
opcode
==
mm_pool16d_op
&&
ip
->
mm16_r3_format
.
simmediate
&&
mm_addiusp_func
)
||
(
ip
->
mm16_r5_format
.
opcode
==
mm_pool16d_op
&&
ip
->
mm16_r5_format
.
rt
==
29
);
}
return
ip
->
mm_i_format
.
opcode
==
mm_addiu32_op
&&
ip
->
mm_i_format
.
rt
==
29
&&
ip
->
mm_i_format
.
rs
==
29
;
#else
...
...
@@ -303,30 +344,36 @@ static inline int is_sp_move_ins(union mips_instruction *ip)
static
int
get_frame_info
(
struct
mips_frame_info
*
info
)
{
#ifdef CONFIG_CPU_MICROMIPS
union
mips_instruction
*
ip
=
(
void
*
)
(((
char
*
)
info
->
func
)
-
1
);
#else
union
mips_instruction
*
ip
=
info
->
func
;
#endif
unsigned
max_insns
=
info
->
func_size
/
sizeof
(
union
mips_instruction
);
unsigned
i
;
bool
is_mmips
=
IS_ENABLED
(
CONFIG_CPU_MICROMIPS
);
union
mips_instruction
insn
,
*
ip
,
*
ip_end
;
const
unsigned
int
max_insns
=
128
;
unsigned
int
i
;
info
->
pc_offset
=
-
1
;
info
->
frame_size
=
0
;
ip
=
(
void
*
)
msk_isa16_mode
((
ulong
)
info
->
func
);
if
(
!
ip
)
goto
err
;
if
(
max_insns
==
0
)
max_insns
=
128U
;
/* unknown function size */
max_insns
=
min
(
128U
,
max_insns
);
ip_end
=
(
void
*
)
ip
+
info
->
func_size
;
for
(
i
=
0
;
i
<
max_insns
;
i
++
,
ip
++
)
{
for
(
i
=
0
;
i
<
max_insns
&&
ip
<
ip_end
;
i
++
,
ip
++
)
{
if
(
is_mmips
&&
mm_insn_16bit
(
ip
->
halfword
[
0
]))
{
insn
.
halfword
[
0
]
=
0
;
insn
.
halfword
[
1
]
=
ip
->
halfword
[
0
];
}
else
if
(
is_mmips
)
{
insn
.
halfword
[
0
]
=
ip
->
halfword
[
1
];
insn
.
halfword
[
1
]
=
ip
->
halfword
[
0
];
}
else
{
insn
.
word
=
ip
->
word
;
}
if
(
is_jump_ins
(
ip
))
if
(
is_jump_ins
(
&
insn
))
break
;
if
(
!
info
->
frame_size
)
{
if
(
is_sp_move_ins
(
ip
))
if
(
is_sp_move_ins
(
&
insn
))
{
#ifdef CONFIG_CPU_MICROMIPS
if
(
mm_insn_16bit
(
ip
->
halfword
[
0
]))
...
...
@@ -349,11 +396,9 @@ static int get_frame_info(struct mips_frame_info *info)
}
continue
;
}
if
(
info
->
pc_offset
==
-
1
&&
is_ra_save_ins
(
ip
))
{
info
->
pc_offset
=
ip
->
i_format
.
simmediate
/
sizeof
(
long
);
if
(
info
->
pc_offset
==
-
1
&&
is_ra_save_ins
(
&
insn
,
&
info
->
pc_offset
))
break
;
}
}
if
(
info
->
frame_size
&&
info
->
pc_offset
>=
0
)
/* nested */
return
0
;
...
...
arch/mips/lantiq/xway/sysctrl.c
View file @
e39996ed
...
...
@@ -545,7 +545,7 @@ void __init ltq_soc_init(void)
clkdev_add_pmu
(
"1a800000.pcie"
,
"msi"
,
1
,
1
,
PMU1_PCIE2_MSI
);
clkdev_add_pmu
(
"1a800000.pcie"
,
"pdi"
,
1
,
1
,
PMU1_PCIE2_PDI
);
clkdev_add_pmu
(
"1a800000.pcie"
,
"ctl"
,
1
,
1
,
PMU1_PCIE2_CTL
);
clkdev_add_pmu
(
"1e108000.eth"
,
NULL
,
1
,
0
,
PMU_SWITCH
|
PMU_PPE_DP
);
clkdev_add_pmu
(
"1e108000.eth"
,
NULL
,
0
,
0
,
PMU_SWITCH
|
PMU_PPE_DP
);
clkdev_add_pmu
(
"1da00000.usif"
,
"NULL"
,
1
,
0
,
PMU_USIF
);
clkdev_add_pmu
(
"1e103100.deu"
,
NULL
,
1
,
0
,
PMU_DEU
);
}
else
if
(
of_machine_is_compatible
(
"lantiq,ar10"
))
{
...
...
@@ -553,7 +553,7 @@ void __init ltq_soc_init(void)
ltq_ar10_fpi_hz
(),
ltq_ar10_pp32_hz
());
clkdev_add_pmu
(
"1e101000.usb"
,
"ctl"
,
1
,
0
,
PMU_USB0
);
clkdev_add_pmu
(
"1e106000.usb"
,
"ctl"
,
1
,
0
,
PMU_USB1
);
clkdev_add_pmu
(
"1e108000.eth"
,
NULL
,
1
,
0
,
PMU_SWITCH
|
clkdev_add_pmu
(
"1e108000.eth"
,
NULL
,
0
,
0
,
PMU_SWITCH
|
PMU_PPE_DP
|
PMU_PPE_TC
);
clkdev_add_pmu
(
"1da00000.usif"
,
"NULL"
,
1
,
0
,
PMU_USIF
);
clkdev_add_pmu
(
"1f203000.rcu"
,
"gphy"
,
1
,
0
,
PMU_GPHY
);
...
...
@@ -575,11 +575,11 @@ void __init ltq_soc_init(void)
clkdev_add_pmu
(
NULL
,
"ahb"
,
1
,
0
,
PMU_AHBM
|
PMU_AHBS
);
clkdev_add_pmu
(
"1da00000.usif"
,
"NULL"
,
1
,
0
,
PMU_USIF
);
clkdev_add_pmu
(
"1e108000.eth"
,
NULL
,
1
,
0
,
clkdev_add_pmu
(
"1e108000.eth"
,
NULL
,
0
,
0
,
PMU_SWITCH
|
PMU_PPE_DPLUS
|
PMU_PPE_DPLUM
|
PMU_PPE_EMA
|
PMU_PPE_TC
|
PMU_PPE_SLL01
|
PMU_PPE_QSB
|
PMU_PPE_TOP
);
clkdev_add_pmu
(
"1f203000.rcu"
,
"gphy"
,
1
,
0
,
PMU_GPHY
);
clkdev_add_pmu
(
"1f203000.rcu"
,
"gphy"
,
0
,
0
,
PMU_GPHY
);
clkdev_add_pmu
(
"1e103000.sdio"
,
NULL
,
1
,
0
,
PMU_SDIO
);
clkdev_add_pmu
(
"1e103100.deu"
,
NULL
,
1
,
0
,
PMU_DEU
);
clkdev_add_pmu
(
"1e116000.mei"
,
"dfe"
,
1
,
0
,
PMU_DFE
);
...
...
arch/mips/mm/sc-ip22.c
View file @
e39996ed
...
...
@@ -31,26 +31,40 @@ static inline void indy_sc_wipe(unsigned long first, unsigned long last)
unsigned
long
tmp
;
__asm__
__volatile__
(
".set
\t
push
\t\t\t
# indy_sc_wipe
\n\t
"
".set
\t
noreorder
\n\t
"
".set
\t
mips3
\n\t
"
".set
\t
noat
\n\t
"
"mfc0
\t
%2, $12
\n\t
"
"li
\t
$1, 0x80
\t\t\t
# Go 64 bit
\n\t
"
"mtc0
\t
$1, $12
\n\t
"
"dli
\t
$1, 0x9000000080000000
\n\t
"
"or
\t
%0, $1
\t\t\t
# first line to flush
\n\t
"
"or
\t
%1, $1
\t\t\t
# last line to flush
\n\t
"
".set
\t
at
\n\t
"
"1:
\t
sw
\t
$0, 0(%0)
\n\t
"
"bne
\t
%0, %1, 1b
\n\t
"
" daddu
\t
%0, 32
\n\t
"
"mtc0
\t
%2, $12
\t\t\t
# Back to 32 bit
\n\t
"
"nop; nop; nop; nop;
\n\t
"
".set
\t
pop"
" .set push # indy_sc_wipe
\n
"
" .set noreorder
\n
"
" .set mips3
\n
"
" .set noat
\n
"
" mfc0 %2, $12
\n
"
" li $1, 0x80 # Go 64 bit
\n
"
" mtc0 $1, $12
\n
"
"
\n
"
" #
\n
"
" # Open code a dli $1, 0x9000000080000000
\n
"
" #
\n
"
" # Required because binutils 2.25 will happily accept
\n
"
" # 64 bit instructions in .set mips3 mode but puke on
\n
"
" # 64 bit constants when generating 32 bit ELF
\n
"
" #
\n
"
" lui $1,0x9000
\n
"
" dsll $1,$1,0x10
\n
"
" ori $1,$1,0x8000
\n
"
" dsll $1,$1,0x10
\n
"
"
\n
"
" or %0, $1 # first line to flush
\n
"
" or %1, $1 # last line to flush
\n
"
" .set at
\n
"
"
\n
"
"1: sw $0, 0(%0)
\n
"
" bne %0, %1, 1b
\n
"
" daddu %0, 32
\n
"
"
\n
"
" mtc0 %2, $12 # Back to 32 bit
\n
"
" nop # pipeline hazard
\n
"
" nop
\n
"
" nop
\n
"
" nop
\n
"
" .set pop
\n
"
:
"=r"
(
first
),
"=r"
(
last
),
"=&r"
(
tmp
)
:
"0"
(
first
),
"1"
(
last
));
}
...
...
arch/mips/pic32/pic32mzda/Makefile
View file @
e39996ed
...
...
@@ -2,8 +2,7 @@
# Joshua Henderson, <joshua.henderson@microchip.com>
# Copyright (C) 2015 Microchip Technology, Inc. All rights reserved.
#
obj-y
:=
init.o time
.o config
.o
obj-y
:=
config.o early_clk.o
init.o time.o
obj-$(CONFIG_EARLY_PRINTK)
+=
early_console.o
\
early_pin.o
\
early_clk.o
early_pin.o
arch/mips/ralink/prom.c
View file @
e39996ed
...
...
@@ -30,8 +30,10 @@ const char *get_system_type(void)
return
soc_info
.
sys_type
;
}
static
__init
void
prom_init_cmdline
(
int
argc
,
char
**
argv
)
static
__init
void
prom_init_cmdline
(
void
)
{
int
argc
;
char
**
argv
;
int
i
;
pr_debug
(
"prom: fw_arg0=%08x fw_arg1=%08x fw_arg2=%08x fw_arg3=%08x
\n
"
,
...
...
@@ -60,14 +62,11 @@ static __init void prom_init_cmdline(int argc, char **argv)
void
__init
prom_init
(
void
)
{
int
argc
;
char
**
argv
;
prom_soc_init
(
&
soc_info
);
pr_info
(
"SoC Type: %s
\n
"
,
get_system_type
());
prom_init_cmdline
(
argc
,
argv
);
prom_init_cmdline
();
}
void
__init
prom_free_prom_memory
(
void
)
...
...
arch/mips/ralink/rt288x.c
View file @
e39996ed
...
...
@@ -40,16 +40,6 @@ static struct rt2880_pmx_group rt2880_pinmux_data_act[] = {
{
0
}
};
static
void
rt288x_wdt_reset
(
void
)
{
u32
t
;
/* enable WDT reset output on pin SRAM_CS_N */
t
=
rt_sysc_r32
(
SYSC_REG_CLKCFG
);
t
|=
CLKCFG_SRAM_CS_N_WDT
;
rt_sysc_w32
(
t
,
SYSC_REG_CLKCFG
);
}
void
__init
ralink_clk_init
(
void
)
{
unsigned
long
cpu_rate
,
wmac_rate
=
40000000
;
...
...
arch/mips/ralink/rt305x.c
View file @
e39996ed
...
...
@@ -89,17 +89,6 @@ static struct rt2880_pmx_group rt5350_pinmux_data[] = {
{
0
}
};
static
void
rt305x_wdt_reset
(
void
)
{
u32
t
;
/* enable WDT reset output on pin SRAM_CS_N */
t
=
rt_sysc_r32
(
SYSC_REG_SYSTEM_CONFIG
);
t
|=
RT305X_SYSCFG_SRAM_CS0_MODE_WDT
<<
RT305X_SYSCFG_SRAM_CS0_MODE_SHIFT
;
rt_sysc_w32
(
t
,
SYSC_REG_SYSTEM_CONFIG
);
}
static
unsigned
long
rt5350_get_mem_size
(
void
)
{
void
__iomem
*
sysc
=
(
void
__iomem
*
)
KSEG1ADDR
(
RT305X_SYSC_BASE
);
...
...
arch/mips/ralink/rt3883.c
View file @
e39996ed
...
...
@@ -63,16 +63,6 @@ static struct rt2880_pmx_group rt3883_pinmux_data[] = {
{
0
}
};
static
void
rt3883_wdt_reset
(
void
)
{
u32
t
;
/* enable WDT reset output on GPIO 2 */
t
=
rt_sysc_r32
(
RT3883_SYSC_REG_SYSCFG1
);
t
|=
RT3883_SYSCFG1_GPIO2_AS_WDT_OUT
;
rt_sysc_w32
(
t
,
RT3883_SYSC_REG_SYSCFG1
);
}
void
__init
ralink_clk_init
(
void
)
{
unsigned
long
cpu_rate
,
sys_rate
;
...
...
arch/mips/ralink/timer.c
View file @
e39996ed
...
...
@@ -71,11 +71,6 @@ static int rt_timer_request(struct rt_timer *rt)
return
err
;
}
static
void
rt_timer_free
(
struct
rt_timer
*
rt
)
{
free_irq
(
rt
->
irq
,
rt
);
}
static
int
rt_timer_config
(
struct
rt_timer
*
rt
,
unsigned
long
divisor
)
{
if
(
rt
->
timer_freq
<
divisor
)
...
...
@@ -101,15 +96,6 @@ static int rt_timer_enable(struct rt_timer *rt)
return
0
;
}
static
void
rt_timer_disable
(
struct
rt_timer
*
rt
)
{
u32
t
;
t
=
rt_timer_r32
(
rt
,
TIMER_REG_TMR0CTL
);
t
&=
~
TMR0CTL_ENABLE
;
rt_timer_w32
(
rt
,
TIMER_REG_TMR0CTL
,
t
);
}
static
int
rt_timer_probe
(
struct
platform_device
*
pdev
)
{
struct
resource
*
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
...
...
arch/mips/sgi-ip22/Platform
View file @
e39996ed
...
...
@@ -25,7 +25,7 @@ endif
# Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys
#
ifdef CONFIG_SGI_IP28
ifeq ($(call cc-option-yn,-mr10k-cache-barrier=store), n)
ifeq ($(call cc-option-yn,
-march=r10000
-mr10k-cache-barrier=store), n)
$(error gcc doesn't support needed option -mr10k-cache-barrier=store)
endif
endif
...
...
arch/parisc/include/asm/cacheflush.h
View file @
e39996ed
...
...
@@ -45,28 +45,9 @@ static inline void flush_kernel_dcache_page(struct page *page)
#define flush_kernel_dcache_range(start,size) \
flush_kernel_dcache_range_asm((start), (start)+(size));
/* vmap range flushes and invalidates. Architecturally, we don't need
* the invalidate, because the CPU should refuse to speculate once an
* area has been flushed, so invalidate is left empty */
static
inline
void
flush_kernel_vmap_range
(
void
*
vaddr
,
int
size
)
{
unsigned
long
start
=
(
unsigned
long
)
vaddr
;
flush_kernel_dcache_range_asm
(
start
,
start
+
size
);
}
static
inline
void
invalidate_kernel_vmap_range
(
void
*
vaddr
,
int
size
)
{
unsigned
long
start
=
(
unsigned
long
)
vaddr
;
void
*
cursor
=
vaddr
;
for
(
;
cursor
<
vaddr
+
size
;
cursor
+=
PAGE_SIZE
)
{
struct
page
*
page
=
vmalloc_to_page
(
cursor
);
if
(
test_and_clear_bit
(
PG_dcache_dirty
,
&
page
->
flags
))
flush_kernel_dcache_page
(
page
);
}
flush_kernel_dcache_range_asm
(
start
,
start
+
size
);
}
void
flush_kernel_vmap_range
(
void
*
vaddr
,
int
size
);
void
invalidate_kernel_vmap_range
(
void
*
vaddr
,
int
size
);
#define flush_cache_vmap(start, end) flush_cache_all()
#define flush_cache_vunmap(start, end) flush_cache_all()
...
...
arch/parisc/kernel/cache.c
View file @
e39996ed
...
...
@@ -633,3 +633,25 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long
__flush_cache_page
(
vma
,
vmaddr
,
PFN_PHYS
(
pfn
));
}
}
void
flush_kernel_vmap_range
(
void
*
vaddr
,
int
size
)
{
unsigned
long
start
=
(
unsigned
long
)
vaddr
;
if
((
unsigned
long
)
size
>
parisc_cache_flush_threshold
)
flush_data_cache
();
else
flush_kernel_dcache_range_asm
(
start
,
start
+
size
);
}
EXPORT_SYMBOL
(
flush_kernel_vmap_range
);
void
invalidate_kernel_vmap_range
(
void
*
vaddr
,
int
size
)
{
unsigned
long
start
=
(
unsigned
long
)
vaddr
;
if
((
unsigned
long
)
size
>
parisc_cache_flush_threshold
)
flush_data_cache
();
else
flush_kernel_dcache_range_asm
(
start
,
start
+
size
);
}
EXPORT_SYMBOL
(
invalidate_kernel_vmap_range
);
arch/parisc/kernel/process.c
View file @
e39996ed
...
...
@@ -139,6 +139,8 @@ void machine_power_off(void)
printk
(
KERN_EMERG
"System shut down completed.
\n
"
"Please power this system off now."
);
for
(;;);
}
void
(
*
pm_power_off
)(
void
)
=
machine_power_off
;
...
...
arch/powerpc/boot/zImage.lds.S
View file @
e39996ed
...
...
@@ -68,6 +68,7 @@ SECTIONS
}
#ifdef CONFIG_PPC64_BOOT_WRAPPER
.
=
ALIGN
(
256
)
;
.
got
:
{
__toc_start
=
.
;
...
...
arch/powerpc/crypto/crc32c-vpmsum_glue.c
View file @
e39996ed
...
...
@@ -52,7 +52,7 @@ static int crc32c_vpmsum_cra_init(struct crypto_tfm *tfm)
{
u32
*
key
=
crypto_tfm_ctx
(
tfm
);
*
key
=
0
;
*
key
=
~
0
;
return
0
;
}
...
...
arch/powerpc/include/asm/mmu.h
View file @
e39996ed
...
...
@@ -136,6 +136,7 @@ enum {
MMU_FTR_NO_SLBIE_B
|
MMU_FTR_16M_PAGE
|
MMU_FTR_TLBIEL
|
MMU_FTR_LOCKLESS_TLBIE
|
MMU_FTR_CI_LARGE_PAGE
|
MMU_FTR_1T_SEGMENT
|
MMU_FTR_TLBIE_CROP_VA
|
MMU_FTR_KERNEL_RO
|
#ifdef CONFIG_PPC_RADIX_MMU
MMU_FTR_TYPE_RADIX
|
#endif
...
...
arch/powerpc/include/asm/mmu_context.h
View file @
e39996ed
...
...
@@ -19,16 +19,18 @@ extern void destroy_context(struct mm_struct *mm);
struct
mm_iommu_table_group_mem_t
;
extern
int
isolate_lru_page
(
struct
page
*
page
);
/* from internal.h */
extern
bool
mm_iommu_preregistered
(
void
);
extern
long
mm_iommu_get
(
unsigned
long
ua
,
unsigned
long
entries
,
extern
bool
mm_iommu_preregistered
(
struct
mm_struct
*
mm
);
extern
long
mm_iommu_get
(
struct
mm_struct
*
mm
,
unsigned
long
ua
,
unsigned
long
entries
,
struct
mm_iommu_table_group_mem_t
**
pmem
);
extern
long
mm_iommu_put
(
struct
mm_iommu_table_group_mem_t
*
mem
);
extern
void
mm_iommu_init
(
mm_context_t
*
ctx
);
extern
void
mm_iommu_cleanup
(
mm_context_t
*
ctx
);
extern
struct
mm_iommu_table_group_mem_t
*
mm_iommu_lookup
(
unsigned
long
ua
,
unsigned
long
size
);
extern
struct
mm_iommu_table_group_mem_t
*
mm_iommu_find
(
unsigned
long
ua
,
unsigned
long
entries
);
extern
long
mm_iommu_put
(
struct
mm_struct
*
mm
,
struct
mm_iommu_table_group_mem_t
*
mem
);
extern
void
mm_iommu_init
(
struct
mm_struct
*
mm
);
extern
void
mm_iommu_cleanup
(
struct
mm_struct
*
mm
);
extern
struct
mm_iommu_table_group_mem_t
*
mm_iommu_lookup
(
struct
mm_struct
*
mm
,
unsigned
long
ua
,
unsigned
long
size
);
extern
struct
mm_iommu_table_group_mem_t
*
mm_iommu_find
(
struct
mm_struct
*
mm
,
unsigned
long
ua
,
unsigned
long
entries
);
extern
long
mm_iommu_ua_to_hpa
(
struct
mm_iommu_table_group_mem_t
*
mem
,
unsigned
long
ua
,
unsigned
long
*
hpa
);
extern
long
mm_iommu_mapped_inc
(
struct
mm_iommu_table_group_mem_t
*
mem
);
...
...
Prev
1
2
3
4
5
6
…
22
Next
Write
Preview