Skip to content

Commit

Permalink
Merge master.kernel.org:/home/rmk/linux-2.6-arm
Browse files Browse the repository at this point in the history
  • Loading branch information
Linus Torvalds committed Jan 18, 2006
2 parents 097916e + 37b797b commit 2333f21
Show file tree
Hide file tree
Showing 20 changed files with 193 additions and 207 deletions.
2 changes: 1 addition & 1 deletion arch/arm/boot/compressed/head.S
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size
mov r1, #0x12
orr r1, r1, #3 << 10
add r2, r3, #16384
1: cmp r1, r8 @ if virt > start of RAM
1: cmp r1, r9 @ if virt > start of RAM
orrhs r1, r1, #0x0c @ set cacheable, bufferable
cmp r1, r10 @ if virt > end of RAM
bichs r1, r1, #0x0c @ clear cacheable, bufferable
Expand Down
5 changes: 4 additions & 1 deletion arch/arm/kernel/entry-armv.S
Original file line number Diff line number Diff line change
Expand Up @@ -735,8 +735,11 @@ __kuser_cmpxchg: @ 0xffff0fc0
* The kernel itself must perform the operation.
* A special ghost syscall is used for that (see traps.c).
*/
stmfd sp!, {r7, lr}
mov r7, #0xff00 @ 0xfff0 into r7 for EABI
orr r7, r7, #0xf0
swi #0x9ffff0
mov pc, lr
ldmfd sp!, {r7, pc}

#elif __LINUX_ARM_ARCH__ < 6

Expand Down
29 changes: 18 additions & 11 deletions arch/arm/kernel/signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,22 @@
#define SWI_SYS_SIGRETURN (0xef000000|(__NR_sigreturn))
#define SWI_SYS_RT_SIGRETURN (0xef000000|(__NR_rt_sigreturn))

/*
* With EABI, the syscall number has to be loaded into r7.
*/
#define MOV_R7_NR_SIGRETURN (0xe3a07000 | (__NR_sigreturn - __NR_SYSCALL_BASE))
#define MOV_R7_NR_RT_SIGRETURN (0xe3a07000 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE))

/*
* For Thumb syscalls, we pass the syscall number via r7. We therefore
* need two 16-bit instructions.
*/
#define SWI_THUMB_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_sigreturn - __NR_SYSCALL_BASE))
#define SWI_THUMB_RT_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE))

const unsigned long sigreturn_codes[4] = {
SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN,
SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN
const unsigned long sigreturn_codes[7] = {
MOV_R7_NR_SIGRETURN, SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN,
MOV_R7_NR_RT_SIGRETURN, SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN,
};

static int do_signal(sigset_t *oldset, struct pt_regs * regs, int syscall);
Expand Down Expand Up @@ -189,7 +195,7 @@ struct aux_sigframe {
struct sigframe {
struct sigcontext sc;
unsigned long extramask[_NSIG_WORDS-1];
unsigned long retcode;
unsigned long retcode[2];
struct aux_sigframe aux __attribute__((aligned(8)));
};

Expand All @@ -198,7 +204,7 @@ struct rt_sigframe {
void __user *puc;
struct siginfo info;
struct ucontext uc;
unsigned long retcode;
unsigned long retcode[2];
struct aux_sigframe aux __attribute__((aligned(8)));
};

Expand Down Expand Up @@ -436,12 +442,13 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka,
if (ka->sa.sa_flags & SA_RESTORER) {
retcode = (unsigned long)ka->sa.sa_restorer;
} else {
unsigned int idx = thumb;
unsigned int idx = thumb << 1;

if (ka->sa.sa_flags & SA_SIGINFO)
idx += 2;
idx += 3;

if (__put_user(sigreturn_codes[idx], rc))
if (__put_user(sigreturn_codes[idx], rc) ||
__put_user(sigreturn_codes[idx+1], rc+1))
return 1;

if (cpsr & MODE32_BIT) {
Expand All @@ -456,7 +463,7 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka,
* the return code written onto the stack.
*/
flush_icache_range((unsigned long)rc,
(unsigned long)(rc + 1));
(unsigned long)(rc + 2));

retcode = ((unsigned long)rc) + thumb;
}
Expand Down Expand Up @@ -488,7 +495,7 @@ setup_frame(int usig, struct k_sigaction *ka, sigset_t *set, struct pt_regs *reg
}

if (err == 0)
err = setup_return(regs, ka, &frame->retcode, frame, usig);
err = setup_return(regs, ka, frame->retcode, frame, usig);

return err;
}
Expand Down Expand Up @@ -522,7 +529,7 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,
err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));

if (err == 0)
err = setup_return(regs, ka, &frame->retcode, frame, usig);
err = setup_return(regs, ka, frame->retcode, frame, usig);

if (err == 0) {
/*
Expand Down
2 changes: 1 addition & 1 deletion arch/arm/kernel/signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@
*/
#define KERN_SIGRETURN_CODE 0xffff0500

extern const unsigned long sigreturn_codes[4];
extern const unsigned long sigreturn_codes[7];
3 changes: 2 additions & 1 deletion arch/arm/mach-ixp4xx/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@ static struct platform_device *ixp46x_devices[] __initdata = {
};

unsigned long ixp4xx_exp_bus_size;
EXPORT_SYMBOL(ixp4xx_exp_bus_size);

void __init ixp4xx_sys_init(void)
{
Expand All @@ -352,7 +353,7 @@ void __init ixp4xx_sys_init(void)
}
}

printk("IXP4xx: Using %uMiB expansion bus window size\n",
printk("IXP4xx: Using %luMiB expansion bus window size\n",
ixp4xx_exp_bus_size >> 20);
}

44 changes: 22 additions & 22 deletions arch/arm/mach-omap1/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,20 +50,20 @@ static int omap1_clk_enable_dsp_domain(struct clk *clk)
{
int retval;

retval = omap1_clk_use(&api_ck.clk);
retval = omap1_clk_enable(&api_ck.clk);
if (!retval) {
retval = omap1_clk_enable(clk);
omap1_clk_unuse(&api_ck.clk);
retval = omap1_clk_enable_generic(clk);
omap1_clk_disable(&api_ck.clk);
}

return retval;
}

static void omap1_clk_disable_dsp_domain(struct clk *clk)
{
if (omap1_clk_use(&api_ck.clk) == 0) {
omap1_clk_disable(clk);
omap1_clk_unuse(&api_ck.clk);
if (omap1_clk_enable(&api_ck.clk) == 0) {
omap1_clk_disable_generic(clk);
omap1_clk_disable(&api_ck.clk);
}
}

Expand All @@ -72,7 +72,7 @@ static int omap1_clk_enable_uart_functional(struct clk *clk)
int ret;
struct uart_clk *uclk;

ret = omap1_clk_enable(clk);
ret = omap1_clk_enable_generic(clk);
if (ret == 0) {
/* Set smart idle acknowledgement mode */
uclk = (struct uart_clk *)clk;
Expand All @@ -91,7 +91,7 @@ static void omap1_clk_disable_uart_functional(struct clk *clk)
uclk = (struct uart_clk *)clk;
omap_writeb((omap_readb(uclk->sysc_addr) & ~0x18), uclk->sysc_addr);

omap1_clk_disable(clk);
omap1_clk_disable_generic(clk);
}

static void omap1_clk_allow_idle(struct clk *clk)
Expand Down Expand Up @@ -230,9 +230,9 @@ static void omap1_ckctl_recalc_dsp_domain(struct clk * clk)
* Note that DSP_CKCTL virt addr = phys addr, so
* we must use __raw_readw() instead of omap_readw().
*/
omap1_clk_use(&api_ck.clk);
omap1_clk_enable(&api_ck.clk);
dsor = 1 << (3 & (__raw_readw(DSP_CKCTL) >> clk->rate_offset));
omap1_clk_unuse(&api_ck.clk);
omap1_clk_disable(&api_ck.clk);

if (unlikely(clk->rate == clk->parent->rate / dsor))
return; /* No change, quick exit */
Expand Down Expand Up @@ -412,12 +412,12 @@ static void omap1_init_ext_clk(struct clk * clk)
clk-> rate = 96000000 / dsor;
}

static int omap1_clk_use(struct clk *clk)
static int omap1_clk_enable(struct clk *clk)
{
int ret = 0;
if (clk->usecount++ == 0) {
if (likely(clk->parent)) {
ret = omap1_clk_use(clk->parent);
ret = omap1_clk_enable(clk->parent);

if (unlikely(ret != 0)) {
clk->usecount--;
Expand All @@ -432,28 +432,28 @@ static int omap1_clk_use(struct clk *clk)
ret = clk->enable(clk);

if (unlikely(ret != 0) && clk->parent) {
omap1_clk_unuse(clk->parent);
omap1_clk_disable(clk->parent);
clk->usecount--;
}
}

return ret;
}

static void omap1_clk_unuse(struct clk *clk)
static void omap1_clk_disable(struct clk *clk)
{
if (clk->usecount > 0 && !(--clk->usecount)) {
clk->disable(clk);
if (likely(clk->parent)) {
omap1_clk_unuse(clk->parent);
omap1_clk_disable(clk->parent);
if (clk->flags & CLOCK_NO_IDLE_PARENT)
if (!cpu_is_omap24xx())
omap1_clk_allow_idle(clk->parent);
}
}
}

static int omap1_clk_enable(struct clk *clk)
static int omap1_clk_enable_generic(struct clk *clk)
{
__u16 regval16;
__u32 regval32;
Expand Down Expand Up @@ -492,7 +492,7 @@ static int omap1_clk_enable(struct clk *clk)
return 0;
}

static void omap1_clk_disable(struct clk *clk)
static void omap1_clk_disable_generic(struct clk *clk)
{
__u16 regval16;
__u32 regval32;
Expand Down Expand Up @@ -654,8 +654,8 @@ late_initcall(omap1_late_clk_reset);
#endif

static struct clk_functions omap1_clk_functions = {
.clk_use = omap1_clk_use,
.clk_unuse = omap1_clk_unuse,
.clk_enable = omap1_clk_enable,
.clk_disable = omap1_clk_disable,
.clk_round_rate = omap1_clk_round_rate,
.clk_set_rate = omap1_clk_set_rate,
};
Expand Down Expand Up @@ -780,9 +780,9 @@ int __init omap1_clk_init(void)
* Only enable those clocks we will need, let the drivers
* enable other clocks as necessary
*/
clk_use(&armper_ck.clk);
clk_use(&armxor_ck.clk);
clk_use(&armtim_ck.clk); /* This should be done by timer code */
clk_enable(&armper_ck.clk);
clk_enable(&armxor_ck.clk);
clk_enable(&armtim_ck.clk); /* This should be done by timer code */

if (cpu_is_omap1510())
clk_enable(&arm_gpio_ck);
Expand Down
Loading

0 comments on commit 2333f21

Please sign in to comment.