aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r--arch/arm/kernel/Makefile5
-rw-r--r--arch/arm/kernel/apm.c19
-rw-r--r--arch/arm/kernel/dma-isa.c22
-rw-r--r--arch/arm/kernel/dma.c73
-rw-r--r--arch/arm/kernel/entry-armv.S2
-rw-r--r--arch/arm/kernel/head.S2
-rw-r--r--arch/arm/kernel/irq.c2
-rw-r--r--arch/arm/kernel/process.c3
-rw-r--r--arch/arm/kernel/setup.c2
-rw-r--r--arch/arm/kernel/time.c3
-rw-r--r--arch/arm/kernel/traps.c1
-rw-r--r--arch/arm/kernel/vmlinux.lds.S12
12 files changed, 50 insertions, 96 deletions
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
index c11169b5ed9a..de94b0f3ee2a 100644
--- a/arch/arm/kernel/Makefile
+++ b/arch/arm/kernel/Makefile
@@ -2,15 +2,16 @@
2# Makefile for the linux kernel. 2# Makefile for the linux kernel.
3# 3#
4 4
5AFLAGS_head.o := -DKERNEL_RAM_ADDR=$(TEXTADDR) 5AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
6 6
7# Object file lists. 7# Object file lists.
8 8
9obj-y := compat.o dma.o entry-armv.o entry-common.o irq.o \ 9obj-y := compat.o entry-armv.o entry-common.o irq.o \
10 process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \ 10 process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \
11 time.o traps.o 11 time.o traps.o
12 12
13obj-$(CONFIG_APM) += apm.o 13obj-$(CONFIG_APM) += apm.o
14obj-$(CONFIG_ISA_DMA_API) += dma.o
14obj-$(CONFIG_ARCH_ACORN) += ecard.o 15obj-$(CONFIG_ARCH_ACORN) += ecard.o
15obj-$(CONFIG_FOOTBRIDGE) += isa.o 16obj-$(CONFIG_FOOTBRIDGE) += isa.o
16obj-$(CONFIG_FIQ) += fiq.o 17obj-$(CONFIG_FIQ) += fiq.o
diff --git a/arch/arm/kernel/apm.c b/arch/arm/kernel/apm.c
index a2843be05557..b9df1b782bb1 100644
--- a/arch/arm/kernel/apm.c
+++ b/arch/arm/kernel/apm.c
@@ -20,7 +20,6 @@
20#include <linux/apm_bios.h> 20#include <linux/apm_bios.h>
21#include <linux/sched.h> 21#include <linux/sched.h>
22#include <linux/pm.h> 22#include <linux/pm.h>
23#include <linux/pm_legacy.h>
24#include <linux/device.h> 23#include <linux/device.h>
25#include <linux/kernel.h> 24#include <linux/kernel.h>
26#include <linux/list.h> 25#include <linux/list.h>
@@ -81,6 +80,7 @@ struct apm_user {
81 */ 80 */
82static int suspends_pending; 81static int suspends_pending;
83static int apm_disabled; 82static int apm_disabled;
83static int arm_apm_active;
84 84
85static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue); 85static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue);
86static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue); 86static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue);
@@ -477,9 +477,9 @@ static int kapmd(void *arg)
477 apm_event_t event; 477 apm_event_t event;
478 478
479 wait_event_interruptible(kapmd_wait, 479 wait_event_interruptible(kapmd_wait,
480 !queue_empty(&kapmd_queue) || !pm_active); 480 !queue_empty(&kapmd_queue) || !arm_apm_active);
481 481
482 if (!pm_active) 482 if (!arm_apm_active)
483 break; 483 break;
484 484
485 spin_lock_irq(&kapmd_queue_lock); 485 spin_lock_irq(&kapmd_queue_lock);
@@ -522,16 +522,11 @@ static int __init apm_init(void)
522 return -ENODEV; 522 return -ENODEV;
523 } 523 }
524 524
525 if (PM_IS_ACTIVE()) { 525 arm_apm_active = 1;
526 printk(KERN_NOTICE "apm: overridden by ACPI.\n");
527 return -EINVAL;
528 }
529
530 pm_active = 1;
531 526
532 ret = kernel_thread(kapmd, NULL, CLONE_KERNEL); 527 ret = kernel_thread(kapmd, NULL, CLONE_KERNEL);
533 if (ret < 0) { 528 if (ret < 0) {
534 pm_active = 0; 529 arm_apm_active = 0;
535 return ret; 530 return ret;
536 } 531 }
537 532
@@ -543,7 +538,7 @@ static int __init apm_init(void)
543 if (ret != 0) { 538 if (ret != 0) {
544 remove_proc_entry("apm", NULL); 539 remove_proc_entry("apm", NULL);
545 540
546 pm_active = 0; 541 arm_apm_active = 0;
547 wake_up(&kapmd_wait); 542 wake_up(&kapmd_wait);
548 wait_for_completion(&kapmd_exit); 543 wait_for_completion(&kapmd_exit);
549 } 544 }
@@ -556,7 +551,7 @@ static void __exit apm_exit(void)
556 misc_deregister(&apm_device); 551 misc_deregister(&apm_device);
557 remove_proc_entry("apm", NULL); 552 remove_proc_entry("apm", NULL);
558 553
559 pm_active = 0; 554 arm_apm_active = 0;
560 wake_up(&kapmd_wait); 555 wake_up(&kapmd_wait);
561 wait_for_completion(&kapmd_exit); 556 wait_for_completion(&kapmd_exit);
562} 557}
diff --git a/arch/arm/kernel/dma-isa.c b/arch/arm/kernel/dma-isa.c
index e9a36304ec3e..03532769a97f 100644
--- a/arch/arm/kernel/dma-isa.c
+++ b/arch/arm/kernel/dma-isa.c
@@ -18,7 +18,7 @@
18 */ 18 */
19#include <linux/ioport.h> 19#include <linux/ioport.h>
20#include <linux/init.h> 20#include <linux/init.h>
21#include <linux/pci.h> 21#include <linux/dma-mapping.h>
22 22
23#include <asm/dma.h> 23#include <asm/dma.h>
24#include <asm/io.h> 24#include <asm/io.h>
@@ -65,37 +65,41 @@ static void isa_enable_dma(dmach_t channel, dma_t *dma)
65{ 65{
66 if (dma->invalid) { 66 if (dma->invalid) {
67 unsigned long address, length; 67 unsigned long address, length;
68 unsigned int mode, direction; 68 unsigned int mode;
69 enum dma_data_direction direction;
69 70
70 mode = channel & 3; 71 mode = channel & 3;
71 switch (dma->dma_mode & DMA_MODE_MASK) { 72 switch (dma->dma_mode & DMA_MODE_MASK) {
72 case DMA_MODE_READ: 73 case DMA_MODE_READ:
73 mode |= ISA_DMA_MODE_READ; 74 mode |= ISA_DMA_MODE_READ;
74 direction = PCI_DMA_FROMDEVICE; 75 direction = DMA_FROM_DEVICE;
75 break; 76 break;
76 77
77 case DMA_MODE_WRITE: 78 case DMA_MODE_WRITE:
78 mode |= ISA_DMA_MODE_WRITE; 79 mode |= ISA_DMA_MODE_WRITE;
79 direction = PCI_DMA_TODEVICE; 80 direction = DMA_TO_DEVICE;
80 break; 81 break;
81 82
82 case DMA_MODE_CASCADE: 83 case DMA_MODE_CASCADE:
83 mode |= ISA_DMA_MODE_CASCADE; 84 mode |= ISA_DMA_MODE_CASCADE;
84 direction = PCI_DMA_BIDIRECTIONAL; 85 direction = DMA_BIDIRECTIONAL;
85 break; 86 break;
86 87
87 default: 88 default:
88 direction = PCI_DMA_NONE; 89 direction = DMA_NONE;
89 break; 90 break;
90 } 91 }
91 92
92 if (!dma->using_sg) { 93 if (!dma->sg) {
93 /* 94 /*
94 * Cope with ISA-style drivers which expect cache 95 * Cope with ISA-style drivers which expect cache
95 * coherence. 96 * coherence.
96 */ 97 */
97 dma->buf.dma_address = pci_map_single(NULL, 98 dma->sg = &dma->buf;
98 dma->buf.__address, dma->buf.length, 99 dma->sgcount = 1;
100 dma->buf.length = dma->count;
101 dma->buf.dma_address = dma_map_single(NULL,
102 dma->addr, dma->count,
99 direction); 103 direction);
100 } 104 }
101 105
diff --git a/arch/arm/kernel/dma.c b/arch/arm/kernel/dma.c
index 2b7883884234..5a0f4bc5da95 100644
--- a/arch/arm/kernel/dma.c
+++ b/arch/arm/kernel/dma.c
@@ -12,8 +12,6 @@
12 * DMA facilities. 12 * DMA facilities.
13 */ 13 */
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/slab.h>
16#include <linux/mman.h>
17#include <linux/init.h> 15#include <linux/init.h>
18#include <linux/spinlock.h> 16#include <linux/spinlock.h>
19#include <linux/errno.h> 17#include <linux/errno.h>
@@ -23,8 +21,7 @@
23#include <asm/mach/dma.h> 21#include <asm/mach/dma.h>
24 22
25DEFINE_SPINLOCK(dma_spin_lock); 23DEFINE_SPINLOCK(dma_spin_lock);
26 24EXPORT_SYMBOL(dma_spin_lock);
27#if MAX_DMA_CHANNELS > 0
28 25
29static dma_t dma_chan[MAX_DMA_CHANNELS]; 26static dma_t dma_chan[MAX_DMA_CHANNELS];
30 27
@@ -81,6 +78,7 @@ bad_dma:
81busy: 78busy:
82 return -EBUSY; 79 return -EBUSY;
83} 80}
81EXPORT_SYMBOL(request_dma);
84 82
85/* 83/*
86 * Free DMA channel 84 * Free DMA channel
@@ -112,6 +110,7 @@ void free_dma(dmach_t channel)
112bad_dma: 110bad_dma:
113 printk(KERN_ERR "dma: trying to free DMA%d\n", channel); 111 printk(KERN_ERR "dma: trying to free DMA%d\n", channel);
114} 112}
113EXPORT_SYMBOL(free_dma);
115 114
116/* Set DMA Scatter-Gather list 115/* Set DMA Scatter-Gather list
117 */ 116 */
@@ -125,15 +124,15 @@ void set_dma_sg (dmach_t channel, struct scatterlist *sg, int nr_sg)
125 124
126 dma->sg = sg; 125 dma->sg = sg;
127 dma->sgcount = nr_sg; 126 dma->sgcount = nr_sg;
128 dma->using_sg = 1;
129 dma->invalid = 1; 127 dma->invalid = 1;
130} 128}
129EXPORT_SYMBOL(set_dma_sg);
131 130
132/* Set DMA address 131/* Set DMA address
133 * 132 *
134 * Copy address to the structure, and set the invalid bit 133 * Copy address to the structure, and set the invalid bit
135 */ 134 */
136void set_dma_addr (dmach_t channel, unsigned long physaddr) 135void __set_dma_addr (dmach_t channel, void *addr)
137{ 136{
138 dma_t *dma = dma_chan + channel; 137 dma_t *dma = dma_chan + channel;
139 138
@@ -141,12 +140,11 @@ void set_dma_addr (dmach_t channel, unsigned long physaddr)
141 printk(KERN_ERR "dma%d: altering DMA address while " 140 printk(KERN_ERR "dma%d: altering DMA address while "
142 "DMA active\n", channel); 141 "DMA active\n", channel);
143 142
144 dma->sg = &dma->buf; 143 dma->sg = NULL;
145 dma->sgcount = 1; 144 dma->addr = addr;
146 dma->buf.__address = bus_to_virt(physaddr);
147 dma->using_sg = 0;
148 dma->invalid = 1; 145 dma->invalid = 1;
149} 146}
147EXPORT_SYMBOL(__set_dma_addr);
150 148
151/* Set DMA byte count 149/* Set DMA byte count
152 * 150 *
@@ -160,12 +158,11 @@ void set_dma_count (dmach_t channel, unsigned long count)
160 printk(KERN_ERR "dma%d: altering DMA count while " 158 printk(KERN_ERR "dma%d: altering DMA count while "
161 "DMA active\n", channel); 159 "DMA active\n", channel);
162 160
163 dma->sg = &dma->buf; 161 dma->sg = NULL;
164 dma->sgcount = 1; 162 dma->count = count;
165 dma->buf.length = count;
166 dma->using_sg = 0;
167 dma->invalid = 1; 163 dma->invalid = 1;
168} 164}
165EXPORT_SYMBOL(set_dma_count);
169 166
170/* Set DMA direction mode 167/* Set DMA direction mode
171 */ 168 */
@@ -180,6 +177,7 @@ void set_dma_mode (dmach_t channel, dmamode_t mode)
180 dma->dma_mode = mode; 177 dma->dma_mode = mode;
181 dma->invalid = 1; 178 dma->invalid = 1;
182} 179}
180EXPORT_SYMBOL(set_dma_mode);
183 181
184/* Enable DMA channel 182/* Enable DMA channel
185 */ 183 */
@@ -200,6 +198,7 @@ free_dma:
200 printk(KERN_ERR "dma%d: trying to enable free DMA\n", channel); 198 printk(KERN_ERR "dma%d: trying to enable free DMA\n", channel);
201 BUG(); 199 BUG();
202} 200}
201EXPORT_SYMBOL(enable_dma);
203 202
204/* Disable DMA channel 203/* Disable DMA channel
205 */ 204 */
@@ -220,6 +219,7 @@ free_dma:
220 printk(KERN_ERR "dma%d: trying to disable free DMA\n", channel); 219 printk(KERN_ERR "dma%d: trying to disable free DMA\n", channel);
221 BUG(); 220 BUG();
222} 221}
222EXPORT_SYMBOL(disable_dma);
223 223
224/* 224/*
225 * Is the specified DMA channel active? 225 * Is the specified DMA channel active?
@@ -233,6 +233,7 @@ void set_dma_page(dmach_t channel, char pagenr)
233{ 233{
234 printk(KERN_ERR "dma%d: trying to set_dma_page\n", channel); 234 printk(KERN_ERR "dma%d: trying to set_dma_page\n", channel);
235} 235}
236EXPORT_SYMBOL(set_dma_page);
236 237
237void set_dma_speed(dmach_t channel, int cycle_ns) 238void set_dma_speed(dmach_t channel, int cycle_ns)
238{ 239{
@@ -243,6 +244,7 @@ void set_dma_speed(dmach_t channel, int cycle_ns)
243 ret = dma->d_ops->setspeed(channel, dma, cycle_ns); 244 ret = dma->d_ops->setspeed(channel, dma, cycle_ns);
244 dma->speed = ret; 245 dma->speed = ret;
245} 246}
247EXPORT_SYMBOL(set_dma_speed);
246 248
247int get_dma_residue(dmach_t channel) 249int get_dma_residue(dmach_t channel)
248{ 250{
@@ -254,49 +256,12 @@ int get_dma_residue(dmach_t channel)
254 256
255 return ret; 257 return ret;
256} 258}
259EXPORT_SYMBOL(get_dma_residue);
257 260
258void __init init_dma(void) 261static int __init init_dma(void)
259{ 262{
260 arch_dma_init(dma_chan); 263 arch_dma_init(dma_chan);
261}
262
263#else
264
265int request_dma(dmach_t channel, const char *device_id)
266{
267 return -EINVAL;
268}
269
270int get_dma_residue(dmach_t channel)
271{
272 return 0; 264 return 0;
273} 265}
274 266
275#define GLOBAL_ALIAS(_a,_b) asm (".set " #_a "," #_b "; .globl " #_a) 267core_initcall(init_dma);
276GLOBAL_ALIAS(disable_dma, get_dma_residue);
277GLOBAL_ALIAS(enable_dma, get_dma_residue);
278GLOBAL_ALIAS(free_dma, get_dma_residue);
279GLOBAL_ALIAS(get_dma_list, get_dma_residue);
280GLOBAL_ALIAS(set_dma_mode, get_dma_residue);
281GLOBAL_ALIAS(set_dma_page, get_dma_residue);
282GLOBAL_ALIAS(set_dma_count, get_dma_residue);
283GLOBAL_ALIAS(set_dma_addr, get_dma_residue);
284GLOBAL_ALIAS(set_dma_sg, get_dma_residue);
285GLOBAL_ALIAS(set_dma_speed, get_dma_residue);
286GLOBAL_ALIAS(init_dma, get_dma_residue);
287
288#endif
289
290EXPORT_SYMBOL(request_dma);
291EXPORT_SYMBOL(free_dma);
292EXPORT_SYMBOL(enable_dma);
293EXPORT_SYMBOL(disable_dma);
294EXPORT_SYMBOL(set_dma_addr);
295EXPORT_SYMBOL(set_dma_count);
296EXPORT_SYMBOL(set_dma_mode);
297EXPORT_SYMBOL(set_dma_page);
298EXPORT_SYMBOL(get_dma_residue);
299EXPORT_SYMBOL(set_dma_sg);
300EXPORT_SYMBOL(set_dma_speed);
301
302EXPORT_SYMBOL(dma_spin_lock);
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index 2a8d27e18fa7..a52baedf6262 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -18,8 +18,6 @@
18#include <asm/memory.h> 18#include <asm/memory.h>
19#include <asm/glue.h> 19#include <asm/glue.h>
20#include <asm/vfpmacros.h> 20#include <asm/vfpmacros.h>
21#include <asm/hardware.h> /* should be moved into entry-macro.S */
22#include <asm/arch/irqs.h> /* should be moved into entry-macro.S */
23#include <asm/arch/entry-macro.S> 21#include <asm/arch/entry-macro.S>
24 22
25#include "entry-header.S" 23#include "entry-header.S"
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index d7d69fd7039f..1e985f2cd70f 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -33,6 +33,8 @@
33#define MACHINFO_PGOFFIO 12 33#define MACHINFO_PGOFFIO 12
34#define MACHINFO_NAME 16 34#define MACHINFO_NAME 16
35 35
36#define KERNEL_RAM_ADDR (PAGE_OFFSET + TEXT_OFFSET)
37
36/* 38/*
37 * swapper_pg_dir is the virtual address of the initial page table. 39 * swapper_pg_dir is the virtual address of the initial page table.
38 * We place the page tables 16K below KERNEL_RAM_ADDR. Therefore, we must 40 * We place the page tables 16K below KERNEL_RAM_ADDR. Therefore, we must
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
index d7099dbbb879..869c466e6258 100644
--- a/arch/arm/kernel/irq.c
+++ b/arch/arm/kernel/irq.c
@@ -1027,7 +1027,6 @@ void __init init_irq_proc(void)
1027void __init init_IRQ(void) 1027void __init init_IRQ(void)
1028{ 1028{
1029 struct irqdesc *desc; 1029 struct irqdesc *desc;
1030 extern void init_dma(void);
1031 int irq; 1030 int irq;
1032 1031
1033#ifdef CONFIG_SMP 1032#ifdef CONFIG_SMP
@@ -1041,7 +1040,6 @@ void __init init_IRQ(void)
1041 } 1040 }
1042 1041
1043 init_arch_irq(); 1042 init_arch_irq();
1044 init_dma();
1045} 1043}
1046 1044
1047static int __init noirqdebug_setup(char *str) 1045static int __init noirqdebug_setup(char *str)
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 30494aab829a..54a21bdcba5c 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -28,10 +28,9 @@
28#include <linux/init.h> 28#include <linux/init.h>
29#include <linux/cpu.h> 29#include <linux/cpu.h>
30 30
31#include <asm/system.h>
32#include <asm/io.h>
33#include <asm/leds.h> 31#include <asm/leds.h>
34#include <asm/processor.h> 32#include <asm/processor.h>
33#include <asm/system.h>
35#include <asm/uaccess.h> 34#include <asm/uaccess.h>
36#include <asm/mach/time.h> 35#include <asm/mach/time.h>
37 36
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 85774165e9fd..2cab741ad0f8 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -26,8 +26,6 @@
26 26
27#include <asm/cpu.h> 27#include <asm/cpu.h>
28#include <asm/elf.h> 28#include <asm/elf.h>
29#include <asm/hardware.h>
30#include <asm/io.h>
31#include <asm/procinfo.h> 29#include <asm/procinfo.h>
32#include <asm/setup.h> 30#include <asm/setup.h>
33#include <asm/mach-types.h> 31#include <asm/mach-types.h>
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index fc4729106a32..d7d932c02866 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -29,9 +29,6 @@
29#include <linux/sysdev.h> 29#include <linux/sysdev.h>
30#include <linux/timer.h> 30#include <linux/timer.h>
31 31
32#include <asm/hardware.h>
33#include <asm/io.h>
34#include <asm/irq.h>
35#include <asm/leds.h> 32#include <asm/leds.h>
36#include <asm/thread_info.h> 33#include <asm/thread_info.h>
37#include <asm/mach/time.h> 34#include <asm/mach/time.h>
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index 45e9ea6cd2a5..c9fe6f5f7ee3 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -23,7 +23,6 @@
23 23
24#include <asm/atomic.h> 24#include <asm/atomic.h>
25#include <asm/cacheflush.h> 25#include <asm/cacheflush.h>
26#include <asm/io.h>
27#include <asm/system.h> 26#include <asm/system.h>
28#include <asm/uaccess.h> 27#include <asm/uaccess.h>
29#include <asm/unistd.h> 28#include <asm/unistd.h>
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 9a47770114d4..2b254e88595c 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -17,15 +17,13 @@ jiffies = jiffies_64;
17jiffies = jiffies_64 + 4; 17jiffies = jiffies_64 + 4;
18#endif 18#endif
19 19
20SECTIONS
21{
20#ifdef CONFIG_XIP_KERNEL 22#ifdef CONFIG_XIP_KERNEL
21#define TEXTADDR XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR) 23 . = XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR);
22#else 24#else
23#define TEXTADDR KERNEL_RAM_ADDR 25 . = PAGE_OFFSET + TEXT_OFFSET;
24#endif 26#endif
25
26SECTIONS
27{
28 . = TEXTADDR;
29 .init : { /* Init code and data */ 27 .init : { /* Init code and data */
30 _stext = .; 28 _stext = .;
31 _sinittext = .; 29 _sinittext = .;
@@ -104,7 +102,7 @@ SECTIONS
104 102
105#ifdef CONFIG_XIP_KERNEL 103#ifdef CONFIG_XIP_KERNEL
106 __data_loc = ALIGN(4); /* location in binary */ 104 __data_loc = ALIGN(4); /* location in binary */
107 . = KERNEL_RAM_ADDR; 105 . = PAGE_OFFSET + TEXT_OFFSET;
108#else 106#else
109 . = ALIGN(THREAD_SIZE); 107 . = ALIGN(THREAD_SIZE);
110 __data_loc = .; 108 __data_loc = .;