Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: (67 commits) [PATCH] powerpc: Remove oprofile spinlock backtrace code [PATCH] powerpc: Add oprofile calltrace support to all powerpc cpus [PATCH] powerpc: Add oprofile calltrace support [PATCH] for_each_possible_cpu: ppc [PATCH] for_each_possible_cpu: powerpc [PATCH] lock PTE before updating it in 440/BookE page fault handler [PATCH] powerpc: Kill _machine and hard-coded platform numbers ppc: Fix compile error in arch/ppc/lib/strcase.c [PATCH] git-powerpc: WARN was a dumb idea [PATCH] powerpc: a couple of trivial compile warning fixes powerpc: remove OCP references powerpc: Make uImage default build output for MPC8540 ADS powerpc: move math-emu over to arch/powerpc powerpc: use memparse() for mem= command line parsing ppc: fix strncasecmp prototype [PATCH] powerpc: make ISA floppies work again [PATCH] powerpc: Fix some initcall return values [PATCH] powerpc: Workaround for pSeries RTAS bug [PATCH] spufs: fix __init/__exit annotations [PATCH] powerpc: add hvc backend for rtas ...
This commit is contained in:
@@ -30,34 +30,60 @@ struct bug_entry *find_bug(unsigned long bugaddr);
|
||||
|
||||
#ifdef CONFIG_BUG
|
||||
|
||||
/*
|
||||
* BUG_ON() and WARN_ON() do their best to cooperate with compile-time
|
||||
* optimisations. However depending on the complexity of the condition
|
||||
* some compiler versions may not produce optimal results.
|
||||
*/
|
||||
|
||||
#define BUG() do { \
|
||||
__asm__ __volatile__( \
|
||||
"1: twi 31,0,0\n" \
|
||||
".section __bug_table,\"a\"\n" \
|
||||
"\t"PPC_LONG" 1b,%0,%1,%2\n" \
|
||||
"\t"PPC_LONG" 1b,%0,%1,%2\n" \
|
||||
".previous" \
|
||||
: : "i" (__LINE__), "i" (__FILE__), "i" (__FUNCTION__)); \
|
||||
} while (0)
|
||||
|
||||
#define BUG_ON(x) do { \
|
||||
__asm__ __volatile__( \
|
||||
if (__builtin_constant_p(x)) { \
|
||||
if (x) \
|
||||
BUG(); \
|
||||
} else { \
|
||||
__asm__ __volatile__( \
|
||||
"1: "PPC_TLNEI" %0,0\n" \
|
||||
".section __bug_table,\"a\"\n" \
|
||||
"\t"PPC_LONG" 1b,%1,%2,%3\n" \
|
||||
"\t"PPC_LONG" 1b,%1,%2,%3\n" \
|
||||
".previous" \
|
||||
: : "r" ((long)(x)), "i" (__LINE__), \
|
||||
"i" (__FILE__), "i" (__FUNCTION__)); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define __WARN() do { \
|
||||
__asm__ __volatile__( \
|
||||
"1: twi 31,0,0\n" \
|
||||
".section __bug_table,\"a\"\n" \
|
||||
"\t"PPC_LONG" 1b,%0,%1,%2\n" \
|
||||
".previous" \
|
||||
: : "i" (__LINE__ + BUG_WARNING_TRAP), \
|
||||
"i" (__FILE__), "i" (__FUNCTION__)); \
|
||||
} while (0)
|
||||
|
||||
#define WARN_ON(x) do { \
|
||||
__asm__ __volatile__( \
|
||||
if (__builtin_constant_p(x)) { \
|
||||
if (x) \
|
||||
__WARN(); \
|
||||
} else { \
|
||||
__asm__ __volatile__( \
|
||||
"1: "PPC_TLNEI" %0,0\n" \
|
||||
".section __bug_table,\"a\"\n" \
|
||||
"\t"PPC_LONG" 1b,%1,%2,%3\n" \
|
||||
"\t"PPC_LONG" 1b,%1,%2,%3\n" \
|
||||
".previous" \
|
||||
: : "r" ((long)(x)), \
|
||||
"i" (__LINE__ + BUG_WARNING_TRAP), \
|
||||
"i" (__FILE__), "i" (__FUNCTION__)); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define HAVE_ARCH_BUG
|
||||
|
||||
@@ -188,153 +188,154 @@ extern void do_cpu_ftr_fixups(unsigned long offset);
|
||||
!defined(CONFIG_POWER3) && !defined(CONFIG_POWER4) && \
|
||||
!defined(CONFIG_BOOKE))
|
||||
|
||||
enum {
|
||||
CPU_FTRS_PPC601 = CPU_FTR_COMMON | CPU_FTR_601 | CPU_FTR_HPTE_TABLE,
|
||||
CPU_FTRS_603 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_MAYBE_CAN_NAP,
|
||||
CPU_FTRS_604 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB | CPU_FTR_604_PERF_MON | CPU_FTR_HPTE_TABLE,
|
||||
CPU_FTRS_740_NOTAU = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP,
|
||||
CPU_FTRS_740 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR |
|
||||
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP,
|
||||
CPU_FTRS_750 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR |
|
||||
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP,
|
||||
CPU_FTRS_750FX1 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR |
|
||||
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP |
|
||||
CPU_FTR_DUAL_PLL_750FX | CPU_FTR_NO_DPM,
|
||||
CPU_FTRS_750FX2 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR |
|
||||
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP |
|
||||
CPU_FTR_NO_DPM,
|
||||
CPU_FTRS_750FX = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR |
|
||||
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP |
|
||||
CPU_FTR_DUAL_PLL_750FX | CPU_FTR_HAS_HIGH_BATS,
|
||||
CPU_FTRS_750GX = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE |
|
||||
CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_TAU |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP |
|
||||
CPU_FTR_DUAL_PLL_750FX | CPU_FTR_HAS_HIGH_BATS,
|
||||
CPU_FTRS_7400_NOTAU = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR |
|
||||
CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE |
|
||||
CPU_FTR_MAYBE_CAN_NAP,
|
||||
CPU_FTRS_7400 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR |
|
||||
CPU_FTR_TAU | CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE |
|
||||
CPU_FTR_MAYBE_CAN_NAP,
|
||||
CPU_FTRS_7450_20 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP |
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
|
||||
CPU_FTR_NEED_COHERENT,
|
||||
CPU_FTRS_7450_21 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB |
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP |
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP |
|
||||
CPU_FTR_NEED_COHERENT,
|
||||
CPU_FTRS_7450_23 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB |
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP |
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_NEED_COHERENT,
|
||||
CPU_FTRS_7455_1 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB |
|
||||
CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_HAS_HIGH_BATS |
|
||||
CPU_FTR_NEED_COHERENT,
|
||||
CPU_FTRS_7455_20 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB |
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP |
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP |
|
||||
CPU_FTR_NEED_COHERENT | CPU_FTR_HAS_HIGH_BATS,
|
||||
CPU_FTRS_7455 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB |
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP |
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS |
|
||||
CPU_FTR_NEED_COHERENT,
|
||||
CPU_FTRS_7447_10 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB |
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP |
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS |
|
||||
CPU_FTR_NEED_COHERENT | CPU_FTR_NO_BTIC,
|
||||
CPU_FTRS_7447 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB |
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP |
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS |
|
||||
CPU_FTR_NEED_COHERENT,
|
||||
CPU_FTRS_7447A = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB |
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS |
|
||||
CPU_FTR_NEED_COHERENT,
|
||||
CPU_FTRS_82XX = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB,
|
||||
CPU_FTRS_G2_LE = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE |
|
||||
CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS,
|
||||
CPU_FTRS_E300 = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE |
|
||||
CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS |
|
||||
CPU_FTR_COMMON,
|
||||
CPU_FTRS_CLASSIC32 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE,
|
||||
CPU_FTRS_POWER3_32 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE,
|
||||
CPU_FTRS_POWER4_32 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE | CPU_FTR_NODSISRALIGN,
|
||||
CPU_FTRS_970_32 = CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE |
|
||||
CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE | CPU_FTR_ALTIVEC_COMP |
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_NODSISRALIGN,
|
||||
CPU_FTRS_8XX = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB,
|
||||
CPU_FTRS_40X = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_NODSISRALIGN,
|
||||
CPU_FTRS_44X = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_NODSISRALIGN,
|
||||
CPU_FTRS_E200 = CPU_FTR_USE_TB | CPU_FTR_NODSISRALIGN,
|
||||
CPU_FTRS_E500 = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_NODSISRALIGN,
|
||||
CPU_FTRS_E500_2 = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_BIG_PHYS | CPU_FTR_NODSISRALIGN,
|
||||
CPU_FTRS_GENERIC_32 = CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN,
|
||||
#define CPU_FTRS_PPC601 (CPU_FTR_COMMON | CPU_FTR_601 | CPU_FTR_HPTE_TABLE)
|
||||
#define CPU_FTRS_603 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_MAYBE_CAN_NAP)
|
||||
#define CPU_FTRS_604 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | CPU_FTR_604_PERF_MON | CPU_FTR_HPTE_TABLE)
|
||||
#define CPU_FTRS_740_NOTAU (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP)
|
||||
#define CPU_FTRS_740 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
|
||||
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP)
|
||||
#define CPU_FTRS_750 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
|
||||
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP)
|
||||
#define CPU_FTRS_750FX1 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
|
||||
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \
|
||||
CPU_FTR_DUAL_PLL_750FX | CPU_FTR_NO_DPM)
|
||||
#define CPU_FTRS_750FX2 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
|
||||
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \
|
||||
CPU_FTR_NO_DPM)
|
||||
#define CPU_FTRS_750FX (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
|
||||
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \
|
||||
CPU_FTR_DUAL_PLL_750FX | CPU_FTR_HAS_HIGH_BATS)
|
||||
#define CPU_FTRS_750GX (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE | \
|
||||
CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_TAU | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \
|
||||
CPU_FTR_DUAL_PLL_750FX | CPU_FTR_HAS_HIGH_BATS)
|
||||
#define CPU_FTRS_7400_NOTAU (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
|
||||
CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | \
|
||||
CPU_FTR_MAYBE_CAN_NAP)
|
||||
#define CPU_FTRS_7400 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
|
||||
CPU_FTR_TAU | CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | \
|
||||
CPU_FTR_MAYBE_CAN_NAP)
|
||||
#define CPU_FTRS_7450_20 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \
|
||||
CPU_FTR_NEED_COHERENT)
|
||||
#define CPU_FTRS_7450_21 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | \
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | \
|
||||
CPU_FTR_NEED_COHERENT)
|
||||
#define CPU_FTRS_7450_23 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | \
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_NEED_COHERENT)
|
||||
#define CPU_FTRS_7455_1 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | \
|
||||
CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_HAS_HIGH_BATS | \
|
||||
CPU_FTR_NEED_COHERENT)
|
||||
#define CPU_FTRS_7455_20 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | \
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | \
|
||||
CPU_FTR_NEED_COHERENT | CPU_FTR_HAS_HIGH_BATS)
|
||||
#define CPU_FTRS_7455 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | \
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \
|
||||
CPU_FTR_NEED_COHERENT)
|
||||
#define CPU_FTRS_7447_10 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | \
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \
|
||||
CPU_FTR_NEED_COHERENT | CPU_FTR_NO_BTIC)
|
||||
#define CPU_FTRS_7447 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | \
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \
|
||||
CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \
|
||||
CPU_FTR_NEED_COHERENT)
|
||||
#define CPU_FTRS_7447A (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | \
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \
|
||||
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \
|
||||
CPU_FTR_NEED_COHERENT)
|
||||
#define CPU_FTRS_82XX (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB)
|
||||
#define CPU_FTRS_G2_LE (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE | \
|
||||
CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS)
|
||||
#define CPU_FTRS_E300 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE | \
|
||||
CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS | \
|
||||
CPU_FTR_COMMON)
|
||||
#define CPU_FTRS_CLASSIC32 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE)
|
||||
#define CPU_FTRS_POWER3_32 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE)
|
||||
#define CPU_FTRS_POWER4_32 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE | CPU_FTR_NODSISRALIGN)
|
||||
#define CPU_FTRS_970_32 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \
|
||||
CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE | CPU_FTR_ALTIVEC_COMP | \
|
||||
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_NODSISRALIGN)
|
||||
#define CPU_FTRS_8XX (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB)
|
||||
#define CPU_FTRS_40X (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_NODSISRALIGN)
|
||||
#define CPU_FTRS_44X (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_NODSISRALIGN)
|
||||
#define CPU_FTRS_E200 (CPU_FTR_USE_TB | CPU_FTR_NODSISRALIGN)
|
||||
#define CPU_FTRS_E500 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_NODSISRALIGN)
|
||||
#define CPU_FTRS_E500_2 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_BIG_PHYS | CPU_FTR_NODSISRALIGN)
|
||||
#define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN)
|
||||
#ifdef __powerpc64__
|
||||
CPU_FTRS_POWER3 = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_IABR,
|
||||
CPU_FTRS_RS64 = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_IABR |
|
||||
CPU_FTR_MMCRA | CPU_FTR_CTRL,
|
||||
CPU_FTRS_POWER4 = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_MMCRA,
|
||||
CPU_FTRS_PPC970 = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 |
|
||||
CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA,
|
||||
CPU_FTRS_POWER5 = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 |
|
||||
CPU_FTR_MMCRA | CPU_FTR_SMT |
|
||||
CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE |
|
||||
CPU_FTR_MMCRA_SIHV | CPU_FTR_PURR,
|
||||
CPU_FTRS_CELL = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 |
|
||||
CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT |
|
||||
CPU_FTR_CTRL | CPU_FTR_PAUSE_ZERO,
|
||||
CPU_FTRS_COMPATIBLE = CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2,
|
||||
#define CPU_FTRS_POWER3 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_IABR)
|
||||
#define CPU_FTRS_RS64 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | \
|
||||
CPU_FTR_MMCRA | CPU_FTR_CTRL)
|
||||
#define CPU_FTRS_POWER4 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_MMCRA)
|
||||
#define CPU_FTRS_PPC970 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \
|
||||
CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA)
|
||||
#define CPU_FTRS_POWER5 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \
|
||||
CPU_FTR_MMCRA | CPU_FTR_SMT | \
|
||||
CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \
|
||||
CPU_FTR_MMCRA_SIHV | CPU_FTR_PURR)
|
||||
#define CPU_FTRS_CELL (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \
|
||||
CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \
|
||||
CPU_FTR_CTRL | CPU_FTR_PAUSE_ZERO)
|
||||
#define CPU_FTRS_COMPATIBLE (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \
|
||||
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2)
|
||||
#endif
|
||||
|
||||
CPU_FTRS_POSSIBLE =
|
||||
#ifdef __powerpc64__
|
||||
CPU_FTRS_POWER3 | CPU_FTRS_RS64 | CPU_FTRS_POWER4 |
|
||||
CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | CPU_FTRS_CELL |
|
||||
CPU_FTR_CI_LARGE_PAGE |
|
||||
#define CPU_FTRS_POSSIBLE \
|
||||
(CPU_FTRS_POWER3 | CPU_FTRS_RS64 | CPU_FTRS_POWER4 | \
|
||||
CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | CPU_FTRS_CELL | \
|
||||
CPU_FTR_CI_LARGE_PAGE)
|
||||
#else
|
||||
enum {
|
||||
CPU_FTRS_POSSIBLE =
|
||||
#if CLASSIC_PPC
|
||||
CPU_FTRS_PPC601 | CPU_FTRS_603 | CPU_FTRS_604 | CPU_FTRS_740_NOTAU |
|
||||
CPU_FTRS_740 | CPU_FTRS_750 | CPU_FTRS_750FX1 |
|
||||
@@ -368,14 +369,18 @@ enum {
|
||||
#ifdef CONFIG_E500
|
||||
CPU_FTRS_E500 | CPU_FTRS_E500_2 |
|
||||
#endif
|
||||
#endif /* __powerpc64__ */
|
||||
0,
|
||||
};
|
||||
#endif /* __powerpc64__ */
|
||||
|
||||
CPU_FTRS_ALWAYS =
|
||||
#ifdef __powerpc64__
|
||||
CPU_FTRS_POWER3 & CPU_FTRS_RS64 & CPU_FTRS_POWER4 &
|
||||
CPU_FTRS_PPC970 & CPU_FTRS_POWER5 & CPU_FTRS_CELL &
|
||||
#define CPU_FTRS_ALWAYS \
|
||||
(CPU_FTRS_POWER3 & CPU_FTRS_RS64 & CPU_FTRS_POWER4 & \
|
||||
CPU_FTRS_PPC970 & CPU_FTRS_POWER5 & CPU_FTRS_CELL & \
|
||||
CPU_FTRS_POSSIBLE)
|
||||
#else
|
||||
enum {
|
||||
CPU_FTRS_ALWAYS =
|
||||
#if CLASSIC_PPC
|
||||
CPU_FTRS_PPC601 & CPU_FTRS_603 & CPU_FTRS_604 & CPU_FTRS_740_NOTAU &
|
||||
CPU_FTRS_740 & CPU_FTRS_750 & CPU_FTRS_750FX1 &
|
||||
@@ -409,9 +414,9 @@ enum {
|
||||
#ifdef CONFIG_E500
|
||||
CPU_FTRS_E500 & CPU_FTRS_E500_2 &
|
||||
#endif
|
||||
#endif /* __powerpc64__ */
|
||||
CPU_FTRS_POSSIBLE,
|
||||
};
|
||||
#endif /* __powerpc64__ */
|
||||
|
||||
static inline int cpu_has_feature(unsigned long feature)
|
||||
{
|
||||
|
||||
@@ -82,13 +82,11 @@ enum {
|
||||
/* This is used to identify firmware features which are available
|
||||
* to the kernel.
|
||||
*/
|
||||
extern unsigned long ppc64_firmware_features;
|
||||
extern unsigned long powerpc_firmware_features;
|
||||
|
||||
static inline unsigned long firmware_has_feature(unsigned long feature)
|
||||
{
|
||||
return (FW_FEATURE_ALWAYS & feature) ||
|
||||
(FW_FEATURE_POSSIBLE & ppc64_firmware_features & feature);
|
||||
}
|
||||
#define firmware_has_feature(feature) \
|
||||
((FW_FEATURE_ALWAYS & (feature)) || \
|
||||
(FW_FEATURE_POSSIBLE & powerpc_firmware_features & (feature)))
|
||||
|
||||
extern void system_reset_fwnmi(void);
|
||||
extern void machine_check_fwnmi(void);
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
#ifdef CONFIG_PCI
|
||||
|
||||
#include <linux/pci.h>
|
||||
#include <asm/ppc-pci.h> /* for ppc64_isabridge_dev */
|
||||
|
||||
#define fd_dma_setup(addr,size,mode,io) powerpc_fd_dma_setup(addr,size,mode,io)
|
||||
|
||||
@@ -52,12 +53,12 @@ static __inline__ int powerpc_fd_dma_setup(char *addr, unsigned long size,
|
||||
if (bus_addr
|
||||
&& (addr != prev_addr || size != prev_size || dir != prev_dir)) {
|
||||
/* different from last time -- unmap prev */
|
||||
pci_unmap_single(NULL, bus_addr, prev_size, prev_dir);
|
||||
pci_unmap_single(ppc64_isabridge_dev, bus_addr, prev_size, prev_dir);
|
||||
bus_addr = 0;
|
||||
}
|
||||
|
||||
if (!bus_addr) /* need to map it */
|
||||
bus_addr = pci_map_single(NULL, addr, size, dir);
|
||||
bus_addr = pci_map_single(ppc64_isabridge_dev, addr, size, dir);
|
||||
|
||||
/* remember this one as prev */
|
||||
prev_addr = addr;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#define H_Closed 2 /* Resource closed */
|
||||
#define H_Constrained 4 /* Resource request constrained to max allowed */
|
||||
#define H_InProgress 14 /* Kind of like busy */
|
||||
#define H_Pending 17 /* returned from H_POLL_PENDING */
|
||||
#define H_Continue 18 /* Returned from H_Join on success */
|
||||
#define H_LongBusyStartRange 9900 /* Start of long busy range */
|
||||
#define H_LongBusyOrder1msec 9900 /* Long busy, hint that 1msec is a good time to retry */
|
||||
|
||||
@@ -24,28 +24,18 @@
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/*
|
||||
* This is the max number of console adapters that can/will be found as
|
||||
* console devices on first stage console init. Any number beyond this range
|
||||
* can't be used as a console device but is still a valid tty device.
|
||||
* PSeries firmware will only send/recv up to 16 bytes of character data per
|
||||
* hcall.
|
||||
*/
|
||||
#define MAX_NR_HVC_CONSOLES 16
|
||||
#define MAX_VIO_PUT_CHARS 16
|
||||
#define SIZE_VIO_GET_CHARS 16
|
||||
|
||||
/* implemented by a low level driver */
|
||||
struct hv_ops {
|
||||
int (*get_chars)(uint32_t vtermno, char *buf, int count);
|
||||
int (*put_chars)(uint32_t vtermno, const char *buf, int count);
|
||||
};
|
||||
/*
|
||||
* Vio firmware always attempts to fetch MAX_VIO_GET_CHARS chars. The 'count'
|
||||
* parm is included to conform to put_chars() function pointer template
|
||||
*/
|
||||
extern int hvc_get_chars(uint32_t vtermno, char *buf, int count);
|
||||
extern int hvc_put_chars(uint32_t vtermno, const char *buf, int count);
|
||||
|
||||
struct hvc_struct;
|
||||
|
||||
/* Register a vterm and a slot index for use as a console (console_init) */
|
||||
extern int hvc_instantiate(uint32_t vtermno, int index, struct hv_ops *ops);
|
||||
/* register a vterm for hvc tty operation (module_init or hotplug add) */
|
||||
extern struct hvc_struct * __devinit hvc_alloc(uint32_t vtermno, int irq,
|
||||
struct hv_ops *ops);
|
||||
/* remove a vterm from hvc tty operation (modele_exit or hotplug remove) */
|
||||
extern int __devexit hvc_remove(struct hvc_struct *hp);
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _PPC64_HVCONSOLE_H */
|
||||
|
||||
@@ -47,6 +47,7 @@ struct smp_ops_t {
|
||||
#endif
|
||||
|
||||
struct machdep_calls {
|
||||
char *name;
|
||||
#ifdef CONFIG_PPC64
|
||||
void (*hpte_invalidate)(unsigned long slot,
|
||||
unsigned long va,
|
||||
@@ -85,9 +86,9 @@ struct machdep_calls {
|
||||
void (*iommu_dev_setup)(struct pci_dev *dev);
|
||||
void (*iommu_bus_setup)(struct pci_bus *bus);
|
||||
void (*irq_bus_setup)(struct pci_bus *bus);
|
||||
#endif
|
||||
#endif /* CONFIG_PPC64 */
|
||||
|
||||
int (*probe)(int platform);
|
||||
int (*probe)(void);
|
||||
void (*setup_arch)(void);
|
||||
void (*init_early)(void);
|
||||
/* Optional, may be NULL. */
|
||||
@@ -158,6 +159,12 @@ struct machdep_calls {
|
||||
/* Idle loop for this platform, leave empty for default idle loop */
|
||||
void (*idle_loop)(void);
|
||||
|
||||
/*
|
||||
* Function for waiting for work with reduced power in idle loop;
|
||||
* called with interrupts disabled.
|
||||
*/
|
||||
void (*power_save)(void);
|
||||
|
||||
/* Function to enable performance monitor counters for this
|
||||
platform, called once per cpu. */
|
||||
void (*enable_pmcs)(void);
|
||||
@@ -170,13 +177,6 @@ struct machdep_calls {
|
||||
May be NULL. */
|
||||
void (*init)(void);
|
||||
|
||||
void (*idle)(void);
|
||||
void (*power_save)(void);
|
||||
|
||||
void (*heartbeat)(void);
|
||||
unsigned long heartbeat_reset;
|
||||
unsigned long heartbeat_count;
|
||||
|
||||
void (*setup_io_mappings)(void);
|
||||
|
||||
void (*early_serial_map)(void);
|
||||
@@ -208,8 +208,6 @@ struct machdep_calls {
|
||||
/* Called at then very end of pcibios_init() */
|
||||
void (*pcibios_after_init)(void);
|
||||
|
||||
/* this is for modules, since _machine can be a define -- Cort */
|
||||
int ppc_machine;
|
||||
#endif /* CONFIG_PPC32 */
|
||||
|
||||
/* Called to shutdown machine specific hardware not already controlled
|
||||
@@ -242,10 +240,29 @@ struct machdep_calls {
|
||||
#endif /* CONFIG_KEXEC */
|
||||
};
|
||||
|
||||
extern void default_idle(void);
|
||||
extern void native_idle(void);
|
||||
extern void power4_idle(void);
|
||||
extern void ppc6xx_idle(void);
|
||||
|
||||
/*
|
||||
* ppc_md contains a copy of the machine description structure for the
|
||||
* current platform. machine_id contains the initial address where the
|
||||
* description was found during boot.
|
||||
*/
|
||||
extern struct machdep_calls ppc_md;
|
||||
extern struct machdep_calls *machine_id;
|
||||
|
||||
#define __machine_desc __attribute__ ((__section__ (".machine.desc")))
|
||||
|
||||
#define define_machine(name) struct machdep_calls mach_##name __machine_desc =
|
||||
#define machine_is(name) \
|
||||
({ \
|
||||
extern struct machdep_calls mach_##name \
|
||||
__attribute__((weak)); \
|
||||
machine_id == &mach_##name; \
|
||||
})
|
||||
|
||||
extern void probe_machine(void);
|
||||
|
||||
extern char cmd_line[COMMAND_LINE_SIZE];
|
||||
|
||||
#ifdef CONFIG_PPC_PMAC
|
||||
|
||||
@@ -17,9 +17,6 @@
|
||||
|
||||
/* Per-counter configuration as set via oprofilefs. */
|
||||
struct op_counter_config {
|
||||
#ifdef __powerpc64__
|
||||
unsigned long valid;
|
||||
#endif
|
||||
unsigned long enabled;
|
||||
unsigned long event;
|
||||
unsigned long count;
|
||||
@@ -38,9 +35,6 @@ struct op_system_config {
|
||||
#endif
|
||||
unsigned long enable_kernel;
|
||||
unsigned long enable_user;
|
||||
#ifdef CONFIG_PPC64
|
||||
unsigned long backtrace_spinlocks;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Per-arch configuration */
|
||||
@@ -56,17 +50,12 @@ struct op_powerpc_model {
|
||||
int num_counters;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FSL_BOOKE
|
||||
extern struct op_powerpc_model op_model_fsl_booke;
|
||||
#else /* Otherwise, it's classic */
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
extern struct op_powerpc_model op_model_rs64;
|
||||
extern struct op_powerpc_model op_model_power4;
|
||||
|
||||
#else /* Otherwise, CONFIG_PPC32 */
|
||||
extern struct op_powerpc_model op_model_7450;
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_FSL_BOOKE
|
||||
|
||||
/* All the classic PPC parts use these */
|
||||
static inline unsigned int ctr_read(unsigned int i)
|
||||
@@ -134,5 +123,7 @@ static inline void ctr_write(unsigned int i, unsigned int val)
|
||||
}
|
||||
#endif /* !CONFIG_FSL_BOOKE */
|
||||
|
||||
extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_OPROFILE_IMPL_H */
|
||||
|
||||
@@ -105,5 +105,7 @@ struct paca_struct {
|
||||
|
||||
extern struct paca_struct paca[];
|
||||
|
||||
void setup_boot_paca(void);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_PACA_H */
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#define percpu_modcopy(pcpudst, src, size) \
|
||||
do { \
|
||||
unsigned int __i; \
|
||||
for_each_cpu(__i) \
|
||||
for_each_possible_cpu(__i) \
|
||||
memcpy((pcpudst)+__per_cpu_offset(__i), \
|
||||
(src), (size)); \
|
||||
} while (0)
|
||||
|
||||
@@ -305,7 +305,7 @@ extern void pmac_feature_init(void);
|
||||
extern void pmac_set_early_video_resume(void (*proc)(void *data), void *data);
|
||||
extern void pmac_call_early_video_resume(void);
|
||||
|
||||
#define PMAC_FTR_DEF(x) ((_MACH_Pmac << 16) | (x))
|
||||
#define PMAC_FTR_DEF(x) ((0x6660000) | (x))
|
||||
|
||||
/* The AGP driver registers itself here */
|
||||
extern void pmac_register_agp_pm(struct pci_dev *bridge,
|
||||
|
||||
@@ -22,22 +22,6 @@
|
||||
* -- BenH.
|
||||
*/
|
||||
|
||||
/* Platforms codes (to be obsoleted) */
|
||||
#define PLATFORM_PSERIES 0x0100
|
||||
#define PLATFORM_PSERIES_LPAR 0x0101
|
||||
#define PLATFORM_ISERIES_LPAR 0x0201
|
||||
#define PLATFORM_LPAR 0x0001
|
||||
#define PLATFORM_POWERMAC 0x0400
|
||||
#define PLATFORM_MAPLE 0x0500
|
||||
#define PLATFORM_PREP 0x0600
|
||||
#define PLATFORM_CHRP 0x0700
|
||||
#define PLATFORM_CELL 0x1000
|
||||
|
||||
/* Compat platform codes for 32 bits */
|
||||
#define _MACH_prep PLATFORM_PREP
|
||||
#define _MACH_Pmac PLATFORM_POWERMAC
|
||||
#define _MACH_chrp PLATFORM_CHRP
|
||||
|
||||
/* PREP sub-platform types see residual.h for these */
|
||||
#define _PREP_Motorola 0x01 /* motorola prep */
|
||||
#define _PREP_Firm 0x02 /* firmworks prep */
|
||||
@@ -49,18 +33,14 @@
|
||||
#define _CHRP_IBM 0x05 /* IBM chrp, the longtrail and longtrail 2 */
|
||||
#define _CHRP_Pegasos 0x06 /* Genesi/bplan's Pegasos and Pegasos2 */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define platform_is_pseries() (_machine == PLATFORM_PSERIES || \
|
||||
_machine == PLATFORM_PSERIES_LPAR)
|
||||
#if defined(__KERNEL__) && defined(CONFIG_PPC32)
|
||||
|
||||
#if defined(CONFIG_PPC_MULTIPLATFORM)
|
||||
extern int _machine;
|
||||
extern int _chrp_type;
|
||||
|
||||
#ifdef CONFIG_PPC32
|
||||
#ifdef CONFIG_PPC_PREP
|
||||
|
||||
/* what kind of prep workstation we are */
|
||||
extern int _prep_type;
|
||||
extern int _chrp_type;
|
||||
|
||||
/*
|
||||
* This is used to identify the board type from a given PReP board
|
||||
@@ -70,17 +50,14 @@ extern int _chrp_type;
|
||||
extern unsigned char ucBoardRev;
|
||||
extern unsigned char ucBoardRevMaj, ucBoardRevMin;
|
||||
|
||||
#endif /* CONFIG_PPC32 */
|
||||
#endif /* CONFIG_PPC_PREP */
|
||||
|
||||
#elif defined(CONFIG_PPC_ISERIES)
|
||||
/*
|
||||
* iSeries is soon to become MULTIPLATFORM hopefully ...
|
||||
*/
|
||||
#define _machine PLATFORM_ISERIES_LPAR
|
||||
#else
|
||||
#ifndef CONFIG_PPC_MULTIPLATFORM
|
||||
#define _machine 0
|
||||
#endif /* CONFIG_PPC_MULTIPLATFORM */
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* defined(__KERNEL__) && defined(CONFIG_PPC32) */
|
||||
|
||||
/*
|
||||
* Default implementation of macro that returns current
|
||||
* instruction pointer ("program counter").
|
||||
@@ -251,6 +228,10 @@ static inline unsigned long __pack_fe01(unsigned int fpmode)
|
||||
#define cpu_relax() barrier()
|
||||
#endif
|
||||
|
||||
/* Check that a certain kernel stack pointer is valid in task_struct p */
|
||||
int validate_sp(unsigned long sp, struct task_struct *p,
|
||||
unsigned long nbytes);
|
||||
|
||||
/*
|
||||
* Prefetch macros.
|
||||
*/
|
||||
|
||||
@@ -149,12 +149,14 @@ extern struct device_node *of_node_get(struct device_node *node);
|
||||
extern void of_node_put(struct device_node *node);
|
||||
|
||||
/* For scanning the flat device-tree at boot time */
|
||||
int __init of_scan_flat_dt(int (*it)(unsigned long node,
|
||||
const char *uname, int depth,
|
||||
void *data),
|
||||
void *data);
|
||||
void* __init of_get_flat_dt_prop(unsigned long node, const char *name,
|
||||
unsigned long *size);
|
||||
extern int __init of_scan_flat_dt(int (*it)(unsigned long node,
|
||||
const char *uname, int depth,
|
||||
void *data),
|
||||
void *data);
|
||||
extern void* __init of_get_flat_dt_prop(unsigned long node, const char *name,
|
||||
unsigned long *size);
|
||||
extern int __init of_flat_dt_is_compatible(unsigned long node, const char *name);
|
||||
extern unsigned long __init of_get_flat_dt_root(void);
|
||||
|
||||
/* For updating the device tree at runtime */
|
||||
extern void of_attach_node(struct device_node *);
|
||||
|
||||
@@ -622,6 +622,10 @@ extern void ppc64_runlatch_off(void);
|
||||
extern unsigned long scom970_read(unsigned int address);
|
||||
extern void scom970_write(unsigned int address, unsigned long value);
|
||||
|
||||
#else
|
||||
#define ppc64_runlatch_on()
|
||||
#define ppc64_runlatch_off()
|
||||
|
||||
#endif /* CONFIG_PPC64 */
|
||||
|
||||
#define __get_SP() ({unsigned long sp; \
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
#endif
|
||||
|
||||
extern int boot_cpuid;
|
||||
extern int boot_cpuid_phys;
|
||||
|
||||
extern void cpu_die(void);
|
||||
|
||||
@@ -99,6 +98,7 @@ extern void smp_release_cpus(void);
|
||||
#else
|
||||
/* 32-bit */
|
||||
#ifndef CONFIG_SMP
|
||||
extern int boot_cpuid_phys;
|
||||
#define get_hard_smp_processor_id(cpu) boot_cpuid_phys
|
||||
#define set_hard_smp_processor_id(cpu, phys)
|
||||
#endif
|
||||
|
||||
@@ -110,6 +110,7 @@ struct spu {
|
||||
char *name;
|
||||
unsigned long local_store_phys;
|
||||
u8 *local_store;
|
||||
unsigned long problem_phys;
|
||||
struct spu_problem __iomem *problem;
|
||||
struct spu_priv1 __iomem *priv1;
|
||||
struct spu_priv2 __iomem *priv2;
|
||||
@@ -137,6 +138,7 @@ struct spu {
|
||||
void (* wbox_callback)(struct spu *spu);
|
||||
void (* ibox_callback)(struct spu *spu);
|
||||
void (* stop_callback)(struct spu *spu);
|
||||
void (* mfc_callback)(struct spu *spu);
|
||||
|
||||
char irq_c0[8];
|
||||
char irq_c1[8];
|
||||
@@ -149,6 +151,14 @@ int spu_irq_class_0_bottom(struct spu *spu);
|
||||
int spu_irq_class_1_bottom(struct spu *spu);
|
||||
void spu_irq_setaffinity(struct spu *spu, int cpu);
|
||||
|
||||
/* system callbacks from the SPU */
|
||||
struct spu_syscall_block {
|
||||
u64 nr_ret;
|
||||
u64 parm[6];
|
||||
};
|
||||
extern long spu_sys_callback(struct spu_syscall_block *s);
|
||||
|
||||
/* syscalls implemented in spufs */
|
||||
extern struct spufs_calls {
|
||||
asmlinkage long (*create_thread)(const char __user *name,
|
||||
unsigned int flags, mode_t mode);
|
||||
@@ -399,7 +409,6 @@ struct spu_priv1 {
|
||||
#define SPU_GET_REVISION_BITS(vr) (vr & SPU_REVISION_BITS)
|
||||
u8 pad_0x28_0x100[0x100 - 0x28]; /* 0x28 */
|
||||
|
||||
|
||||
/* Interrupt Area */
|
||||
u64 int_mask_RW[3]; /* 0x100 */
|
||||
#define CLASS0_ENABLE_DMA_ALIGNMENT_INTR 0x1L
|
||||
|
||||
58
include/asm-powerpc/syscalls.h
Normal file
58
include/asm-powerpc/syscalls.h
Normal file
@@ -0,0 +1,58 @@
|
||||
#ifndef __ASM_POWERPC_SYSCALLS_H
|
||||
#define __ASM_POWERPC_SYSCALLS_H
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/types.h>
|
||||
#include <asm/signal.h>
|
||||
|
||||
struct new_utsname;
|
||||
struct pt_regs;
|
||||
struct rtas_args;
|
||||
struct sigaction;
|
||||
|
||||
asmlinkage unsigned long sys_mmap(unsigned long addr, size_t len,
|
||||
unsigned long prot, unsigned long flags,
|
||||
unsigned long fd, off_t offset);
|
||||
asmlinkage unsigned long sys_mmap2(unsigned long addr, size_t len,
|
||||
unsigned long prot, unsigned long flags,
|
||||
unsigned long fd, unsigned long pgoff);
|
||||
asmlinkage int sys_execve(unsigned long a0, unsigned long a1,
|
||||
unsigned long a2, unsigned long a3, unsigned long a4,
|
||||
unsigned long a5, struct pt_regs *regs);
|
||||
asmlinkage int sys_clone(unsigned long clone_flags, unsigned long usp,
|
||||
int __user *parent_tidp, void __user *child_threadptr,
|
||||
int __user *child_tidp, int p6, struct pt_regs *regs);
|
||||
asmlinkage int sys_fork(unsigned long p1, unsigned long p2,
|
||||
unsigned long p3, unsigned long p4, unsigned long p5,
|
||||
unsigned long p6, struct pt_regs *regs);
|
||||
asmlinkage int sys_vfork(unsigned long p1, unsigned long p2,
|
||||
unsigned long p3, unsigned long p4, unsigned long p5,
|
||||
unsigned long p6, struct pt_regs *regs);
|
||||
asmlinkage int sys_pipe(int __user *fildes);
|
||||
asmlinkage long sys_rt_sigaction(int sig,
|
||||
const struct sigaction __user *act,
|
||||
struct sigaction __user *oact, size_t sigsetsize);
|
||||
asmlinkage int sys_ipc(uint call, int first, unsigned long second,
|
||||
long third, void __user *ptr, long fifth);
|
||||
asmlinkage long ppc64_personality(unsigned long personality);
|
||||
asmlinkage int ppc_rtas(struct rtas_args __user *uargs);
|
||||
asmlinkage time_t sys64_time(time_t __user * tloc);
|
||||
asmlinkage long ppc_newuname(struct new_utsname __user * name);
|
||||
|
||||
asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset,
|
||||
size_t sigsetsize);
|
||||
|
||||
#ifndef __powerpc64__
|
||||
asmlinkage long sys_sigaltstack(const stack_t __user *uss,
|
||||
stack_t __user *uoss, int r5, int r6, int r7, int r8,
|
||||
struct pt_regs *regs);
|
||||
#else /* __powerpc64__ */
|
||||
asmlinkage long sys_sigaltstack(const stack_t __user *uss,
|
||||
stack_t __user *uoss, unsigned long r5, unsigned long r6,
|
||||
unsigned long r7, unsigned long r8, struct pt_regs *regs);
|
||||
#endif /* __powerpc64__ */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __ASM_POWERPC_SYSCALLS_H */
|
||||
@@ -425,6 +425,7 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6
|
||||
#include <linux/types.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/syscalls.h>
|
||||
|
||||
#define __ARCH_WANT_IPC_PARSE_VERSION
|
||||
#define __ARCH_WANT_OLD_READDIR
|
||||
@@ -460,43 +461,9 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6
|
||||
* System call prototypes.
|
||||
*/
|
||||
#ifdef __KERNEL_SYSCALLS__
|
||||
extern pid_t setsid(void);
|
||||
extern int write(int fd, const char *buf, off_t count);
|
||||
extern int read(int fd, char *buf, off_t count);
|
||||
extern off_t lseek(int fd, off_t offset, int count);
|
||||
extern int dup(int fd);
|
||||
extern int execve(const char *file, char **argv, char **envp);
|
||||
extern int open(const char *file, int flag, int mode);
|
||||
extern int close(int fd);
|
||||
extern pid_t waitpid(pid_t pid, int *wait_stat, int options);
|
||||
#endif /* __KERNEL_SYSCALLS__ */
|
||||
|
||||
/*
|
||||
* Functions that implement syscalls.
|
||||
*/
|
||||
unsigned long sys_mmap(unsigned long addr, size_t len, unsigned long prot,
|
||||
unsigned long flags, unsigned long fd, off_t offset);
|
||||
unsigned long sys_mmap2(unsigned long addr, size_t len,
|
||||
unsigned long prot, unsigned long flags,
|
||||
unsigned long fd, unsigned long pgoff);
|
||||
struct pt_regs;
|
||||
int sys_execve(unsigned long a0, unsigned long a1, unsigned long a2,
|
||||
unsigned long a3, unsigned long a4, unsigned long a5,
|
||||
struct pt_regs *regs);
|
||||
int sys_clone(unsigned long clone_flags, unsigned long usp,
|
||||
int __user *parent_tidp, void __user *child_threadptr,
|
||||
int __user *child_tidp, int p6, struct pt_regs *regs);
|
||||
int sys_fork(unsigned long p1, unsigned long p2, unsigned long p3,
|
||||
unsigned long p4, unsigned long p5, unsigned long p6,
|
||||
struct pt_regs *regs);
|
||||
int sys_vfork(unsigned long p1, unsigned long p2, unsigned long p3,
|
||||
unsigned long p4, unsigned long p5, unsigned long p6,
|
||||
struct pt_regs *regs);
|
||||
int sys_pipe(int __user *fildes);
|
||||
struct sigaction;
|
||||
long sys_rt_sigaction(int sig, const struct sigaction __user *act,
|
||||
struct sigaction __user *oact, size_t sigsetsize);
|
||||
|
||||
/*
|
||||
* "Conditional" syscalls
|
||||
*
|
||||
|
||||
@@ -55,6 +55,9 @@ struct vdso_data {
|
||||
__u32 minor; /* Minor number 0x14 */
|
||||
} version;
|
||||
|
||||
/* Note about the platform flags: it now only contains the lpar
|
||||
* bit. The actual platform number is dead and burried
|
||||
*/
|
||||
__u32 platform; /* Platform flags 0x18 */
|
||||
__u32 processor; /* Processor type 0x1C */
|
||||
__u64 processorCount; /* # of physical processors 0x20 */
|
||||
|
||||
@@ -19,6 +19,18 @@ struct pci_dev;
|
||||
struct seq_file;
|
||||
struct file;
|
||||
|
||||
/*
|
||||
* This is for compatibility with ARCH=powerpc.
|
||||
*/
|
||||
#define machine_is(x) __MACHINE_IS_##x
|
||||
#define __MACHINE_IS_powermac 0
|
||||
#define __MACHINE_IS_chrp 0
|
||||
#ifdef CONFIG_PPC_PREP
|
||||
#define __MACHINE_IS_prep 1
|
||||
#else
|
||||
#define __MACHINE_IS_prep 0
|
||||
#endif
|
||||
|
||||
/* We export this macro for external modules like Alsa to know if
|
||||
* ppc_md.feature_call is implemented or not
|
||||
*/
|
||||
@@ -44,7 +56,7 @@ struct machdep_calls {
|
||||
void (*power_off)(void);
|
||||
void (*halt)(void);
|
||||
|
||||
void (*idle)(void);
|
||||
void (*idle_loop)(void);
|
||||
void (*power_save)(void);
|
||||
|
||||
long (*time_init)(void); /* Optional, may be NULL */
|
||||
@@ -104,9 +116,6 @@ struct machdep_calls {
|
||||
unsigned long size,
|
||||
pgprot_t vma_prot);
|
||||
|
||||
/* this is for modules, since _machine can be a define -- Cort */
|
||||
int ppc_machine;
|
||||
|
||||
/* Motherboard/chipset features. This is a kind of general purpose
|
||||
* hook used to control some machine specific features (like reset
|
||||
* lines, chip power control, etc...).
|
||||
|
||||
@@ -355,6 +355,7 @@ struct mpc52xx_xlb {
|
||||
u32 snoop_window; /* XLB + 0x70 */
|
||||
};
|
||||
|
||||
#define MPC52xx_XLB_CFG_PLDIS (1 << 31)
|
||||
#define MPC52xx_XLB_CFG_SNOOP (1 << 15)
|
||||
|
||||
/* Clock Distribution control */
|
||||
@@ -427,6 +428,9 @@ extern void mpc52xx_calibrate_decr(void);
|
||||
|
||||
extern void mpc52xx_find_bridges(void);
|
||||
|
||||
extern void mpc52xx_setup_cpu(void);
|
||||
|
||||
|
||||
|
||||
/* Matching of PSC function */
|
||||
struct mpc52xx_psc_func {
|
||||
|
||||
@@ -837,7 +837,8 @@ static inline int io_remap_pfn_range(struct vm_area_struct *vma,
|
||||
*/
|
||||
#define pgtable_cache_init() do { } while (0)
|
||||
|
||||
extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep);
|
||||
extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep,
|
||||
pmd_t **pmdp);
|
||||
|
||||
#include <asm-generic/pgtable.h>
|
||||
|
||||
|
||||
@@ -8,126 +8,19 @@
|
||||
#ifndef _PPC_PROM_H
|
||||
#define _PPC_PROM_H
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
typedef u32 phandle;
|
||||
typedef u32 ihandle;
|
||||
|
||||
struct address_range {
|
||||
unsigned int space;
|
||||
unsigned int address;
|
||||
unsigned int size;
|
||||
};
|
||||
|
||||
struct interrupt_info {
|
||||
int line;
|
||||
int sense; /* +ve/-ve logic, edge or level, etc. */
|
||||
};
|
||||
|
||||
/* This is used in arch/ppc/mm/mem_pieces.h */
|
||||
struct reg_property {
|
||||
unsigned int address;
|
||||
unsigned int size;
|
||||
};
|
||||
|
||||
struct property {
|
||||
char *name;
|
||||
int length;
|
||||
unsigned char *value;
|
||||
struct property *next;
|
||||
};
|
||||
|
||||
/*
|
||||
* Note: don't change this structure for now or you'll break BootX !
|
||||
*/
|
||||
struct device_node {
|
||||
char *name;
|
||||
char *type;
|
||||
phandle node;
|
||||
int n_addrs;
|
||||
struct address_range *addrs;
|
||||
int n_intrs;
|
||||
struct interrupt_info *intrs;
|
||||
char *full_name;
|
||||
struct property *properties;
|
||||
struct device_node *parent;
|
||||
struct device_node *child;
|
||||
struct device_node *sibling;
|
||||
struct device_node *next; /* next device of same type */
|
||||
struct device_node *allnext; /* next in list of all nodes */
|
||||
};
|
||||
|
||||
struct prom_args;
|
||||
typedef void (*prom_entry)(struct prom_args *);
|
||||
|
||||
/* OBSOLETE: Old style node lookup */
|
||||
extern struct device_node *find_devices(const char *name);
|
||||
extern struct device_node *find_type_devices(const char *type);
|
||||
extern struct device_node *find_path_device(const char *path);
|
||||
extern struct device_node *find_compatible_devices(const char *type,
|
||||
const char *compat);
|
||||
extern struct device_node *find_all_nodes(void);
|
||||
|
||||
/* New style node lookup */
|
||||
extern struct device_node *of_find_node_by_name(struct device_node *from,
|
||||
const char *name);
|
||||
extern struct device_node *of_find_node_by_type(struct device_node *from,
|
||||
const char *type);
|
||||
extern struct device_node *of_find_compatible_node(struct device_node *from,
|
||||
const char *type, const char *compat);
|
||||
extern struct device_node *of_find_node_by_path(const char *path);
|
||||
extern struct device_node *of_find_all_nodes(struct device_node *prev);
|
||||
extern struct device_node *of_get_parent(const struct device_node *node);
|
||||
extern struct device_node *of_get_next_child(const struct device_node *node,
|
||||
struct device_node *prev);
|
||||
extern struct device_node *of_node_get(struct device_node *node);
|
||||
extern void of_node_put(struct device_node *node);
|
||||
|
||||
/* Other Prototypes */
|
||||
extern void abort(void);
|
||||
extern unsigned long prom_init(int, int, prom_entry);
|
||||
extern void prom_print(const char *msg);
|
||||
extern void relocate_nodes(void);
|
||||
extern void finish_device_tree(void);
|
||||
extern int device_is_compatible(struct device_node *device, const char *);
|
||||
extern int machine_is_compatible(const char *compat);
|
||||
extern unsigned char *get_property(struct device_node *node, const char *name,
|
||||
int *lenp);
|
||||
extern int prom_add_property(struct device_node* np, struct property* prop);
|
||||
extern void prom_get_irq_senses(unsigned char *, int, int);
|
||||
extern int prom_n_addr_cells(struct device_node* np);
|
||||
extern int prom_n_size_cells(struct device_node* np);
|
||||
|
||||
extern struct resource*
|
||||
request_OF_resource(struct device_node* node, int index, const char* name_postfix);
|
||||
extern int release_OF_resource(struct device_node* node, int index);
|
||||
|
||||
extern void print_properties(struct device_node *node);
|
||||
extern int call_rtas(const char *service, int nargs, int nret,
|
||||
unsigned long *outputs, ...);
|
||||
|
||||
/*
|
||||
* PCI <-> OF matching functions
|
||||
*/
|
||||
struct pci_bus;
|
||||
struct pci_dev;
|
||||
extern int pci_device_from_OF_node(struct device_node *node,
|
||||
u8* bus, u8* devfn);
|
||||
extern struct device_node* pci_busdev_to_OF_node(struct pci_bus *, int);
|
||||
extern struct device_node* pci_device_to_OF_node(struct pci_dev *);
|
||||
extern void pci_create_OF_bus_map(void);
|
||||
|
||||
/*
|
||||
* When we call back to the Open Firmware client interface, we usually
|
||||
* have to do that before the kernel is relocated to its final location
|
||||
* (this is because we can't use OF after we have overwritten the
|
||||
* exception vectors with our exception handlers). These macros assist
|
||||
* in performing the address calculations that we need to do to access
|
||||
* data when the kernel is running at an address that is different from
|
||||
* the address that the kernel is linked at. The reloc_offset() function
|
||||
* returns the difference between these two addresses and the macros
|
||||
* simplify the process of adding or subtracting this offset to/from
|
||||
* pointer values. See arch/ppc/kernel/prom.c for how these are used.
|
||||
* These macros assist in performing the address calculations that we
|
||||
* need to do to access data when the kernel is running at an address
|
||||
* that is different from the address that the kernel is linked at.
|
||||
* The reloc_offset() function returns the difference between these
|
||||
* two addresses and the macros simplify the process of adding or
|
||||
* subtracting this offset to/from pointer values.
|
||||
*/
|
||||
extern unsigned long reloc_offset(void);
|
||||
extern unsigned long add_reloc_offset(unsigned long);
|
||||
@@ -136,45 +29,12 @@ extern unsigned long sub_reloc_offset(unsigned long);
|
||||
#define PTRRELOC(x) ((typeof(x))add_reloc_offset((unsigned long)(x)))
|
||||
#define PTRUNRELOC(x) ((typeof(x))sub_reloc_offset((unsigned long)(x)))
|
||||
|
||||
|
||||
/*
|
||||
* OF address retreival & translation
|
||||
*/
|
||||
|
||||
|
||||
/* Translate an OF address block into a CPU physical address
|
||||
*/
|
||||
#define OF_BAD_ADDR ((u64)-1)
|
||||
extern u64 of_translate_address(struct device_node *np, u32 *addr);
|
||||
|
||||
/* Extract an address from a device, returns the region size and
|
||||
* the address space flags too. The PCI version uses a BAR number
|
||||
* instead of an absolute index
|
||||
*/
|
||||
extern u32 *of_get_address(struct device_node *dev, int index,
|
||||
u64 *size, unsigned int *flags);
|
||||
extern u32 *of_get_pci_address(struct device_node *dev, int bar_no,
|
||||
u64 *size, unsigned int *flags);
|
||||
|
||||
/* Get an address as a resource. Note that if your address is
|
||||
* a PIO address, the conversion will fail if the physical address
|
||||
* can't be internally converted to an IO token with
|
||||
* pci_address_to_pio(), that is because it's either called to early
|
||||
* or it can't be matched to any host bridge IO space
|
||||
*/
|
||||
extern int of_address_to_resource(struct device_node *dev, int index,
|
||||
struct resource *r);
|
||||
extern int of_pci_address_to_resource(struct device_node *dev, int bar,
|
||||
struct resource *r);
|
||||
|
||||
#ifndef CONFIG_PPC_OF
|
||||
/*
|
||||
* Fallback definitions for builds where we don't have prom.c included.
|
||||
* Fallback definitions since we don't support OF in arch/ppc any more.
|
||||
*/
|
||||
#define machine_is_compatible(x) 0
|
||||
#define of_find_compatible_node(f, t, c) NULL
|
||||
#define get_property(p, n, l) NULL
|
||||
#endif
|
||||
|
||||
#endif /* _PPC_PROM_H */
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
@@ -41,15 +41,10 @@
|
||||
#else
|
||||
|
||||
/*
|
||||
* XXX Assume for now it has PC-style ISA serial ports.
|
||||
* This is true for PReP and CHRP at least.
|
||||
* XXX Assume it has PC-style ISA serial ports - true for PReP at least.
|
||||
*/
|
||||
#include <asm/pc_serial.h>
|
||||
|
||||
#if defined(CONFIG_MAC_SERIAL)
|
||||
#define SERIAL_DEV_OFFSET ((_machine == _MACH_prep || _machine == _MACH_chrp) ? 0 : 2)
|
||||
#endif
|
||||
|
||||
#endif /* !CONFIG_GEMINI and others */
|
||||
#endif /* __ASM_SERIAL_H__ */
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
@@ -773,6 +773,7 @@
|
||||
#define PCI_DEVICE_ID_MOTOROLA_HAWK 0x4803
|
||||
#define PCI_DEVICE_ID_MOTOROLA_HARRIER 0x480b
|
||||
#define PCI_DEVICE_ID_MOTOROLA_MPC5200 0x5803
|
||||
#define PCI_DEVICE_ID_MOTOROLA_MPC5200B 0x5809
|
||||
|
||||
#define PCI_VENDOR_ID_PROMISE 0x105a
|
||||
#define PCI_DEVICE_ID_PROMISE_20265 0x0d30
|
||||
|
||||
Reference in New Issue
Block a user