aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-powerpc')
-rw-r--r--include/asm-powerpc/feature-fixups.h68
-rw-r--r--include/asm-powerpc/reg.h2
-rw-r--r--include/asm-powerpc/timex.h2
3 files changed, 59 insertions, 13 deletions
diff --git a/include/asm-powerpc/feature-fixups.h b/include/asm-powerpc/feature-fixups.h
index 35f927888fe8..ab30129dced7 100644
--- a/include/asm-powerpc/feature-fixups.h
+++ b/include/asm-powerpc/feature-fixups.h
@@ -29,24 +29,35 @@
29#define FTR_ENTRY_OFFSET PPC_LONG 29#define FTR_ENTRY_OFFSET PPC_LONG
30#endif 30#endif
31 31
32#define START_FTR_SECTION(label) label##1:
33
34#define FTR_SECTION_ELSE_NESTED(label) \
35label##2: \
36 .pushsection __ftr_alt_##label,"a"; \
37 .align 2; \
38label##3:
39
32#define MAKE_FTR_SECTION_ENTRY(msk, val, label, sect) \ 40#define MAKE_FTR_SECTION_ENTRY(msk, val, label, sect) \
3399: \ 41label##4: \
34 .section sect,"a"; \ 42 .popsection; \
43 .pushsection sect,"a"; \
35 .align 3; \ 44 .align 3; \
3698: \ 45label##5: \
37 FTR_ENTRY_LONG msk; \ 46 FTR_ENTRY_LONG msk; \
38 FTR_ENTRY_LONG val; \ 47 FTR_ENTRY_LONG val; \
39 FTR_ENTRY_OFFSET label##b-98b; \ 48 FTR_ENTRY_OFFSET label##1b-label##5b; \
40 FTR_ENTRY_OFFSET 99b-98b; \ 49 FTR_ENTRY_OFFSET label##2b-label##5b; \
41 .previous 50 FTR_ENTRY_OFFSET label##3b-label##5b; \
42 51 FTR_ENTRY_OFFSET label##4b-label##5b; \
52 .popsection;
43 53
44 54
45/* CPU feature dependent sections */ 55/* CPU feature dependent sections */
46#define BEGIN_FTR_SECTION_NESTED(label) label: 56#define BEGIN_FTR_SECTION_NESTED(label) START_FTR_SECTION(label)
47#define BEGIN_FTR_SECTION BEGIN_FTR_SECTION_NESTED(97) 57#define BEGIN_FTR_SECTION START_FTR_SECTION(97)
48 58
49#define END_FTR_SECTION_NESTED(msk, val, label) \ 59#define END_FTR_SECTION_NESTED(msk, val, label) \
60 FTR_SECTION_ELSE_NESTED(label) \
50 MAKE_FTR_SECTION_ENTRY(msk, val, label, __ftr_fixup) 61 MAKE_FTR_SECTION_ENTRY(msk, val, label, __ftr_fixup)
51 62
52#define END_FTR_SECTION(msk, val) \ 63#define END_FTR_SECTION(msk, val) \
@@ -55,12 +66,27 @@
55#define END_FTR_SECTION_IFSET(msk) END_FTR_SECTION((msk), (msk)) 66#define END_FTR_SECTION_IFSET(msk) END_FTR_SECTION((msk), (msk))
56#define END_FTR_SECTION_IFCLR(msk) END_FTR_SECTION((msk), 0) 67#define END_FTR_SECTION_IFCLR(msk) END_FTR_SECTION((msk), 0)
57 68
69/* CPU feature sections with alternatives, use BEGIN_FTR_SECTION to start */
70#define FTR_SECTION_ELSE FTR_SECTION_ELSE_NESTED(97)
71#define ALT_FTR_SECTION_END_NESTED(msk, val, label) \
72 MAKE_FTR_SECTION_ENTRY(msk, val, label, __ftr_fixup)
73#define ALT_FTR_SECTION_END_NESTED_IFSET(msk, label) \
74 ALT_FTR_SECTION_END_NESTED(msk, msk, label)
75#define ALT_FTR_SECTION_END_NESTED_IFCLR(msk, label) \
76 ALT_FTR_SECTION_END_NESTED(msk, 0, label)
77#define ALT_FTR_SECTION_END(msk, val) \
78 ALT_FTR_SECTION_END_NESTED(msk, val, 97)
79#define ALT_FTR_SECTION_END_IFSET(msk) \
80 ALT_FTR_SECTION_END_NESTED_IFSET(msk, 97)
81#define ALT_FTR_SECTION_END_IFCLR(msk) \
82 ALT_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
58 83
59/* Firmware feature dependent sections */ 84/* Firmware feature dependent sections */
60#define BEGIN_FW_FTR_SECTION_NESTED(label) label: 85#define BEGIN_FW_FTR_SECTION_NESTED(label) START_FTR_SECTION(label)
61#define BEGIN_FW_FTR_SECTION BEGIN_FW_FTR_SECTION_NESTED(97) 86#define BEGIN_FW_FTR_SECTION START_FTR_SECTION(97)
62 87
63#define END_FW_FTR_SECTION_NESTED(msk, val, label) \ 88#define END_FW_FTR_SECTION_NESTED(msk, val, label) \
89 FTR_SECTION_ELSE_NESTED(label) \
64 MAKE_FTR_SECTION_ENTRY(msk, val, label, __fw_ftr_fixup) 90 MAKE_FTR_SECTION_ENTRY(msk, val, label, __fw_ftr_fixup)
65 91
66#define END_FW_FTR_SECTION(msk, val) \ 92#define END_FW_FTR_SECTION(msk, val) \
@@ -69,6 +95,22 @@
69#define END_FW_FTR_SECTION_IFSET(msk) END_FW_FTR_SECTION((msk), (msk)) 95#define END_FW_FTR_SECTION_IFSET(msk) END_FW_FTR_SECTION((msk), (msk))
70#define END_FW_FTR_SECTION_IFCLR(msk) END_FW_FTR_SECTION((msk), 0) 96#define END_FW_FTR_SECTION_IFCLR(msk) END_FW_FTR_SECTION((msk), 0)
71 97
98/* Firmware feature sections with alternatives */
99#define FW_FTR_SECTION_ELSE_NESTED(label) FTR_SECTION_ELSE_NESTED(label)
100#define FW_FTR_SECTION_ELSE FTR_SECTION_ELSE_NESTED(97)
101#define ALT_FW_FTR_SECTION_END_NESTED(msk, val, label) \
102 MAKE_FTR_SECTION_ENTRY(msk, val, label, __fw_ftr_fixup)
103#define ALT_FW_FTR_SECTION_END_NESTED_IFSET(msk, label) \
104 ALT_FW_FTR_SECTION_END_NESTED(msk, msk, label)
105#define ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, label) \
106 ALT_FW_FTR_SECTION_END_NESTED(msk, 0, label)
107#define ALT_FW_FTR_SECTION_END(msk, val) \
108 ALT_FW_FTR_SECTION_END_NESTED(msk, val, 97)
109#define ALT_FW_FTR_SECTION_END_IFSET(msk) \
110 ALT_FW_FTR_SECTION_END_NESTED_IFSET(msk, 97)
111#define ALT_FW_FTR_SECTION_END_IFCLR(msk) \
112 ALT_FW_FTR_SECTION_END_NESTED_IFCLR(msk, 97)
113
72#endif /* __ASSEMBLY__ */ 114#endif /* __ASSEMBLY__ */
73 115
74#endif /* __ASM_POWERPC_FEATURE_FIXUPS_H */ 116#endif /* __ASM_POWERPC_FEATURE_FIXUPS_H */
diff --git a/include/asm-powerpc/reg.h b/include/asm-powerpc/reg.h
index 079999b032af..7256efb5c140 100644
--- a/include/asm-powerpc/reg.h
+++ b/include/asm-powerpc/reg.h
@@ -732,6 +732,8 @@
732 " .llong %1\n" \ 732 " .llong %1\n" \
733 " .llong 97b-98b\n" \ 733 " .llong 97b-98b\n" \
734 " .llong 99b-98b\n" \ 734 " .llong 99b-98b\n" \
735 " .llong 0\n" \
736 " .llong 0\n" \
735 ".previous" \ 737 ".previous" \
736 : "=r" (rval) : "i" (CPU_FTR_CELL_TB_BUG)); rval;}) 738 : "=r" (rval) : "i" (CPU_FTR_CELL_TB_BUG)); rval;})
737#else 739#else
diff --git a/include/asm-powerpc/timex.h b/include/asm-powerpc/timex.h
index 92dedde761d1..c55e14f7ef44 100644
--- a/include/asm-powerpc/timex.h
+++ b/include/asm-powerpc/timex.h
@@ -38,6 +38,8 @@ static inline cycles_t get_cycles(void)
38 " .long 0\n" 38 " .long 0\n"
39 " .long 97b-98b\n" 39 " .long 97b-98b\n"
40 " .long 99b-98b\n" 40 " .long 99b-98b\n"
41 " .long 0\n"
42 " .long 0\n"
41 ".previous" 43 ".previous"
42 : "=r" (ret) : "i" (CPU_FTR_601)); 44 : "=r" (ret) : "i" (CPU_FTR_601));
43 return ret; 45 return ret;