diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-07-14 20:27:29 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-07-14 20:27:29 -0400 |
commit | ea4c1a7e14051e2ba81fc7dc02e3d55bfb2d7548 (patch) | |
tree | ed80eaf6245d8d1509662dc42e7184391b91e7d1 /arch | |
parent | bcefc8d0d3a0cba9078f519d69f138b93ad30e39 (diff) | |
parent | 77154a2026ee5cb2ce05a7d370c16e4c123028e5 (diff) |
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
powerpc/fsl-booke: Fix address issue when using relocatable kernels
powerpc/cpm1: Mark micropatch code/data static and __init
powerpc/cpm1: Fix build with various CONFIG_*_UCODE_PATCH combinations
powerpc/cpm: Reintroduce global spi_pram struct (fixes build issue)
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/include/asm/cpm.h | 24 | ||||
-rw-r--r-- | arch/powerpc/include/asm/cpm1.h | 3 | ||||
-rw-r--r-- | arch/powerpc/kernel/fsl_booke_entry_mapping.S | 4 | ||||
-rw-r--r-- | arch/powerpc/sysdev/micropatch.c | 30 |
4 files changed, 45 insertions, 16 deletions
diff --git a/arch/powerpc/include/asm/cpm.h b/arch/powerpc/include/asm/cpm.h index 0835eb977ba9..e50323fe941f 100644 --- a/arch/powerpc/include/asm/cpm.h +++ b/arch/powerpc/include/asm/cpm.h | |||
@@ -7,6 +7,30 @@ | |||
7 | #include <linux/of.h> | 7 | #include <linux/of.h> |
8 | 8 | ||
9 | /* | 9 | /* |
10 | * SPI Parameter RAM common to QE and CPM. | ||
11 | */ | ||
12 | struct spi_pram { | ||
13 | __be16 rbase; /* Rx Buffer descriptor base address */ | ||
14 | __be16 tbase; /* Tx Buffer descriptor base address */ | ||
15 | u8 rfcr; /* Rx function code */ | ||
16 | u8 tfcr; /* Tx function code */ | ||
17 | __be16 mrblr; /* Max receive buffer length */ | ||
18 | __be32 rstate; /* Internal */ | ||
19 | __be32 rdp; /* Internal */ | ||
20 | __be16 rbptr; /* Internal */ | ||
21 | __be16 rbc; /* Internal */ | ||
22 | __be32 rxtmp; /* Internal */ | ||
23 | __be32 tstate; /* Internal */ | ||
24 | __be32 tdp; /* Internal */ | ||
25 | __be16 tbptr; /* Internal */ | ||
26 | __be16 tbc; /* Internal */ | ||
27 | __be32 txtmp; /* Internal */ | ||
28 | __be32 res; /* Tx temp. */ | ||
29 | __be16 rpbase; /* Relocation pointer (CPM1 only) */ | ||
30 | __be16 res1; /* Reserved */ | ||
31 | }; | ||
32 | |||
33 | /* | ||
10 | * USB Controller pram common to QE and CPM. | 34 | * USB Controller pram common to QE and CPM. |
11 | */ | 35 | */ |
12 | struct usb_ctlr { | 36 | struct usb_ctlr { |
diff --git a/arch/powerpc/include/asm/cpm1.h b/arch/powerpc/include/asm/cpm1.h index 81b01192f440..bd07650dca56 100644 --- a/arch/powerpc/include/asm/cpm1.h +++ b/arch/powerpc/include/asm/cpm1.h | |||
@@ -17,6 +17,7 @@ | |||
17 | #ifndef __CPM1__ | 17 | #ifndef __CPM1__ |
18 | #define __CPM1__ | 18 | #define __CPM1__ |
19 | 19 | ||
20 | #include <linux/init.h> | ||
20 | #include <asm/8xx_immap.h> | 21 | #include <asm/8xx_immap.h> |
21 | #include <asm/ptrace.h> | 22 | #include <asm/ptrace.h> |
22 | #include <asm/cpm.h> | 23 | #include <asm/cpm.h> |
@@ -54,7 +55,7 @@ extern cpm8xx_t __iomem *cpmp; /* Pointer to comm processor */ | |||
54 | 55 | ||
55 | extern void cpm_setbrg(uint brg, uint rate); | 56 | extern void cpm_setbrg(uint brg, uint rate); |
56 | 57 | ||
57 | extern void cpm_load_patch(cpm8xx_t *cp); | 58 | extern void __init cpm_load_patch(cpm8xx_t *cp); |
58 | 59 | ||
59 | extern void cpm_reset(void); | 60 | extern void cpm_reset(void); |
60 | 61 | ||
diff --git a/arch/powerpc/kernel/fsl_booke_entry_mapping.S b/arch/powerpc/kernel/fsl_booke_entry_mapping.S index beb4d78a2304..a92c79be2728 100644 --- a/arch/powerpc/kernel/fsl_booke_entry_mapping.S +++ b/arch/powerpc/kernel/fsl_booke_entry_mapping.S | |||
@@ -205,8 +205,7 @@ next_tlb_setup: | |||
205 | bdnz+ next_tlb_setup | 205 | bdnz+ next_tlb_setup |
206 | 206 | ||
207 | /* 7. Jump to our 1:1 mapping */ | 207 | /* 7. Jump to our 1:1 mapping */ |
208 | li r6, 0 | 208 | mr r6, r25 |
209 | |||
210 | #else | 209 | #else |
211 | #error You need to specify the mapping or not use this at all. | 210 | #error You need to specify the mapping or not use this at all. |
212 | #endif | 211 | #endif |
@@ -217,7 +216,6 @@ next_tlb_setup: | |||
217 | 1: mflr r9 | 216 | 1: mflr r9 |
218 | rlwimi r6,r9,0,20,31 | 217 | rlwimi r6,r9,0,20,31 |
219 | addi r6,r6,(2f - 1b) | 218 | addi r6,r6,(2f - 1b) |
220 | add r6, r6, r25 | ||
221 | mtspr SPRN_SRR0,r6 | 219 | mtspr SPRN_SRR0,r6 |
222 | mtspr SPRN_SRR1,r7 | 220 | mtspr SPRN_SRR1,r7 |
223 | rfi /* start execution out of TLB1[0] entry */ | 221 | rfi /* start execution out of TLB1[0] entry */ |
diff --git a/arch/powerpc/sysdev/micropatch.c b/arch/powerpc/sysdev/micropatch.c index d8d602840757..c0bb76ef7242 100644 --- a/arch/powerpc/sysdev/micropatch.c +++ b/arch/powerpc/sysdev/micropatch.c | |||
@@ -4,6 +4,7 @@ | |||
4 | * also relocates SMC2, but this would require additional changes | 4 | * also relocates SMC2, but this would require additional changes |
5 | * to uart.c, so I am holding off on that for a moment. | 5 | * to uart.c, so I am holding off on that for a moment. |
6 | */ | 6 | */ |
7 | #include <linux/init.h> | ||
7 | #include <linux/errno.h> | 8 | #include <linux/errno.h> |
8 | #include <linux/sched.h> | 9 | #include <linux/sched.h> |
9 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
@@ -16,6 +17,7 @@ | |||
16 | #include <asm/page.h> | 17 | #include <asm/page.h> |
17 | #include <asm/pgtable.h> | 18 | #include <asm/pgtable.h> |
18 | #include <asm/8xx_immap.h> | 19 | #include <asm/8xx_immap.h> |
20 | #include <asm/cpm.h> | ||
19 | #include <asm/cpm1.h> | 21 | #include <asm/cpm1.h> |
20 | 22 | ||
21 | /* | 23 | /* |
@@ -24,7 +26,7 @@ | |||
24 | 26 | ||
25 | #ifdef CONFIG_I2C_SPI_UCODE_PATCH | 27 | #ifdef CONFIG_I2C_SPI_UCODE_PATCH |
26 | 28 | ||
27 | uint patch_2000[] = { | 29 | static uint patch_2000[] __initdata = { |
28 | 0x7FFFEFD9, | 30 | 0x7FFFEFD9, |
29 | 0x3FFD0000, | 31 | 0x3FFD0000, |
30 | 0x7FFB49F7, | 32 | 0x7FFB49F7, |
@@ -143,7 +145,7 @@ uint patch_2000[] = { | |||
143 | 0x5F8247F8 | 145 | 0x5F8247F8 |
144 | }; | 146 | }; |
145 | 147 | ||
146 | uint patch_2f00[] = { | 148 | static uint patch_2f00[] __initdata = { |
147 | 0x3E303430, | 149 | 0x3E303430, |
148 | 0x34343737, | 150 | 0x34343737, |
149 | 0xABF7BF9B, | 151 | 0xABF7BF9B, |
@@ -182,7 +184,7 @@ uint patch_2f00[] = { | |||
182 | 184 | ||
183 | #ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH | 185 | #ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH |
184 | 186 | ||
185 | uint patch_2000[] = { | 187 | static uint patch_2000[] __initdata = { |
186 | 0x3fff0000, | 188 | 0x3fff0000, |
187 | 0x3ffd0000, | 189 | 0x3ffd0000, |
188 | 0x3ffb0000, | 190 | 0x3ffb0000, |
@@ -505,7 +507,7 @@ uint patch_2000[] = { | |||
505 | 0x6079e2bb | 507 | 0x6079e2bb |
506 | }; | 508 | }; |
507 | 509 | ||
508 | uint patch_2f00[] = { | 510 | static uint patch_2f00[] __initdata = { |
509 | 0x30303030, | 511 | 0x30303030, |
510 | 0x3e3e3434, | 512 | 0x3e3e3434, |
511 | 0xabbf9b99, | 513 | 0xabbf9b99, |
@@ -572,7 +574,7 @@ uint patch_2f00[] = { | |||
572 | 0xf22f3f23 | 574 | 0xf22f3f23 |
573 | }; | 575 | }; |
574 | 576 | ||
575 | uint patch_2e00[] = { | 577 | static uint patch_2e00[] __initdata = { |
576 | 0x27eeeeee, | 578 | 0x27eeeeee, |
577 | 0xeeeeeeee, | 579 | 0xeeeeeeee, |
578 | 0xeeeeeeee, | 580 | 0xeeeeeeee, |
@@ -598,7 +600,7 @@ uint patch_2e00[] = { | |||
598 | 600 | ||
599 | #ifdef CONFIG_USB_SOF_UCODE_PATCH | 601 | #ifdef CONFIG_USB_SOF_UCODE_PATCH |
600 | 602 | ||
601 | uint patch_2000[] = { | 603 | static uint patch_2000[] __initdata = { |
602 | 0x7fff0000, | 604 | 0x7fff0000, |
603 | 0x7ffd0000, | 605 | 0x7ffd0000, |
604 | 0x7ffb0000, | 606 | 0x7ffb0000, |
@@ -613,21 +615,25 @@ uint patch_2000[] = { | |||
613 | 0x60750000 | 615 | 0x60750000 |
614 | }; | 616 | }; |
615 | 617 | ||
616 | uint patch_2f00[] = { | 618 | static uint patch_2f00[] __initdata = { |
617 | 0x3030304c, | 619 | 0x3030304c, |
618 | 0xcab9e441, | 620 | 0xcab9e441, |
619 | 0xa1aaf220 | 621 | 0xa1aaf220 |
620 | }; | 622 | }; |
621 | #endif | 623 | #endif |
622 | 624 | ||
623 | void | 625 | void __init cpm_load_patch(cpm8xx_t *cp) |
624 | cpm_load_patch(cpm8xx_t *cp) | ||
625 | { | 626 | { |
626 | volatile uint *dp; /* Dual-ported RAM. */ | 627 | volatile uint *dp; /* Dual-ported RAM. */ |
627 | volatile cpm8xx_t *commproc; | 628 | volatile cpm8xx_t *commproc; |
629 | #if defined(CONFIG_I2C_SPI_UCODE_PATCH) || \ | ||
630 | defined(CONFIG_I2C_SPI_SMC1_UCODE_PATCH) | ||
628 | volatile iic_t *iip; | 631 | volatile iic_t *iip; |
629 | volatile spi_t *spp; | 632 | volatile struct spi_pram *spp; |
633 | #ifdef CONFIG_I2C_SPI_SMC1_UCODE_PATCH | ||
630 | volatile smc_uart_t *smp; | 634 | volatile smc_uart_t *smp; |
635 | #endif | ||
636 | #endif | ||
631 | int i; | 637 | int i; |
632 | 638 | ||
633 | commproc = cp; | 639 | commproc = cp; |
@@ -668,8 +674,8 @@ cpm_load_patch(cpm8xx_t *cp) | |||
668 | /* Put SPI above the IIC, also 32-byte aligned. | 674 | /* Put SPI above the IIC, also 32-byte aligned. |
669 | */ | 675 | */ |
670 | i = (RPBASE + sizeof(iic_t) + 31) & ~31; | 676 | i = (RPBASE + sizeof(iic_t) + 31) & ~31; |
671 | spp = (spi_t *)&commproc->cp_dparam[PROFF_SPI]; | 677 | spp = (struct spi_pram *)&commproc->cp_dparam[PROFF_SPI]; |
672 | spp->spi_rpbase = i; | 678 | spp->rpbase = i; |
673 | 679 | ||
674 | # if defined(CONFIG_I2C_SPI_UCODE_PATCH) | 680 | # if defined(CONFIG_I2C_SPI_UCODE_PATCH) |
675 | commproc->cp_cpmcr1 = 0x802a; | 681 | commproc->cp_cpmcr1 = 0x802a; |