diff options
author | andrew <andrew@FreeBSD.org> | 2012-06-10 01:13:04 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2012-06-10 01:13:04 +0000 |
commit | 723899fa5c91cf5bb546942f05ad02ffb04560cf (patch) | |
tree | a54857d5b64fb392edc9c816a507c21fc49fe892 /sys/arm | |
parent | 070b3c041473a0ce18654dc5b1e1100d4b7896d2 (diff) | |
download | FreeBSD-src-723899fa5c91cf5bb546942f05ad02ffb04560cf.zip FreeBSD-src-723899fa5c91cf5bb546942f05ad02ffb04560cf.tar.gz |
Pull out the common code to initialise proc0 & thread0 from initarm to a
common function.
Reviewed by: imp
Diffstat (limited to 'sys/arm')
-rw-r--r-- | sys/arm/arm/machdep.c | 18 | ||||
-rw-r--r-- | sys/arm/at91/at91_machdep.c | 10 | ||||
-rw-r--r-- | sys/arm/econa/econa_machdep.c | 10 | ||||
-rw-r--r-- | sys/arm/include/machdep.h | 1 | ||||
-rw-r--r-- | sys/arm/mv/mv_machdep.c | 11 | ||||
-rw-r--r-- | sys/arm/s3c2xx0/s3c24x0_machdep.c | 12 | ||||
-rw-r--r-- | sys/arm/sa11x0/assabet_machdep.c | 8 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/ep80219_machdep.c | 10 | ||||
-rw-r--r-- | sys/arm/xscale/i80321/iq31244_machdep.c | 10 | ||||
-rw-r--r-- | sys/arm/xscale/i8134x/crb_machdep.c | 10 | ||||
-rw-r--r-- | sys/arm/xscale/ixp425/avila_machdep.c | 10 | ||||
-rw-r--r-- | sys/arm/xscale/pxa/pxa_machdep.c | 10 |
12 files changed, 30 insertions, 90 deletions
diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c index 1ec4bc4..0cceab0f 100644 --- a/sys/arm/arm/machdep.c +++ b/sys/arm/arm/machdep.c @@ -92,6 +92,8 @@ __FBSDID("$FreeBSD$"); #include <machine/vmparam.h> #include <machine/sysarch.h> +static struct trapframe proc0_tf; + uint32_t cpu_reset_address = 0; int cold = 1; vm_offset_t vector_page; @@ -709,3 +711,19 @@ fake_preload_metadata(void) return (lastaddr); } + +/* + * Initialize proc0 + */ +void +init_proc0(vm_offset_t kstack) +{ + proc_linkup0(&proc0, &thread0); + thread0.td_kstack = kstack; + thread0.td_pcb = (struct pcb *) + (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; + thread0.td_pcb->pcb_flags = 0; + thread0.td_frame = &proc0_tf; + pcpup->pc_curpcb = thread0.td_pcb; +} + diff --git a/sys/arm/at91/at91_machdep.c b/sys/arm/at91/at91_machdep.c index a6b8d87..b05ef9a 100644 --- a/sys/arm/at91/at91_machdep.c +++ b/sys/arm/at91/at91_machdep.c @@ -132,8 +132,6 @@ struct pv_addr undstack; struct pv_addr abtstack; struct pv_addr kernelstack; -static struct trapframe proc0_tf; - /* Static device mappings. */ const struct pmap_devmap at91_devmap[] = { /* @@ -550,13 +548,7 @@ initarm(struct arm_boot_params *abp) undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); - proc_linkup0(&proc0, &thread0); - thread0.td_kstack = kernelstack.pv_va; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; - thread0.td_pcb->pcb_flags = 0; - thread0.td_frame = &proc0_tf; - pcpup->pc_curpcb = thread0.td_pcb; + init_proc0(kernelstack.pv_va); arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); diff --git a/sys/arm/econa/econa_machdep.c b/sys/arm/econa/econa_machdep.c index 411cb97..237ec48 100644 --- a/sys/arm/econa/econa_machdep.c +++ b/sys/arm/econa/econa_machdep.c @@ -123,8 +123,6 @@ struct pv_addr undstack; struct pv_addr abtstack; struct pv_addr kernelstack; -static struct trapframe proc0_tf; - /* Static device mappings. */ static const struct pmap_devmap econa_devmap[] = { { @@ -341,13 +339,7 @@ initarm(struct arm_boot_params *abp) undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); - proc_linkup0(&proc0, &thread0); - thread0.td_kstack = kernelstack.pv_va; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; - thread0.td_pcb->pcb_flags = 0; - thread0.td_frame = &proc0_tf; - pcpup->pc_curpcb = thread0.td_pcb; + init_proc0(kernelstack.pv_va); arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); diff --git a/sys/arm/include/machdep.h b/sys/arm/include/machdep.h index 85c4114..b403d94 100644 --- a/sys/arm/include/machdep.h +++ b/sys/arm/include/machdep.h @@ -7,6 +7,7 @@ /* misc prototypes used by the many arm machdeps */ void arm_lock_cache_line(vm_offset_t); vm_offset_t fake_preload_metadata(void); +void init_proc0(vm_offset_t kstack); void halt(void); void data_abort_handler(trapframe_t *); void prefetch_abort_handler(trapframe_t *); diff --git a/sys/arm/mv/mv_machdep.c b/sys/arm/mv/mv_machdep.c index 2f2d628..a557773 100644 --- a/sys/arm/mv/mv_machdep.c +++ b/sys/arm/mv/mv_machdep.c @@ -145,8 +145,6 @@ struct pv_addr undstack; struct pv_addr abtstack; struct pv_addr kernelstack; -static struct trapframe proc0_tf; - static struct mem_region availmem_regions[FDT_MEM_REGIONS]; static int availmem_regions_sz; @@ -576,14 +574,7 @@ initarm(struct arm_boot_params *abp) undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); - proc_linkup0(&proc0, &thread0); - thread0.td_kstack = kernelstack.pv_va; - thread0.td_kstack_pages = KSTACK_PAGES; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; - thread0.td_pcb->pcb_flags = 0; - thread0.td_frame = &proc0_tf; - pcpup->pc_curpcb = thread0.td_pcb; + init_proc0(kernelstack.pv_va); arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); diff --git a/sys/arm/s3c2xx0/s3c24x0_machdep.c b/sys/arm/s3c2xx0/s3c24x0_machdep.c index af4eaf9..398b53d 100644 --- a/sys/arm/s3c2xx0/s3c24x0_machdep.c +++ b/sys/arm/s3c2xx0/s3c24x0_machdep.c @@ -138,8 +138,6 @@ struct pv_addr undstack; struct pv_addr abtstack; struct pv_addr kernelstack; -static struct trapframe proc0_tf; - #define _A(a) ((a) & ~L1_S_OFFSET) #define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) @@ -406,14 +404,8 @@ initarm(struct arm_boot_params *abp) prefetch_abort_handler_address = (u_int)prefetch_abort_handler; undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); - - proc_linkup(&proc0, &thread0); - thread0.td_kstack = kernelstack.pv_va; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; - thread0.td_pcb->pcb_flags = 0; - thread0.td_frame = &proc0_tf; - pcpup->pc_curpcb = thread0.td_pcb; + + init_proc0(kernelstack.pv_va); arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); diff --git a/sys/arm/sa11x0/assabet_machdep.c b/sys/arm/sa11x0/assabet_machdep.c index ee93f84..54a2adb 100644 --- a/sys/arm/sa11x0/assabet_machdep.c +++ b/sys/arm/sa11x0/assabet_machdep.c @@ -147,7 +147,6 @@ struct pv_addr irqstack; struct pv_addr undstack; struct pv_addr abtstack; struct pv_addr kernelstack; -static struct trapframe proc0_tf; /* Static device mappings. */ static const struct pmap_devmap assabet_devmap[] = { @@ -387,12 +386,7 @@ initarm(struct arm_boot_params *abp) /* Set stack for exception handlers */ - proc_linkup0(&proc0, &thread0); - thread0.td_kstack = kernelstack.pv_va; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; - thread0.td_pcb->pcb_flags = 0; - thread0.td_frame = &proc0_tf; + init_proc0(kernelstack.pv_va); /* Enable MMU, I-cache, D-cache, write buffer. */ diff --git a/sys/arm/xscale/i80321/ep80219_machdep.c b/sys/arm/xscale/i80321/ep80219_machdep.c index e0cfeed..803fec1 100644 --- a/sys/arm/xscale/i80321/ep80219_machdep.c +++ b/sys/arm/xscale/i80321/ep80219_machdep.c @@ -136,8 +136,6 @@ struct pv_addr abtstack; struct pv_addr kernelstack; struct pv_addr minidataclean; -static struct trapframe proc0_tf; - /* #define IQ80321_OBIO_BASE 0xfe800000UL */ /* #define IQ80321_OBIO_SIZE 0x00100000UL */ @@ -379,13 +377,7 @@ initarm(struct arm_boot_params *abp) undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); - proc_linkup0(&proc0, &thread0); - thread0.td_kstack = kernelstack.pv_va; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; - thread0.td_pcb->pcb_flags = 0; - thread0.td_frame = &proc0_tf; - pcpup->pc_curpcb = thread0.td_pcb; + init_proc0(kernelstack.pv_va); /* Enable MMU, I-cache, D-cache, write buffer. */ diff --git a/sys/arm/xscale/i80321/iq31244_machdep.c b/sys/arm/xscale/i80321/iq31244_machdep.c index d5e7549..ae642c5 100644 --- a/sys/arm/xscale/i80321/iq31244_machdep.c +++ b/sys/arm/xscale/i80321/iq31244_machdep.c @@ -136,8 +136,6 @@ struct pv_addr abtstack; struct pv_addr kernelstack; struct pv_addr minidataclean; -static struct trapframe proc0_tf; - #define IQ80321_OBIO_BASE 0xfe800000UL #define IQ80321_OBIO_SIZE 0x00100000UL /* Static device mappings. */ @@ -377,13 +375,7 @@ initarm(struct arm_boot_params *abp) undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); - proc_linkup0(&proc0, &thread0); - thread0.td_kstack = kernelstack.pv_va; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; - thread0.td_pcb->pcb_flags = 0; - thread0.td_frame = &proc0_tf; - pcpup->pc_curpcb = thread0.td_pcb; + init_proc0(kernelstack.pv_va); /* Enable MMU, I-cache, D-cache, write buffer. */ diff --git a/sys/arm/xscale/i8134x/crb_machdep.c b/sys/arm/xscale/i8134x/crb_machdep.c index cb0cefc..7d49d40 100644 --- a/sys/arm/xscale/i8134x/crb_machdep.c +++ b/sys/arm/xscale/i8134x/crb_machdep.c @@ -135,8 +135,6 @@ struct pv_addr undstack; struct pv_addr abtstack; struct pv_addr kernelstack; -static struct trapframe proc0_tf; - /* Static device mappings. */ static const struct pmap_devmap iq81342_devmap[] = { { @@ -353,13 +351,7 @@ initarm(struct arm_boot_params *abp) undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); - proc_linkup0(&proc0, &thread0); - thread0.td_kstack = kernelstack.pv_va; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; - thread0.td_pcb->pcb_flags = 0; - thread0.td_frame = &proc0_tf; - pcpup->pc_curpcb = thread0.td_pcb; + init_proc0(kernelstack.pv_va); arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); diff --git a/sys/arm/xscale/ixp425/avila_machdep.c b/sys/arm/xscale/ixp425/avila_machdep.c index 01a770d..a91fd20 100644 --- a/sys/arm/xscale/ixp425/avila_machdep.c +++ b/sys/arm/xscale/ixp425/avila_machdep.c @@ -140,8 +140,6 @@ struct pv_addr abtstack; struct pv_addr kernelstack; struct pv_addr minidataclean; -static struct trapframe proc0_tf; - /* Static device mappings. */ static const struct pmap_devmap ixp425_devmap[] = { /* Physical/Virtual address for I/O space */ @@ -443,13 +441,7 @@ initarm(struct arm_boot_params *abp) undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); - proc_linkup0(&proc0, &thread0); - thread0.td_kstack = kernelstack.pv_va; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; - thread0.td_pcb->pcb_flags = 0; - thread0.td_frame = &proc0_tf; - pcpup->pc_curpcb = thread0.td_pcb; + init_proc0(kernelstack.pv_va); arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); diff --git a/sys/arm/xscale/pxa/pxa_machdep.c b/sys/arm/xscale/pxa/pxa_machdep.c index 56e1402..69311d4 100644 --- a/sys/arm/xscale/pxa/pxa_machdep.c +++ b/sys/arm/xscale/pxa/pxa_machdep.c @@ -136,8 +136,6 @@ struct pv_addr abtstack; struct pv_addr kernelstack; struct pv_addr minidataclean; -static struct trapframe proc0_tf; - static void pxa_probe_sdram(bus_space_tag_t, bus_space_handle_t, uint32_t *, uint32_t *); @@ -367,13 +365,7 @@ initarm(struct arm_boot_params *abp) undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); - proc_linkup(&proc0, &thread0); - thread0.td_kstack = kernelstack.pv_va; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; - thread0.td_pcb->pcb_flags = 0; - thread0.td_frame = &proc0_tf; - pcpup->pc_curpcb = thread0.td_pcb; + init_proc0(kernelstack.pv_va); /* Enable MMU, I-cache, D-cache, write buffer. */ arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL); |