diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-23 19:59:55 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-23 19:59:55 -0400 |
commit | c94c0d201f1c1a62184f4f220c1615347aafbee7 (patch) | |
tree | ac2fe13e5686091ab9c3789cb40d50371ca270ef | |
parent | 8ed693d29b25bbd88471ec043cc01581419d0481 (diff) | |
parent | 53776eb4acdd3ec576d75b61b656ef8d51e430ea (diff) |
Merge master.kernel.org:/home/rmk/linux-2.6-arm
-rw-r--r-- | arch/arm/boot/compressed/head-shark.S | 42 | ||||
-rw-r--r-- | arch/arm/kernel/smp.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-integrator/platsmp.c | 8 | ||||
-rw-r--r-- | arch/arm/mach-s3c2410/dma.c | 2 | ||||
-rw-r--r-- | arch/arm/nwfpe/fpa11.h | 4 | ||||
-rw-r--r-- | arch/arm/nwfpe/fpmodule.c | 2 | ||||
-rw-r--r-- | arch/arm/nwfpe/fpmodule.inl | 14 | ||||
-rw-r--r-- | drivers/video/imxfb.c | 14 | ||||
-rw-r--r-- | drivers/video/imxfb.h | 1 | ||||
-rw-r--r-- | include/asm-arm/arch-imx/imxfb.h | 1 |
10 files changed, 59 insertions, 35 deletions
diff --git a/arch/arm/boot/compressed/head-shark.S b/arch/arm/boot/compressed/head-shark.S index 848f60e5429..089c560e07f 100644 --- a/arch/arm/boot/compressed/head-shark.S +++ b/arch/arm/boot/compressed/head-shark.S | |||
@@ -63,8 +63,8 @@ __beginning: mov r4, r0 @ save the entry to the firmware | |||
63 | 63 | ||
64 | mov pc, r2 | 64 | mov pc, r2 |
65 | 65 | ||
66 | __copy_target: .long 0x08508000 | 66 | __copy_target: .long 0x08507FFC |
67 | __copy_end: .long 0x08608000 | 67 | __copy_end: .long 0x08607FFC |
68 | 68 | ||
69 | .word _start | 69 | .word _start |
70 | .word __bss_start | 70 | .word __bss_start |
@@ -73,9 +73,10 @@ __copy_end: .long 0x08608000 | |||
73 | __temp_stack: .space 128 | 73 | __temp_stack: .space 128 |
74 | 74 | ||
75 | __mmu_off: | 75 | __mmu_off: |
76 | adr r0, __ofw_data | 76 | adr r0, __ofw_data @ read the 1. entry of the memory map |
77 | ldr r0, [r0, #4] | 77 | ldr r0, [r0, #4] |
78 | orr r0, r0, #0x00600000 | 78 | orr r0, r0, #0x00600000 |
79 | sub r0, r0, #4 | ||
79 | 80 | ||
80 | ldr r1, __copy_end | 81 | ldr r1, __copy_end |
81 | ldr r3, __copy_target | 82 | ldr r3, __copy_target |
@@ -89,20 +90,43 @@ __mmu_off: | |||
89 | * from 0x08500000 to 0x08508000 if we have only 8MB | 90 | * from 0x08500000 to 0x08508000 if we have only 8MB |
90 | */ | 91 | */ |
91 | 92 | ||
93 | /* As we get more 2.6-kernels it gets more and more | ||
94 | * uncomfortable to be bound to kernel images of 1MB only. | ||
95 | * So we add a loop here, to be able to copy some more. | ||
96 | * Alexander Schulz 2005-07-17 | ||
97 | */ | ||
98 | |||
99 | mov r4, #3 @ How many megabytes to copy | ||
100 | |||
101 | |||
102 | __MoveCode: sub r4, r4, #1 | ||
92 | 103 | ||
93 | __Copy: ldr r2, [r0], #-4 | 104 | __Copy: ldr r2, [r0], #-4 |
94 | str r2, [r1], #-4 | 105 | str r2, [r1], #-4 |
95 | teq r1, r3 | 106 | teq r1, r3 |
96 | bne __Copy | 107 | bne __Copy |
108 | |||
109 | /* The firmware maps us in blocks of 1 MB, the next block is | ||
110 | _below_ the last one. So our decrementing source pointer | ||
111 | ist right here, but the destination pointer must be increased | ||
112 | by 2 MB */ | ||
113 | add r1, r1, #0x00200000 | ||
114 | add r3, r3, #0x00100000 | ||
115 | |||
116 | teq r4, #0 | ||
117 | bne __MoveCode | ||
118 | |||
119 | |||
97 | /* and jump to it */ | 120 | /* and jump to it */ |
98 | adr r2, __go_on | 121 | adr r2, __go_on @ where we want to jump |
99 | adr r0, __ofw_data | 122 | adr r0, __ofw_data @ read the 1. entry of the memory map |
100 | ldr r0, [r0, #4] | 123 | ldr r0, [r0, #4] |
101 | sub r2, r2, r0 | 124 | sub r2, r2, r0 @ we are mapped add 0e50 now, sub that (-0e00) |
102 | sub r2, r2, #0x00500000 | 125 | sub r2, r2, #0x00500000 @ -0050 |
103 | ldr r0, __copy_target | 126 | ldr r0, __copy_target @ and add 0850 8000 instead |
127 | add r0, r0, #4 | ||
104 | add r2, r2, r0 | 128 | add r2, r2, r0 |
105 | mov pc, r2 | 129 | mov pc, r2 @ and jump there |
106 | 130 | ||
107 | __go_on: | 131 | __go_on: |
108 | adr sp, __temp_stack | 132 | adr sp, __temp_stack |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 7ae45c3fc83..295e0a8379c 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -78,7 +78,7 @@ struct smp_call_struct { | |||
78 | static struct smp_call_struct * volatile smp_call_function_data; | 78 | static struct smp_call_struct * volatile smp_call_function_data; |
79 | static DEFINE_SPINLOCK(smp_call_function_lock); | 79 | static DEFINE_SPINLOCK(smp_call_function_lock); |
80 | 80 | ||
81 | int __init __cpu_up(unsigned int cpu) | 81 | int __cpuinit __cpu_up(unsigned int cpu) |
82 | { | 82 | { |
83 | struct task_struct *idle; | 83 | struct task_struct *idle; |
84 | pgd_t *pgd; | 84 | pgd_t *pgd; |
@@ -159,7 +159,7 @@ int __init __cpu_up(unsigned int cpu) | |||
159 | * This is the secondary CPU boot entry. We're using this CPUs | 159 | * This is the secondary CPU boot entry. We're using this CPUs |
160 | * idle thread stack, but a set of temporary page tables. | 160 | * idle thread stack, but a set of temporary page tables. |
161 | */ | 161 | */ |
162 | asmlinkage void __init secondary_start_kernel(void) | 162 | asmlinkage void __cpuinit secondary_start_kernel(void) |
163 | { | 163 | { |
164 | struct mm_struct *mm = &init_mm; | 164 | struct mm_struct *mm = &init_mm; |
165 | unsigned int cpu = smp_processor_id(); | 165 | unsigned int cpu = smp_processor_id(); |
@@ -209,7 +209,7 @@ asmlinkage void __init secondary_start_kernel(void) | |||
209 | * Called by both boot and secondaries to move global data into | 209 | * Called by both boot and secondaries to move global data into |
210 | * per-processor storage. | 210 | * per-processor storage. |
211 | */ | 211 | */ |
212 | void __init smp_store_cpu_info(unsigned int cpuid) | 212 | void __cpuinit smp_store_cpu_info(unsigned int cpuid) |
213 | { | 213 | { |
214 | struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpuid); | 214 | struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpuid); |
215 | 215 | ||
diff --git a/arch/arm/mach-integrator/platsmp.c b/arch/arm/mach-integrator/platsmp.c index 2ba02577709..aecf47ba033 100644 --- a/arch/arm/mach-integrator/platsmp.c +++ b/arch/arm/mach-integrator/platsmp.c | |||
@@ -27,12 +27,12 @@ extern void integrator_secondary_startup(void); | |||
27 | * control for which core is the next to come out of the secondary | 27 | * control for which core is the next to come out of the secondary |
28 | * boot "holding pen" | 28 | * boot "holding pen" |
29 | */ | 29 | */ |
30 | volatile int __initdata pen_release = -1; | 30 | volatile int __cpuinitdata pen_release = -1; |
31 | unsigned long __initdata phys_pen_release = 0; | 31 | unsigned long __cpuinitdata phys_pen_release = 0; |
32 | 32 | ||
33 | static DEFINE_SPINLOCK(boot_lock); | 33 | static DEFINE_SPINLOCK(boot_lock); |
34 | 34 | ||
35 | void __init platform_secondary_init(unsigned int cpu) | 35 | void __cpuinit platform_secondary_init(unsigned int cpu) |
36 | { | 36 | { |
37 | /* | 37 | /* |
38 | * the primary core may have used a "cross call" soft interrupt | 38 | * the primary core may have used a "cross call" soft interrupt |
@@ -61,7 +61,7 @@ void __init platform_secondary_init(unsigned int cpu) | |||
61 | spin_unlock(&boot_lock); | 61 | spin_unlock(&boot_lock); |
62 | } | 62 | } |
63 | 63 | ||
64 | int __init boot_secondary(unsigned int cpu, struct task_struct *idle) | 64 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) |
65 | { | 65 | { |
66 | unsigned long timeout; | 66 | unsigned long timeout; |
67 | 67 | ||
diff --git a/arch/arm/mach-s3c2410/dma.c b/arch/arm/mach-s3c2410/dma.c index c7c28890d40..65feaf20d23 100644 --- a/arch/arm/mach-s3c2410/dma.c +++ b/arch/arm/mach-s3c2410/dma.c | |||
@@ -436,7 +436,7 @@ int s3c2410_dma_enqueue(unsigned int channel, void *id, | |||
436 | 436 | ||
437 | buf = kmem_cache_alloc(dma_kmem, GFP_ATOMIC); | 437 | buf = kmem_cache_alloc(dma_kmem, GFP_ATOMIC); |
438 | if (buf == NULL) { | 438 | if (buf == NULL) { |
439 | pr_debug("%s: out of memory (%d alloc)\n", | 439 | pr_debug("%s: out of memory (%ld alloc)\n", |
440 | __FUNCTION__, sizeof(*buf)); | 440 | __FUNCTION__, sizeof(*buf)); |
441 | return -ENOMEM; | 441 | return -ENOMEM; |
442 | } | 442 | } |
diff --git a/arch/arm/nwfpe/fpa11.h b/arch/arm/nwfpe/fpa11.h index 45cc65426a2..e4a61aea534 100644 --- a/arch/arm/nwfpe/fpa11.h +++ b/arch/arm/nwfpe/fpa11.h | |||
@@ -29,9 +29,7 @@ | |||
29 | * stack+task struct. Use the same method as 'current' uses to | 29 | * stack+task struct. Use the same method as 'current' uses to |
30 | * reach them. | 30 | * reach them. |
31 | */ | 31 | */ |
32 | register unsigned long *user_registers asm("sl"); | 32 | #define GET_USERREG() ((struct pt_regs *)(THREAD_START_SP + (unsigned long)current_thread_info()) - 1) |
33 | |||
34 | #define GET_USERREG() (user_registers) | ||
35 | 33 | ||
36 | #include <linux/config.h> | 34 | #include <linux/config.h> |
37 | #include <linux/thread_info.h> | 35 | #include <linux/thread_info.h> |
diff --git a/arch/arm/nwfpe/fpmodule.c b/arch/arm/nwfpe/fpmodule.c index a8efcf34888..12885f31d34 100644 --- a/arch/arm/nwfpe/fpmodule.c +++ b/arch/arm/nwfpe/fpmodule.c | |||
@@ -132,7 +132,7 @@ void float_raise(signed char flags) | |||
132 | printk(KERN_DEBUG | 132 | printk(KERN_DEBUG |
133 | "NWFPE: %s[%d] takes exception %08x at %p from %08lx\n", | 133 | "NWFPE: %s[%d] takes exception %08x at %p from %08lx\n", |
134 | current->comm, current->pid, flags, | 134 | current->comm, current->pid, flags, |
135 | __builtin_return_address(0), GET_USERREG()[15]); | 135 | __builtin_return_address(0), GET_USERREG()->ARM_pc); |
136 | #endif | 136 | #endif |
137 | 137 | ||
138 | /* Keep SoftFloat exception flags up to date. */ | 138 | /* Keep SoftFloat exception flags up to date. */ |
diff --git a/arch/arm/nwfpe/fpmodule.inl b/arch/arm/nwfpe/fpmodule.inl index e5f59e9a302..2c39ad408f2 100644 --- a/arch/arm/nwfpe/fpmodule.inl +++ b/arch/arm/nwfpe/fpmodule.inl | |||
@@ -28,8 +28,8 @@ static inline unsigned long readRegister(const unsigned int nReg) | |||
28 | for this in this routine. LDF/STF instructions with Rn = PC | 28 | for this in this routine. LDF/STF instructions with Rn = PC |
29 | depend on the PC being correct, as they use PC+8 in their | 29 | depend on the PC being correct, as they use PC+8 in their |
30 | address calculations. */ | 30 | address calculations. */ |
31 | unsigned long *userRegisters = GET_USERREG(); | 31 | struct pt_regs *regs = GET_USERREG(); |
32 | unsigned int val = userRegisters[nReg]; | 32 | unsigned int val = regs->uregs[nReg]; |
33 | if (REG_PC == nReg) | 33 | if (REG_PC == nReg) |
34 | val -= 4; | 34 | val -= 4; |
35 | return val; | 35 | return val; |
@@ -38,8 +38,8 @@ static inline unsigned long readRegister(const unsigned int nReg) | |||
38 | static inline void | 38 | static inline void |
39 | writeRegister(const unsigned int nReg, const unsigned long val) | 39 | writeRegister(const unsigned int nReg, const unsigned long val) |
40 | { | 40 | { |
41 | unsigned long *userRegisters = GET_USERREG(); | 41 | struct pt_regs *regs = GET_USERREG(); |
42 | userRegisters[nReg] = val; | 42 | regs->uregs[nReg] = val; |
43 | } | 43 | } |
44 | 44 | ||
45 | static inline unsigned long readCPSR(void) | 45 | static inline unsigned long readCPSR(void) |
@@ -63,12 +63,12 @@ static inline unsigned long readConditionCodes(void) | |||
63 | 63 | ||
64 | static inline void writeConditionCodes(const unsigned long val) | 64 | static inline void writeConditionCodes(const unsigned long val) |
65 | { | 65 | { |
66 | unsigned long *userRegisters = GET_USERREG(); | 66 | struct pt_regs *regs = GET_USERREG(); |
67 | unsigned long rval; | 67 | unsigned long rval; |
68 | /* | 68 | /* |
69 | * Operate directly on userRegisters since | 69 | * Operate directly on userRegisters since |
70 | * the CPSR may be the PC register itself. | 70 | * the CPSR may be the PC register itself. |
71 | */ | 71 | */ |
72 | rval = userRegisters[REG_CPSR] & ~CC_MASK; | 72 | rval = regs->ARM_cpsr & ~CC_MASK; |
73 | userRegisters[REG_CPSR] = rval | (val & CC_MASK); | 73 | regs->ARM_cpsr = rval | (val & CC_MASK); |
74 | } | 74 | } |
diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index 8fe1c12a17b..cabd53cec99 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c | |||
@@ -249,9 +249,6 @@ static void imxfb_enable_controller(struct imxfb_info *fbi) | |||
249 | /* disable hardware cursor */ | 249 | /* disable hardware cursor */ |
250 | LCDC_CPOS &= ~(CPOS_CC0 | CPOS_CC1); | 250 | LCDC_CPOS &= ~(CPOS_CC0 | CPOS_CC1); |
251 | 251 | ||
252 | /* fixed burst length (see erratum 11) */ | ||
253 | LCDC_DMACR = DMACR_BURST | DMACR_HM(8) | DMACR_TM(2); | ||
254 | |||
255 | LCDC_RMCR = RMCR_LCDC_EN; | 252 | LCDC_RMCR = RMCR_LCDC_EN; |
256 | 253 | ||
257 | if(fbi->backlight_power) | 254 | if(fbi->backlight_power) |
@@ -359,6 +356,7 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf | |||
359 | LCDC_PCR = fbi->pcr; | 356 | LCDC_PCR = fbi->pcr; |
360 | LCDC_PWMR = fbi->pwmr; | 357 | LCDC_PWMR = fbi->pwmr; |
361 | LCDC_LSCR1 = fbi->lscr1; | 358 | LCDC_LSCR1 = fbi->lscr1; |
359 | LCDC_DMACR = fbi->dmacr; | ||
362 | 360 | ||
363 | return 0; | 361 | return 0; |
364 | } | 362 | } |
@@ -509,6 +507,7 @@ static int __init imxfb_init_fbinfo(struct device *dev) | |||
509 | fbi->cmap_inverse = inf->cmap_inverse; | 507 | fbi->cmap_inverse = inf->cmap_inverse; |
510 | fbi->pcr = inf->pcr; | 508 | fbi->pcr = inf->pcr; |
511 | fbi->lscr1 = inf->lscr1; | 509 | fbi->lscr1 = inf->lscr1; |
510 | fbi->dmacr = inf->dmacr; | ||
512 | fbi->pwmr = inf->pwmr; | 511 | fbi->pwmr = inf->pwmr; |
513 | fbi->lcd_power = inf->lcd_power; | 512 | fbi->lcd_power = inf->lcd_power; |
514 | fbi->backlight_power = inf->backlight_power; | 513 | fbi->backlight_power = inf->backlight_power; |
@@ -642,12 +641,12 @@ static int imxfb_remove(struct device *dev) | |||
642 | { | 641 | { |
643 | struct platform_device *pdev = to_platform_device(dev); | 642 | struct platform_device *pdev = to_platform_device(dev); |
644 | struct fb_info *info = dev_get_drvdata(dev); | 643 | struct fb_info *info = dev_get_drvdata(dev); |
644 | struct imxfb_info *fbi = info->par; | ||
645 | struct resource *res; | 645 | struct resource *res; |
646 | 646 | ||
647 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 647 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
648 | 648 | ||
649 | /* disable LCD controller */ | 649 | imxfb_disable_controller(fbi); |
650 | LCDC_RMCR &= ~RMCR_LCDC_EN; | ||
651 | 650 | ||
652 | unregister_framebuffer(info); | 651 | unregister_framebuffer(info); |
653 | 652 | ||
@@ -663,8 +662,9 @@ static int imxfb_remove(struct device *dev) | |||
663 | 662 | ||
664 | void imxfb_shutdown(struct device * dev) | 663 | void imxfb_shutdown(struct device * dev) |
665 | { | 664 | { |
666 | /* disable LCD Controller */ | 665 | struct fb_info *info = dev_get_drvdata(dev); |
667 | LCDC_RMCR &= ~RMCR_LCDC_EN; | 666 | struct imxfb_info *fbi = info->par; |
667 | imxfb_disable_controller(fbi); | ||
668 | } | 668 | } |
669 | 669 | ||
670 | static struct device_driver imxfb_driver = { | 670 | static struct device_driver imxfb_driver = { |
diff --git a/drivers/video/imxfb.h b/drivers/video/imxfb.h index 128c3ee515c..e837a8b48eb 100644 --- a/drivers/video/imxfb.h +++ b/drivers/video/imxfb.h | |||
@@ -54,6 +54,7 @@ struct imxfb_info { | |||
54 | u_int pcr; | 54 | u_int pcr; |
55 | u_int pwmr; | 55 | u_int pwmr; |
56 | u_int lscr1; | 56 | u_int lscr1; |
57 | u_int dmacr; | ||
57 | u_int cmap_inverse:1, | 58 | u_int cmap_inverse:1, |
58 | cmap_static:1, | 59 | cmap_static:1, |
59 | unused:30; | 60 | unused:30; |
diff --git a/include/asm-arm/arch-imx/imxfb.h b/include/asm-arm/arch-imx/imxfb.h index 2346d454ab9..7dbc7bbba65 100644 --- a/include/asm-arm/arch-imx/imxfb.h +++ b/include/asm-arm/arch-imx/imxfb.h | |||
@@ -25,6 +25,7 @@ struct imxfb_mach_info { | |||
25 | u_int pcr; | 25 | u_int pcr; |
26 | u_int pwmr; | 26 | u_int pwmr; |
27 | u_int lscr1; | 27 | u_int lscr1; |
28 | u_int dmacr; | ||
28 | 29 | ||
29 | u_char * fixed_screen_cpu; | 30 | u_char * fixed_screen_cpu; |
30 | dma_addr_t fixed_screen_dma; | 31 | dma_addr_t fixed_screen_dma; |