mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
powerpc updates for 4.9 #2
Freescale updates from Scott: "Highlights include qbman support (a prerequisite for datapath drivers such as ethernet), a PCI DMA fix+improvement, reset handler changes, more 8xx optimizations, and some cleanups and fixes." Fixes: - selftests/powerpc: Add missing binaries to .gitignores (Michael Ellerman) - selftests/powerpc: Fix build break caused by EXPORT_SYMBOL changes (Michael Ellerman) - powerpc/pseries: Fix stack corruption in htpe code (Laurent Dufour) - powerpc/64s: Fix power4_fixup_nap placement (Nicholas Piggin) - powerpc/64: Fix incorrect return value from __copy_tofrom_user (Paul Mackerras) - powerpc/mm/hash64: Fix might_have_hea() check (Michael Ellerman) Other: - MAINTAINERS: Remove myself from PA Semi entries (Olof Johansson) - MAINTAINERS: Drop separate pseries entry (Michael Ellerman) - MAINTAINERS: Update powerpc website & add selftests (Michael Ellerman) -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJX/1EOAAoJEFHr6jzI4aWAu0UQAIsmnc361a4xOl1ODRzJNWSD OqBbuGQPZ3I3XPMxB6BBK4mnpR507nb+L1yxMDidDebJal/pRJdXkGi7I5pe9uq+ 12XJcaePtVfmrHKKWAhC/fef0gQHSusBDpIIDquN5QE1BVvUDGbynG4GjnpX9ZaT gmXGL03u/yJvUoUNexG7lrMAJ7bZgU8BzFKyojzWtoEDF4SM7rpWKs1hGwojW4/T EYcek5uTNo01UsN/WNrtBkHA8eC9unnLk9NisOxvBXu7eJfEq38Bz71fhoowFO+C FDRboPdkXxySzzNTBb3hROontLZS2S13upzjcrRo2/f4gxvcimRJtDzxuRKrYX5n xdXcZVdFSRsKanbuV0Dwjki05IU4zeOhsHUqYqaS2UD+QlAbNCu0N9DZOhPMn+H2 8uT3cOOrBLBrhIH3e7DMK9Rx97FBeuCvwrbjnZp8My7s55VXXd2CZTFYf5/wW0b2 VEf5eoXM1BB2zuh9kFZ785Sq5iYnsKoNhKjoXULkBrf3m7WtmjPIbHzRTJM5ltwt YUvFMG6nncQB0ERVOvDIXXNzwVB0JkJTVX2BBZ2a7Fr+8KHE6rTYkgcQiosibUmq gLV9M59MFamAgJlna3A1OmGIpEiZ3RrriYL2mgraWwuLUn/qW3yPiPE6hBk0uomL cARvlIjGf8rWhi+3qAb1 =lwsd -----END PGP SIGNATURE----- Merge tag 'powerpc-4.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux Pull more powerpc updates from Michael Ellerman: "Some more powerpc updates for 4.9: Freescale updates from Scott Wood: - qbman support (a prerequisite for datapath drivers such as ethernet) - a PCI DMA fix+improvement - reset handler changes - more 8xx optimizations - some cleanups and fixes.' Fixes: - selftests/powerpc: Add missing binaries to .gitignores (Michael Ellerman) - selftests/powerpc: Fix build break caused by EXPORT_SYMBOL changes (Michael Ellerman) - powerpc/pseries: Fix stack corruption in htpe code (Laurent Dufour) - powerpc/64s: Fix power4_fixup_nap placement (Nicholas Piggin) - powerpc/64: Fix incorrect return value from __copy_tofrom_user (Paul Mackerras) - powerpc/mm/hash64: Fix might_have_hea() check (Michael Ellerman) Other: - MAINTAINERS: Remove myself from PA Semi entries (Olof Johansson) - MAINTAINERS: Drop separate pseries entry (Michael Ellerman) - MAINTAINERS: Update powerpc website & add selftests (Michael Ellerman): * tag 'powerpc-4.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (35 commits) powerpc/mm/hash64: Fix might_have_hea() check powerpc/64: Fix incorrect return value from __copy_tofrom_user powerpc/64s: Fix power4_fixup_nap placement powerpc/pseries: Fix stack corruption in htpe code selftests/powerpc: Fix build break caused by EXPORT_SYMBOL changes MAINTAINERS: Update powerpc website & add selftests MAINTAINERS: Drop separate pseries entry MAINTAINERS: Remove myself from PA Semi entries selftests/powerpc: Add missing binaries to .gitignores arch/powerpc: Add CONFIG_FSL_DPAA to corenetXX_smp_defconfig soc/qman: Add self-test for QMan driver soc/bman: Add self-test for BMan driver soc/fsl: Introduce DPAA 1.x QMan device driver soc/fsl: Introduce DPAA 1.x BMan device driver powerpc/8xx: make user addr DTLB miss the short path powerpc/8xx: Move additional DTLBMiss handlers out of exception area powerpc/8xx: use r3 to scratch CR in ITLBmiss soc/fsl/qe: fix gpio save_regs functions powerpc/8xx: add dedicated machine check handler powerpc/8xx: add system_reset_exception ...
This commit is contained in:
commit
d8bfb96a2e
104 changed files with 8631 additions and 266 deletions
|
|
@ -318,12 +318,12 @@ mpc85xx_smp_defconfig:
|
|||
PHONY += corenet32_smp_defconfig
|
||||
corenet32_smp_defconfig:
|
||||
$(call merge_into_defconfig,corenet_basic_defconfig,\
|
||||
85xx-32bit 85xx-smp 85xx-hw fsl-emb-nonhw)
|
||||
85xx-32bit 85xx-smp 85xx-hw fsl-emb-nonhw dpaa)
|
||||
|
||||
PHONY += corenet64_smp_defconfig
|
||||
corenet64_smp_defconfig:
|
||||
$(call merge_into_defconfig,corenet_basic_defconfig,\
|
||||
85xx-64bit 85xx-smp altivec 85xx-hw fsl-emb-nonhw)
|
||||
85xx-64bit 85xx-smp altivec 85xx-hw fsl-emb-nonhw dpaa)
|
||||
|
||||
PHONY += mpc86xx_defconfig
|
||||
mpc86xx_defconfig:
|
||||
|
|
|
|||
1
arch/powerpc/configs/dpaa.config
Normal file
1
arch/powerpc/configs/dpaa.config
Normal file
|
|
@ -0,0 +1 @@
|
|||
CONFIG_FSL_DPAA=y
|
||||
|
|
@ -43,6 +43,7 @@ extern int machine_check_e500mc(struct pt_regs *regs);
|
|||
extern int machine_check_e500(struct pt_regs *regs);
|
||||
extern int machine_check_e200(struct pt_regs *regs);
|
||||
extern int machine_check_47x(struct pt_regs *regs);
|
||||
int machine_check_8xx(struct pt_regs *regs);
|
||||
|
||||
extern void cpu_down_flush_e500v2(void);
|
||||
extern void cpu_down_flush_e500mc(void);
|
||||
|
|
|
|||
|
|
@ -155,6 +155,8 @@ static inline unsigned long arch_local_irq_save(void)
|
|||
unsigned long flags = arch_local_save_flags();
|
||||
#ifdef CONFIG_BOOKE
|
||||
asm volatile("wrteei 0" : : : "memory");
|
||||
#elif defined(CONFIG_PPC_8xx)
|
||||
wrtspr(SPRN_EID);
|
||||
#else
|
||||
SET_MSR_EE(flags & ~MSR_EE);
|
||||
#endif
|
||||
|
|
@ -165,6 +167,8 @@ static inline void arch_local_irq_disable(void)
|
|||
{
|
||||
#ifdef CONFIG_BOOKE
|
||||
asm volatile("wrteei 0" : : : "memory");
|
||||
#elif defined(CONFIG_PPC_8xx)
|
||||
wrtspr(SPRN_EID);
|
||||
#else
|
||||
arch_local_irq_save();
|
||||
#endif
|
||||
|
|
@ -174,6 +178,8 @@ static inline void arch_local_irq_enable(void)
|
|||
{
|
||||
#ifdef CONFIG_BOOKE
|
||||
asm volatile("wrteei 1" : : : "memory");
|
||||
#elif defined(CONFIG_PPC_8xx)
|
||||
wrtspr(SPRN_EIE);
|
||||
#else
|
||||
unsigned long msr = mfmsr();
|
||||
SET_MSR_EE(msr | MSR_EE);
|
||||
|
|
|
|||
|
|
@ -152,6 +152,7 @@
|
|||
#define PPC_INST_LWSYNC 0x7c2004ac
|
||||
#define PPC_INST_SYNC 0x7c0004ac
|
||||
#define PPC_INST_SYNC_MASK 0xfc0007fe
|
||||
#define PPC_INST_ISYNC 0x4c00012c
|
||||
#define PPC_INST_LXVD2X 0x7c000698
|
||||
#define PPC_INST_MCRXR 0x7c000400
|
||||
#define PPC_INST_MCRXR_MASK 0xfc0007fe
|
||||
|
|
|
|||
|
|
@ -1250,6 +1250,8 @@ static inline void mtmsr_isync(unsigned long val)
|
|||
: "r" ((unsigned long)(v)) \
|
||||
: "memory")
|
||||
#endif
|
||||
#define wrtspr(rn) asm volatile("mtspr " __stringify(rn) ",0" : \
|
||||
: : "memory")
|
||||
|
||||
extern unsigned long msr_check_and_set(unsigned long bits);
|
||||
extern bool strict_msr_control;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,10 @@
|
|||
#define SPRN_MD_RAM0 825
|
||||
#define SPRN_MD_RAM1 826
|
||||
|
||||
/* Special MSR manipulation registers */
|
||||
#define SPRN_EIE 80 /* External interrupt enable (EE=1, RI=1) */
|
||||
#define SPRN_EID 81 /* External interrupt disable (EE=0, RI=1) */
|
||||
|
||||
/* Commands. Only the first few are available to the instruction cache.
|
||||
*/
|
||||
#define IDC_ENABLE 0x02000000 /* Cache enable */
|
||||
|
|
|
|||
|
|
@ -1248,6 +1248,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
|
|||
.mmu_features = MMU_FTR_TYPE_8xx,
|
||||
.icache_bsize = 16,
|
||||
.dcache_bsize = 16,
|
||||
.machine_check = machine_check_8xx,
|
||||
.platform = "ppc823",
|
||||
},
|
||||
#endif /* CONFIG_8xx */
|
||||
|
|
|
|||
|
|
@ -1377,7 +1377,7 @@ __end_interrupts:
|
|||
DEFINE_FIXED_SYMBOL(__end_interrupts)
|
||||
|
||||
#ifdef CONFIG_PPC_970_NAP
|
||||
TRAMP_REAL_BEGIN(power4_fixup_nap)
|
||||
EXC_COMMON_BEGIN(power4_fixup_nap)
|
||||
andc r9,r9,r10
|
||||
std r9,TI_LOCAL_FLAGS(r11)
|
||||
ld r10,_LINK(r1) /* make idle task do the */
|
||||
|
|
|
|||
|
|
@ -226,7 +226,7 @@ i##n: \
|
|||
ret_from_except)
|
||||
|
||||
/* System reset */
|
||||
EXCEPTION(0x100, Reset, unknown_exception, EXC_XFER_STD)
|
||||
EXCEPTION(0x100, Reset, system_reset_exception, EXC_XFER_STD)
|
||||
|
||||
/* Machine check */
|
||||
. = 0x200
|
||||
|
|
@ -321,7 +321,7 @@ SystemCall:
|
|||
#endif
|
||||
|
||||
InstructionTLBMiss:
|
||||
#ifdef CONFIG_8xx_CPU6
|
||||
#if defined(CONFIG_8xx_CPU6) || defined(CONFIG_MODULES) || defined (CONFIG_DEBUG_PAGEALLOC)
|
||||
mtspr SPRN_SPRG_SCRATCH2, r3
|
||||
#endif
|
||||
EXCEPTION_PROLOG_0
|
||||
|
|
@ -329,23 +329,20 @@ InstructionTLBMiss:
|
|||
/* If we are faulting a kernel address, we have to use the
|
||||
* kernel page tables.
|
||||
*/
|
||||
mfspr r10, SPRN_SRR0 /* Get effective address of fault */
|
||||
INVALIDATE_ADJACENT_PAGES_CPU15(r11, r10)
|
||||
#if defined(CONFIG_MODULES) || defined (CONFIG_DEBUG_PAGEALLOC)
|
||||
/* Only modules will cause ITLB Misses as we always
|
||||
* pin the first 8MB of kernel memory */
|
||||
mfspr r11, SPRN_SRR0 /* Get effective address of fault */
|
||||
INVALIDATE_ADJACENT_PAGES_CPU15(r10, r11)
|
||||
mfcr r10
|
||||
IS_KERNEL(r11, r11)
|
||||
mfcr r3
|
||||
IS_KERNEL(r11, r10)
|
||||
#endif
|
||||
mfspr r11, SPRN_M_TW /* Get level 1 table */
|
||||
#if defined(CONFIG_MODULES) || defined (CONFIG_DEBUG_PAGEALLOC)
|
||||
BRANCH_UNLESS_KERNEL(3f)
|
||||
lis r11, (swapper_pg_dir-PAGE_OFFSET)@ha
|
||||
3:
|
||||
mtcr r10
|
||||
mfspr r10, SPRN_SRR0 /* Get effective address of fault */
|
||||
#else
|
||||
mfspr r10, SPRN_SRR0 /* Get effective address of fault */
|
||||
INVALIDATE_ADJACENT_PAGES_CPU15(r11, r10)
|
||||
mfspr r11, SPRN_M_TW /* Get level 1 table base address */
|
||||
mtcr r3
|
||||
#endif
|
||||
/* Insert level 1 index */
|
||||
rlwimi r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
|
||||
|
|
@ -377,58 +374,39 @@ InstructionTLBMiss:
|
|||
MTSPR_CPU6(SPRN_MI_RPN, r10, r3) /* Update TLB entry */
|
||||
|
||||
/* Restore registers */
|
||||
#ifdef CONFIG_8xx_CPU6
|
||||
#if defined(CONFIG_8xx_CPU6) || defined(CONFIG_MODULES) || defined (CONFIG_DEBUG_PAGEALLOC)
|
||||
mfspr r3, SPRN_SPRG_SCRATCH2
|
||||
#endif
|
||||
EXCEPTION_EPILOG_0
|
||||
rfi
|
||||
|
||||
/*
|
||||
* Bottom part of DataStoreTLBMiss handler for IMMR area
|
||||
* not enough space in the DataStoreTLBMiss area
|
||||
*/
|
||||
DTLBMissIMMR:
|
||||
mtcr r10
|
||||
/* Set 512k byte guarded page and mark it valid */
|
||||
li r10, MD_PS512K | MD_GUARDED | MD_SVALID
|
||||
MTSPR_CPU6(SPRN_MD_TWC, r10, r11)
|
||||
mfspr r10, SPRN_IMMR /* Get current IMMR */
|
||||
rlwinm r10, r10, 0, 0xfff80000 /* Get 512 kbytes boundary */
|
||||
ori r10, r10, 0xf0 | MD_SPS16K | _PAGE_SHARED | _PAGE_DIRTY | \
|
||||
_PAGE_PRESENT | _PAGE_NO_CACHE
|
||||
MTSPR_CPU6(SPRN_MD_RPN, r10, r11) /* Update TLB entry */
|
||||
|
||||
li r11, RPN_PATTERN
|
||||
mtspr SPRN_DAR, r11 /* Tag DAR */
|
||||
EXCEPTION_EPILOG_0
|
||||
rfi
|
||||
|
||||
. = 0x1200
|
||||
DataStoreTLBMiss:
|
||||
mtspr SPRN_SPRG_SCRATCH2, r3
|
||||
EXCEPTION_PROLOG_0
|
||||
mfcr r10
|
||||
mfcr r3
|
||||
|
||||
/* If we are faulting a kernel address, we have to use the
|
||||
* kernel page tables.
|
||||
*/
|
||||
mfspr r11, SPRN_MD_EPN
|
||||
rlwinm r11, r11, 16, 0xfff8
|
||||
mfspr r10, SPRN_MD_EPN
|
||||
rlwinm r10, r10, 16, 0xfff8
|
||||
cmpli cr0, r10, PAGE_OFFSET@h
|
||||
mfspr r11, SPRN_M_TW /* Get level 1 table */
|
||||
blt+ 3f
|
||||
#ifndef CONFIG_PIN_TLB_IMMR
|
||||
cmpli cr0, r11, VIRT_IMMR_BASE@h
|
||||
cmpli cr0, r10, VIRT_IMMR_BASE@h
|
||||
#endif
|
||||
cmpli cr7, r11, PAGE_OFFSET@h
|
||||
_ENTRY(DTLBMiss_cmp)
|
||||
cmpli cr7, r10, (PAGE_OFFSET + 0x1800000)@h
|
||||
lis r11, (swapper_pg_dir-PAGE_OFFSET)@ha
|
||||
#ifndef CONFIG_PIN_TLB_IMMR
|
||||
_ENTRY(DTLBMiss_jmp)
|
||||
beq- DTLBMissIMMR
|
||||
#endif
|
||||
bge- cr7, 4f
|
||||
|
||||
mfspr r11, SPRN_M_TW /* Get level 1 table */
|
||||
blt cr7, DTLBMissLinear
|
||||
3:
|
||||
mtcr r10
|
||||
#ifdef CONFIG_8xx_CPU6
|
||||
mtspr SPRN_SPRG_SCRATCH2, r3
|
||||
#endif
|
||||
mtcr r3
|
||||
mfspr r10, SPRN_MD_EPN
|
||||
|
||||
/* Insert level 1 index */
|
||||
|
|
@ -481,30 +459,7 @@ _ENTRY(DTLBMiss_jmp)
|
|||
MTSPR_CPU6(SPRN_MD_RPN, r10, r3) /* Update TLB entry */
|
||||
|
||||
/* Restore registers */
|
||||
#ifdef CONFIG_8xx_CPU6
|
||||
mfspr r3, SPRN_SPRG_SCRATCH2
|
||||
#endif
|
||||
mtspr SPRN_DAR, r11 /* Tag DAR */
|
||||
EXCEPTION_EPILOG_0
|
||||
rfi
|
||||
|
||||
4:
|
||||
_ENTRY(DTLBMiss_cmp)
|
||||
cmpli cr0, r11, (PAGE_OFFSET + 0x1800000)@h
|
||||
lis r11, (swapper_pg_dir-PAGE_OFFSET)@ha
|
||||
bge- 3b
|
||||
|
||||
mtcr r10
|
||||
/* Set 8M byte page and mark it valid */
|
||||
li r10, MD_PS8MEG | MD_SVALID
|
||||
MTSPR_CPU6(SPRN_MD_TWC, r10, r11)
|
||||
mfspr r10, SPRN_MD_EPN
|
||||
rlwinm r10, r10, 0, 0x0f800000 /* 8xx supports max 256Mb RAM */
|
||||
ori r10, r10, 0xf0 | MD_SPS16K | _PAGE_SHARED | _PAGE_DIRTY | \
|
||||
_PAGE_PRESENT
|
||||
MTSPR_CPU6(SPRN_MD_RPN, r10, r11) /* Update TLB entry */
|
||||
|
||||
li r11, RPN_PATTERN
|
||||
mtspr SPRN_DAR, r11 /* Tag DAR */
|
||||
EXCEPTION_EPILOG_0
|
||||
rfi
|
||||
|
|
@ -570,6 +525,43 @@ DARFixed:/* Return from dcbx instruction bug workaround */
|
|||
|
||||
. = 0x2000
|
||||
|
||||
/*
|
||||
* Bottom part of DataStoreTLBMiss handlers for IMMR area and linear RAM.
|
||||
* not enough space in the DataStoreTLBMiss area.
|
||||
*/
|
||||
DTLBMissIMMR:
|
||||
mtcr r3
|
||||
/* Set 512k byte guarded page and mark it valid */
|
||||
li r10, MD_PS512K | MD_GUARDED | MD_SVALID
|
||||
MTSPR_CPU6(SPRN_MD_TWC, r10, r11)
|
||||
mfspr r10, SPRN_IMMR /* Get current IMMR */
|
||||
rlwinm r10, r10, 0, 0xfff80000 /* Get 512 kbytes boundary */
|
||||
ori r10, r10, 0xf0 | MD_SPS16K | _PAGE_SHARED | _PAGE_DIRTY | \
|
||||
_PAGE_PRESENT | _PAGE_NO_CACHE
|
||||
MTSPR_CPU6(SPRN_MD_RPN, r10, r11) /* Update TLB entry */
|
||||
|
||||
li r11, RPN_PATTERN
|
||||
mtspr SPRN_DAR, r11 /* Tag DAR */
|
||||
mfspr r3, SPRN_SPRG_SCRATCH2
|
||||
EXCEPTION_EPILOG_0
|
||||
rfi
|
||||
|
||||
DTLBMissLinear:
|
||||
mtcr r3
|
||||
/* Set 8M byte page and mark it valid */
|
||||
li r11, MD_PS8MEG | MD_SVALID
|
||||
MTSPR_CPU6(SPRN_MD_TWC, r11, r3)
|
||||
rlwinm r10, r10, 16, 0x0f800000 /* 8xx supports max 256Mb RAM */
|
||||
ori r10, r10, 0xf0 | MD_SPS16K | _PAGE_SHARED | _PAGE_DIRTY | \
|
||||
_PAGE_PRESENT
|
||||
MTSPR_CPU6(SPRN_MD_RPN, r10, r11) /* Update TLB entry */
|
||||
|
||||
li r11, RPN_PATTERN
|
||||
mtspr SPRN_DAR, r11 /* Tag DAR */
|
||||
mfspr r3, SPRN_SPRG_SCRATCH2
|
||||
EXCEPTION_EPILOG_0
|
||||
rfi
|
||||
|
||||
/* This is the procedure to calculate the data EA for buggy dcbx,dcbi instructions
|
||||
* by decoding the registers used by the dcbx instruction and adding them.
|
||||
* DAR is set to the calculated address.
|
||||
|
|
@ -586,7 +578,9 @@ FixupDAR:/* Entry point for dcbx workaround. */
|
|||
rlwinm r11, r10, 16, 0xfff8
|
||||
_ENTRY(FixupDAR_cmp)
|
||||
cmpli cr7, r11, (PAGE_OFFSET + 0x1800000)@h
|
||||
blt- cr7, 200f
|
||||
/* create physical page address from effective address */
|
||||
tophys(r11, r10)
|
||||
blt- cr7, 201f
|
||||
lis r11, (swapper_pg_dir-PAGE_OFFSET)@ha
|
||||
/* Insert level 1 index */
|
||||
3: rlwimi r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
|
||||
|
|
@ -616,10 +610,6 @@ _ENTRY(FixupDAR_cmp)
|
|||
141: mfspr r10,SPRN_SPRG_SCRATCH2
|
||||
b DARFixed /* Nope, go back to normal TLB processing */
|
||||
|
||||
/* create physical page address from effective address */
|
||||
200: tophys(r11, r10)
|
||||
b 201b
|
||||
|
||||
144: mfspr r10, SPRN_DSISR
|
||||
rlwinm r10, r10,0,7,5 /* Clear store bit for buggy dcbst insn */
|
||||
mtspr SPRN_DSISR, r10
|
||||
|
|
|
|||
|
|
@ -131,15 +131,26 @@ void machine_shutdown(void)
|
|||
ppc_md.machine_shutdown();
|
||||
}
|
||||
|
||||
static void machine_hang(void)
|
||||
{
|
||||
pr_emerg("System Halted, OK to turn off power\n");
|
||||
local_irq_disable();
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
|
||||
void machine_restart(char *cmd)
|
||||
{
|
||||
machine_shutdown();
|
||||
if (ppc_md.restart)
|
||||
ppc_md.restart(cmd);
|
||||
|
||||
smp_send_stop();
|
||||
printk(KERN_EMERG "System Halted, OK to turn off power\n");
|
||||
local_irq_disable();
|
||||
while (1) ;
|
||||
|
||||
do_kernel_restart(cmd);
|
||||
mdelay(1000);
|
||||
|
||||
machine_hang();
|
||||
}
|
||||
|
||||
void machine_power_off(void)
|
||||
|
|
@ -147,10 +158,9 @@ void machine_power_off(void)
|
|||
machine_shutdown();
|
||||
if (pm_power_off)
|
||||
pm_power_off();
|
||||
|
||||
smp_send_stop();
|
||||
printk(KERN_EMERG "System Halted, OK to turn off power\n");
|
||||
local_irq_disable();
|
||||
while (1) ;
|
||||
machine_hang();
|
||||
}
|
||||
/* Used by the G5 thermal driver */
|
||||
EXPORT_SYMBOL_GPL(machine_power_off);
|
||||
|
|
@ -163,10 +173,9 @@ void machine_halt(void)
|
|||
machine_shutdown();
|
||||
if (ppc_md.halt)
|
||||
ppc_md.halt();
|
||||
|
||||
smp_send_stop();
|
||||
printk(KERN_EMERG "System Halted, OK to turn off power\n");
|
||||
local_irq_disable();
|
||||
while (1) ;
|
||||
machine_hang();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -273,7 +273,6 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)
|
|||
force_sig_info(signr, &info, current);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
void system_reset_exception(struct pt_regs *regs)
|
||||
{
|
||||
/* See if any machine dependent calls */
|
||||
|
|
@ -291,6 +290,7 @@ void system_reset_exception(struct pt_regs *regs)
|
|||
/* What should we do here? We could issue a shutdown or hard reset. */
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
/*
|
||||
* This function is called in real mode. Strictly no printk's please.
|
||||
*
|
||||
|
|
@ -352,12 +352,11 @@ static inline int check_io_access(struct pt_regs *regs)
|
|||
* For the debug message, we look at the preceding
|
||||
* load or store.
|
||||
*/
|
||||
if (*nip == 0x60000000) /* nop */
|
||||
if (*nip == PPC_INST_NOP)
|
||||
nip -= 2;
|
||||
else if (*nip == 0x4c00012c) /* isync */
|
||||
else if (*nip == PPC_INST_ISYNC)
|
||||
--nip;
|
||||
if (*nip == 0x7c0004ac || (*nip >> 26) == 3) {
|
||||
/* sync or twi */
|
||||
if (*nip == PPC_INST_SYNC || (*nip >> 26) == OP_TRAP) {
|
||||
unsigned int rb;
|
||||
|
||||
--nip;
|
||||
|
|
@ -668,6 +667,31 @@ int machine_check_e200(struct pt_regs *regs)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#elif defined(CONFIG_PPC_8xx)
|
||||
int machine_check_8xx(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long reason = get_mc_reason(regs);
|
||||
|
||||
pr_err("Machine check in kernel mode.\n");
|
||||
pr_err("Caused by (from SRR1=%lx): ", reason);
|
||||
if (reason & 0x40000000)
|
||||
pr_err("Fetch error at address %lx\n", regs->nip);
|
||||
else
|
||||
pr_err("Data access error at address %lx\n", regs->dar);
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
/* the qspan pci read routines can cause machine checks -- Cort
|
||||
*
|
||||
* yuck !!! that totally needs to go away ! There are better ways
|
||||
* to deal with that than having a wart in the mcheck handler.
|
||||
* -- BenH
|
||||
*/
|
||||
bad_page_fault(regs, regs->dar, SIGBUS);
|
||||
return 1;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
int machine_check_generic(struct pt_regs *regs)
|
||||
{
|
||||
|
|
@ -727,17 +751,6 @@ void machine_check_exception(struct pt_regs *regs)
|
|||
if (recover > 0)
|
||||
goto bail;
|
||||
|
||||
#if defined(CONFIG_8xx) && defined(CONFIG_PCI)
|
||||
/* the qspan pci read routines can cause machine checks -- Cort
|
||||
*
|
||||
* yuck !!! that totally needs to go away ! There are better ways
|
||||
* to deal with that than having a wart in the mcheck handler.
|
||||
* -- BenH
|
||||
*/
|
||||
bad_page_fault(regs, regs->dar, SIGBUS);
|
||||
goto bail;
|
||||
#endif
|
||||
|
||||
if (debugger_fault_handler(regs))
|
||||
goto bail;
|
||||
|
||||
|
|
|
|||
|
|
@ -359,6 +359,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
|||
addi r3,r3,8
|
||||
171:
|
||||
177:
|
||||
179:
|
||||
addi r3,r3,8
|
||||
370:
|
||||
372:
|
||||
|
|
@ -373,7 +374,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
|
|||
173:
|
||||
174:
|
||||
175:
|
||||
179:
|
||||
181:
|
||||
184:
|
||||
186:
|
||||
|
|
|
|||
|
|
@ -529,7 +529,7 @@ static bool might_have_hea(void)
|
|||
*/
|
||||
#ifdef CONFIG_IBMEBUS
|
||||
return !cpu_has_feature(CPU_FTR_ARCH_207S) &&
|
||||
!firmware_has_feature(FW_FEATURE_SPLPAR);
|
||||
firmware_has_feature(FW_FEATURE_SPLPAR);
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -30,8 +30,8 @@ config EP8248E
|
|||
select 8272
|
||||
select 8260
|
||||
select FSL_SOC
|
||||
select PHYLIB
|
||||
select MDIO_BITBANG
|
||||
select PHYLIB if NETDEVICES
|
||||
select MDIO_BITBANG if PHYLIB
|
||||
help
|
||||
This enables support for the Embedded Planet EP8248E board.
|
||||
|
||||
|
|
|
|||
|
|
@ -298,7 +298,9 @@ static const struct of_device_id of_bus_ids[] __initconst = {
|
|||
static int __init declare_of_platform_devices(void)
|
||||
{
|
||||
of_platform_bus_probe(NULL, of_bus_ids, NULL);
|
||||
platform_driver_register(&ep8248e_mdio_driver);
|
||||
|
||||
if (IS_ENABLED(CONFIG_MDIO_BITBANG))
|
||||
platform_driver_register(&ep8248e_mdio_driver);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,9 +30,7 @@
|
|||
*/
|
||||
static void __init asp834x_setup_arch(void)
|
||||
{
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("asp834x_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_arch();
|
||||
mpc834x_usb_cfg();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -130,10 +130,7 @@ static void __init mpc83xx_km_setup_arch(void)
|
|||
struct device_node *np;
|
||||
#endif
|
||||
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("kmpbec83xx_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
mpc83xx_setup_arch();
|
||||
|
||||
#ifdef CONFIG_QUICC_ENGINE
|
||||
np = of_find_node_by_name(NULL, "par_io");
|
||||
|
|
|
|||
|
|
@ -142,3 +142,11 @@ void __init mpc83xx_setup_pci(void)
|
|||
mpc83xx_add_bridge(np);
|
||||
}
|
||||
#endif
|
||||
|
||||
void __init mpc83xx_setup_arch(void)
|
||||
{
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc83xx_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,10 +27,7 @@
|
|||
*/
|
||||
static void __init mpc830x_rdb_setup_arch(void)
|
||||
{
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc830x_rdb_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
mpc83xx_setup_arch();
|
||||
mpc831x_usb_cfg();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,10 +28,7 @@
|
|||
*/
|
||||
static void __init mpc831x_rdb_setup_arch(void)
|
||||
{
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc831x_rdb_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
mpc83xx_setup_arch();
|
||||
mpc831x_usb_cfg();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -58,8 +58,7 @@ static void __init mpc832x_sys_setup_arch(void)
|
|||
struct device_node *np;
|
||||
u8 __iomem *bcsr_regs = NULL;
|
||||
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc832x_sys_setup_arch()", 0);
|
||||
mpc83xx_setup_arch();
|
||||
|
||||
/* Map BCSR area */
|
||||
np = of_find_node_by_name(NULL, "bcsr");
|
||||
|
|
@ -71,8 +70,6 @@ static void __init mpc832x_sys_setup_arch(void)
|
|||
of_node_put(np);
|
||||
}
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
|
||||
#ifdef CONFIG_QUICC_ENGINE
|
||||
if ((np = of_find_node_by_name(NULL, "par_io")) != NULL) {
|
||||
par_io_init(np);
|
||||
|
|
|
|||
|
|
@ -197,10 +197,7 @@ static void __init mpc832x_rdb_setup_arch(void)
|
|||
struct device_node *np;
|
||||
#endif
|
||||
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc832x_rdb_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
mpc83xx_setup_arch();
|
||||
|
||||
#ifdef CONFIG_QUICC_ENGINE
|
||||
if ((np = of_find_node_by_name(NULL, "par_io")) != NULL) {
|
||||
|
|
|
|||
|
|
@ -57,10 +57,7 @@ machine_device_initcall(mpc834x_itx, mpc834x_itx_declare_of_platform_devices);
|
|||
*/
|
||||
static void __init mpc834x_itx_setup_arch(void)
|
||||
{
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc834x_itx_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
mpc83xx_setup_arch();
|
||||
|
||||
mpc834x_usb_cfg();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,10 +76,7 @@ static int mpc834xemds_usb_cfg(void)
|
|||
*/
|
||||
static void __init mpc834x_mds_setup_arch(void)
|
||||
{
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc834x_mds_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
mpc83xx_setup_arch();
|
||||
|
||||
mpc834xemds_usb_cfg();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,8 +66,7 @@ static void __init mpc836x_mds_setup_arch(void)
|
|||
struct device_node *np;
|
||||
u8 __iomem *bcsr_regs = NULL;
|
||||
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc836x_mds_setup_arch()", 0);
|
||||
mpc83xx_setup_arch();
|
||||
|
||||
/* Map BCSR area */
|
||||
np = of_find_node_by_name(NULL, "bcsr");
|
||||
|
|
@ -79,8 +78,6 @@ static void __init mpc836x_mds_setup_arch(void)
|
|||
of_node_put(np);
|
||||
}
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
|
||||
#ifdef CONFIG_QUICC_ENGINE
|
||||
if ((np = of_find_node_by_name(NULL, "par_io")) != NULL) {
|
||||
par_io_init(np);
|
||||
|
|
|
|||
|
|
@ -31,10 +31,7 @@ machine_device_initcall(mpc836x_rdk, mpc83xx_declare_of_platform_devices);
|
|||
|
||||
static void __init mpc836x_rdk_setup_arch(void)
|
||||
{
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc836x_rdk_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
mpc83xx_setup_arch();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -79,10 +79,7 @@ out:
|
|||
*/
|
||||
static void __init mpc837x_mds_setup_arch(void)
|
||||
{
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc837x_mds_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
mpc83xx_setup_arch();
|
||||
mpc837xmds_usb_cfg();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,10 +50,7 @@ static void mpc837x_rdb_sd_cfg(void)
|
|||
*/
|
||||
static void __init mpc837x_rdb_setup_arch(void)
|
||||
{
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("mpc837x_rdb_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
mpc83xx_setup_arch();
|
||||
mpc837x_usb_cfg();
|
||||
mpc837x_rdb_sd_cfg();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,5 +86,6 @@ extern void mpc83xx_setup_pci(void);
|
|||
#endif
|
||||
|
||||
extern int mpc83xx_declare_of_platform_devices(void);
|
||||
extern void mpc83xx_setup_arch(void);
|
||||
|
||||
#endif /* __MPC83XX_H__ */
|
||||
|
|
|
|||
|
|
@ -47,10 +47,7 @@
|
|||
*/
|
||||
static void __init sbc834x_setup_arch(void)
|
||||
{
|
||||
if (ppc_md.progress)
|
||||
ppc_md.progress("sbc834x_setup_arch()", 0);
|
||||
|
||||
mpc83xx_setup_pci();
|
||||
mpc83xx_setup_arch();
|
||||
}
|
||||
|
||||
machine_device_initcall(sbc834x, mpc83xx_declare_of_platform_devices);
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ config MPC85xx_CDS
|
|||
config MPC85xx_MDS
|
||||
bool "Freescale MPC85xx MDS"
|
||||
select DEFAULT_UIMAGE
|
||||
select PHYLIB
|
||||
select PHYLIB if NETDEVICES
|
||||
select HAS_RAPIDIO
|
||||
select SWIOTLB
|
||||
help
|
||||
|
|
|
|||
|
|
@ -72,7 +72,6 @@ define_machine(bsc9132_qds) {
|
|||
.pcibios_fixup_bus = fsl_pcibios_fixup_bus,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ define_machine(bsc9131_rdb) {
|
|||
.setup_arch = bsc913x_rdb_setup_arch,
|
||||
.init_IRQ = bsc913x_rdb_pic_init,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ define_machine(c293_pcie) {
|
|||
.setup_arch = c293_pcie_setup_arch,
|
||||
.init_IRQ = c293_pcie_pic_init,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -225,7 +225,6 @@ define_machine(corenet_generic) {
|
|||
#else
|
||||
.get_irq = mpic_get_coreint_irq,
|
||||
#endif
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
#ifdef CONFIG_PPC64
|
||||
|
|
|
|||
|
|
@ -215,7 +215,6 @@ define_machine(ge_imp3a) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -77,7 +77,6 @@ define_machine(mpc8536_ds) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -170,7 +170,6 @@ define_machine(mpc85xx_ads) {
|
|||
.init_IRQ = mpc85xx_ads_pic_init,
|
||||
.show_cpuinfo = mpc85xx_ads_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -83,7 +83,8 @@ static int mpc85xx_exclude_device(struct pci_controller *hose,
|
|||
return PCIBIOS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
static void __noreturn mpc85xx_cds_restart(char *cmd)
|
||||
static int mpc85xx_cds_restart(struct notifier_block *this,
|
||||
unsigned long mode, void *cmd)
|
||||
{
|
||||
struct pci_dev *dev;
|
||||
u_char tmp;
|
||||
|
|
@ -108,12 +109,25 @@ static void __noreturn mpc85xx_cds_restart(char *cmd)
|
|||
}
|
||||
|
||||
/*
|
||||
* If we can't find the VIA chip (maybe the P2P bridge is disabled)
|
||||
* or the VIA chip reset didn't work, just use the default reset.
|
||||
* If we can't find the VIA chip (maybe the P2P bridge is
|
||||
* disabled) or the VIA chip reset didn't work, just return
|
||||
* and let default reset sequence happen.
|
||||
*/
|
||||
fsl_rstcr_restart(NULL);
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static int mpc85xx_cds_restart_register(void)
|
||||
{
|
||||
static struct notifier_block restart_handler;
|
||||
|
||||
restart_handler.notifier_call = mpc85xx_cds_restart;
|
||||
restart_handler.priority = 192;
|
||||
|
||||
return register_restart_handler(&restart_handler);
|
||||
}
|
||||
machine_arch_initcall(mpc85xx_cds, mpc85xx_cds_restart_register);
|
||||
|
||||
|
||||
static void __init mpc85xx_cds_pci_irq_fixup(struct pci_dev *dev)
|
||||
{
|
||||
u_char c;
|
||||
|
|
@ -380,11 +394,8 @@ define_machine(mpc85xx_cds) {
|
|||
.show_cpuinfo = mpc85xx_cds_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
#ifdef CONFIG_PCI
|
||||
.restart = mpc85xx_cds_restart,
|
||||
.pcibios_fixup_bus = mpc85xx_cds_fixup_bus,
|
||||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#else
|
||||
.restart = fsl_rstcr_restart,
|
||||
#endif
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
|
|
|
|||
|
|
@ -204,7 +204,6 @@ define_machine(mpc8544_ds) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -219,7 +218,6 @@ define_machine(mpc8572_ds) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -234,7 +232,6 @@ define_machine(p2020_ds) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -63,6 +63,8 @@
|
|||
#define DBG(fmt...)
|
||||
#endif
|
||||
|
||||
#if IS_BUILTIN(CONFIG_PHYLIB)
|
||||
|
||||
#define MV88E1111_SCR 0x10
|
||||
#define MV88E1111_SCR_125CLK 0x0010
|
||||
static int mpc8568_fixup_125_clock(struct phy_device *phydev)
|
||||
|
|
@ -152,6 +154,8 @@ static int mpc8568_mds_phy_fixups(struct phy_device *phydev)
|
|||
return err;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* ************************************************************************
|
||||
*
|
||||
* Setup the architecture
|
||||
|
|
@ -313,6 +317,7 @@ static void __init mpc85xx_mds_setup_arch(void)
|
|||
swiotlb_detect_4g();
|
||||
}
|
||||
|
||||
#if IS_BUILTIN(CONFIG_PHYLIB)
|
||||
|
||||
static int __init board_fixups(void)
|
||||
{
|
||||
|
|
@ -342,9 +347,12 @@ static int __init board_fixups(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
machine_arch_initcall(mpc8568_mds, board_fixups);
|
||||
machine_arch_initcall(mpc8569_mds, board_fixups);
|
||||
|
||||
#endif
|
||||
|
||||
static int __init mpc85xx_publish_devices(void)
|
||||
{
|
||||
if (machine_is(mpc8568_mds))
|
||||
|
|
@ -385,7 +393,6 @@ define_machine(mpc8568_mds) {
|
|||
.setup_arch = mpc85xx_mds_setup_arch,
|
||||
.init_IRQ = mpc85xx_mds_pic_init,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
#ifdef CONFIG_PCI
|
||||
|
|
@ -405,7 +412,6 @@ define_machine(mpc8569_mds) {
|
|||
.setup_arch = mpc85xx_mds_setup_arch,
|
||||
.init_IRQ = mpc85xx_mds_pic_init,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
#ifdef CONFIG_PCI
|
||||
|
|
@ -426,7 +432,6 @@ define_machine(p1021_mds) {
|
|||
.setup_arch = mpc85xx_mds_setup_arch,
|
||||
.init_IRQ = mpc85xx_mds_pic_init,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
#ifdef CONFIG_PCI
|
||||
|
|
@ -434,4 +439,3 @@ define_machine(p1021_mds) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -213,7 +213,6 @@ define_machine(p2020_rdb) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -228,7 +227,6 @@ define_machine(p1020_rdb) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -243,7 +241,6 @@ define_machine(p1021_rdb_pc) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -258,7 +255,6 @@ define_machine(p2020_rdb_pc) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -273,7 +269,6 @@ define_machine(p1025_rdb) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -288,7 +283,6 @@ define_machine(p1020_mbg_pc) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -303,7 +297,6 @@ define_machine(p1020_utm_pc) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -318,7 +311,6 @@ define_machine(p1020_rdb_pc) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -333,7 +325,6 @@ define_machine(p1020_rdb_pd) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -348,7 +339,6 @@ define_machine(p1024_rdb) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -66,7 +66,6 @@ define_machine(mvme2500) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -79,7 +79,6 @@ define_machine(p1010_rdb) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -568,7 +568,6 @@ define_machine(p1022_ds) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -148,7 +148,6 @@ define_machine(p1022_rdk) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -110,7 +110,6 @@ define_machine(p1023_rdb) {
|
|||
.setup_arch = mpc85xx_rdb_setup_arch,
|
||||
.init_IRQ = mpc85xx_rdb_pic_init,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
#ifdef CONFIG_PCI
|
||||
|
|
|
|||
|
|
@ -91,7 +91,6 @@ define_machine(ppa8548) {
|
|||
.init_IRQ = ppa8548_pic_init,
|
||||
.show_cpuinfo = ppa8548_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -77,7 +77,6 @@ define_machine(qemu_e500) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_coreint_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -130,7 +130,6 @@ define_machine(sbc8548) {
|
|||
.init_IRQ = sbc8548_pic_init,
|
||||
.show_cpuinfo = sbc8548_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
#ifdef CONFIG_PCI
|
||||
.pcibios_fixup_bus = fsl_pcibios_fixup_bus,
|
||||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
|
|
|
|||
|
|
@ -38,18 +38,18 @@ static void gpio_halt_wfn(struct work_struct *work)
|
|||
}
|
||||
static DECLARE_WORK(gpio_halt_wq, gpio_halt_wfn);
|
||||
|
||||
static void gpio_halt_cb(void)
|
||||
static void __noreturn gpio_halt_cb(void)
|
||||
{
|
||||
enum of_gpio_flags flags;
|
||||
int trigger, gpio;
|
||||
|
||||
if (!halt_node)
|
||||
return;
|
||||
panic("No reset GPIO information was provided in DT\n");
|
||||
|
||||
gpio = of_get_gpio_flags(halt_node, 0, &flags);
|
||||
|
||||
if (!gpio_is_valid(gpio))
|
||||
return;
|
||||
panic("Provided GPIO is invalid\n");
|
||||
|
||||
trigger = (flags == OF_GPIO_ACTIVE_LOW);
|
||||
|
||||
|
|
@ -57,6 +57,8 @@ static void gpio_halt_cb(void)
|
|||
|
||||
/* Probably wont return */
|
||||
gpio_set_value(gpio, trigger);
|
||||
|
||||
panic("Halt failed\n");
|
||||
}
|
||||
|
||||
/* This IRQ means someone pressed the power button and it is waiting for us
|
||||
|
|
|
|||
|
|
@ -91,7 +91,6 @@ define_machine(socrates) {
|
|||
.setup_arch = socrates_setup_arch,
|
||||
.init_IRQ = socrates_pic_init,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -103,7 +103,6 @@ define_machine(stx_gp3) {
|
|||
.init_IRQ = stx_gp3_pic_init,
|
||||
.show_cpuinfo = stx_gp3_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -132,7 +132,6 @@ define_machine(tqm85xx) {
|
|||
.init_IRQ = tqm85xx_pic_init,
|
||||
.show_cpuinfo = tqm85xx_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -140,7 +140,6 @@ define_machine(twr_p1025) {
|
|||
.pcibios_fixup_bus = fsl_pcibios_fixup_bus,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -167,7 +167,6 @@ define_machine(xes_mpc8572) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -182,7 +181,6 @@ define_machine(xes_mpc8548) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
@ -197,7 +195,6 @@ define_machine(xes_mpc8540) {
|
|||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -204,7 +204,6 @@ define_machine(gef_ppc9a) {
|
|||
.init_IRQ = gef_ppc9a_init_irq,
|
||||
.show_cpuinfo = gef_ppc9a_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.time_init = mpc86xx_time_init,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
|
|
|
|||
|
|
@ -191,7 +191,6 @@ define_machine(gef_sbc310) {
|
|||
.init_IRQ = gef_sbc310_init_irq,
|
||||
.show_cpuinfo = gef_sbc310_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.time_init = mpc86xx_time_init,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
|
|
|
|||
|
|
@ -181,7 +181,6 @@ define_machine(gef_sbc610) {
|
|||
.init_IRQ = gef_sbc610_init_irq,
|
||||
.show_cpuinfo = gef_sbc610_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.time_init = mpc86xx_time_init,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
|
|
|
|||
|
|
@ -331,7 +331,6 @@ define_machine(mpc86xx_hpcd) {
|
|||
.setup_arch = mpc86xx_hpcd_setup_arch,
|
||||
.init_IRQ = mpc86xx_init_irq,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.time_init = mpc86xx_time_init,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
|
|
|
|||
|
|
@ -130,7 +130,6 @@ define_machine(mpc86xx_hpcn) {
|
|||
.init_IRQ = mpc86xx_init_irq,
|
||||
.show_cpuinfo = mpc86xx_hpcn_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.time_init = mpc86xx_time_init,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
|
|
|
|||
|
|
@ -111,7 +111,6 @@ define_machine(mvme7100) {
|
|||
.setup_arch = mvme7100_setup_arch,
|
||||
.init_IRQ = mpc86xx_init_irq,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.time_init = mpc86xx_time_init,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
|
|
|
|||
|
|
@ -82,7 +82,6 @@ define_machine(sbc8641) {
|
|||
.init_IRQ = mpc86xx_init_irq,
|
||||
.show_cpuinfo = sbc8641_show_cpuinfo,
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.time_init = mpc86xx_time_init,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
.progress = udbg_progress,
|
||||
|
|
|
|||
|
|
@ -393,7 +393,7 @@ static void __pSeries_lpar_hugepage_invalidate(unsigned long *slot,
|
|||
unsigned long *vpn, int count,
|
||||
int psize, int ssize)
|
||||
{
|
||||
unsigned long param[8];
|
||||
unsigned long param[PLPAR_HCALL9_BUFSIZE];
|
||||
int i = 0, pix = 0, rc;
|
||||
unsigned long flags = 0;
|
||||
int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE);
|
||||
|
|
@ -522,7 +522,7 @@ static void pSeries_lpar_flush_hash_range(unsigned long number, int local)
|
|||
unsigned long flags = 0;
|
||||
struct ppc64_tlb_batch *batch = this_cpu_ptr(&ppc64_tlb_batch);
|
||||
int lock_tlbie = !mmu_has_feature(MMU_FTR_LOCKLESS_TLBIE);
|
||||
unsigned long param[9];
|
||||
unsigned long param[PLPAR_HCALL9_BUFSIZE];
|
||||
unsigned long hash, index, shift, hidx, slot;
|
||||
real_pte_t pte;
|
||||
int psize, ssize;
|
||||
|
|
|
|||
|
|
@ -233,8 +233,6 @@ void __init cpm_reset(void)
|
|||
else
|
||||
out_be32(&siu_conf->sc_sdcr, 1);
|
||||
immr_unmap(siu_conf);
|
||||
|
||||
cpm_muram_init();
|
||||
}
|
||||
|
||||
static DEFINE_SPINLOCK(cmd_lock);
|
||||
|
|
|
|||
|
|
@ -66,10 +66,6 @@ void __init cpm2_reset(void)
|
|||
cpm2_immr = ioremap(get_immrbase(), CPM_MAP_SIZE);
|
||||
#endif
|
||||
|
||||
/* Reclaim the DP memory for our use.
|
||||
*/
|
||||
cpm_muram_init();
|
||||
|
||||
/* Tell everyone where the comm processor resides.
|
||||
*/
|
||||
cpmp = &cpm2_immr->im_cpm;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,21 @@
|
|||
#include <linux/of_gpio.h>
|
||||
#endif
|
||||
|
||||
static int __init cpm_init(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,cpm1");
|
||||
if (!np)
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,cpm2");
|
||||
if (!np)
|
||||
return -ENODEV;
|
||||
cpm_muram_init();
|
||||
of_node_put(np);
|
||||
return 0;
|
||||
}
|
||||
subsys_initcall(cpm_init);
|
||||
|
||||
#ifdef CONFIG_PPC_EARLY_DEBUG_CPM
|
||||
static u32 __iomem *cpm_udbg_txdesc;
|
||||
static u8 __iomem *cpm_udbg_txbuf;
|
||||
|
|
|
|||
|
|
@ -111,8 +111,7 @@ static struct pci_ops fsl_indirect_pcie_ops =
|
|||
.write = indirect_write_config,
|
||||
};
|
||||
|
||||
#define MAX_PHYS_ADDR_BITS 40
|
||||
static u64 pci64_dma_offset = 1ull << MAX_PHYS_ADDR_BITS;
|
||||
static u64 pci64_dma_offset;
|
||||
|
||||
#ifdef CONFIG_SWIOTLB
|
||||
static void setup_swiotlb_ops(struct pci_controller *hose)
|
||||
|
|
@ -132,12 +131,10 @@ static int fsl_pci_dma_set_mask(struct device *dev, u64 dma_mask)
|
|||
return -EIO;
|
||||
|
||||
/*
|
||||
* Fixup PCI devices that are able to DMA to above the physical
|
||||
* address width of the SoC such that we can address any internal
|
||||
* SoC address from across PCI if needed
|
||||
* Fix up PCI devices that are able to DMA to the large inbound
|
||||
* mapping that allows addressing any RAM address from across PCI.
|
||||
*/
|
||||
if ((dev_is_pci(dev)) &&
|
||||
dma_mask >= DMA_BIT_MASK(MAX_PHYS_ADDR_BITS)) {
|
||||
if (dev_is_pci(dev) && dma_mask >= pci64_dma_offset * 2 - 1) {
|
||||
set_dma_ops(dev, &dma_direct_ops);
|
||||
set_dma_offset(dev, pci64_dma_offset);
|
||||
}
|
||||
|
|
@ -387,6 +384,7 @@ static void setup_pci_atmu(struct pci_controller *hose)
|
|||
mem_log++;
|
||||
|
||||
piwar = (piwar & ~PIWAR_SZ_MASK) | (mem_log - 1);
|
||||
pci64_dma_offset = 1ULL << mem_log;
|
||||
|
||||
if (setup_inbound) {
|
||||
/* Setup inbound memory window */
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include <linux/fsl_devices.h>
|
||||
#include <linux/fs_enet_pd.h>
|
||||
#include <linux/fs_uart_pd.h>
|
||||
#include <linux/reboot.h>
|
||||
|
||||
#include <linux/atomic.h>
|
||||
#include <asm/io.h>
|
||||
|
|
@ -180,23 +181,38 @@ EXPORT_SYMBOL(get_baudrate);
|
|||
#if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
|
||||
static __be32 __iomem *rstcr;
|
||||
|
||||
static int fsl_rstcr_restart(struct notifier_block *this,
|
||||
unsigned long mode, void *cmd)
|
||||
{
|
||||
local_irq_disable();
|
||||
/* set reset control register */
|
||||
out_be32(rstcr, 0x2); /* HRESET_REQ */
|
||||
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static int __init setup_rstcr(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
|
||||
static struct notifier_block restart_handler = {
|
||||
.notifier_call = fsl_rstcr_restart,
|
||||
.priority = 128,
|
||||
};
|
||||
|
||||
for_each_node_by_name(np, "global-utilities") {
|
||||
if ((of_get_property(np, "fsl,has-rstcr", NULL))) {
|
||||
rstcr = of_iomap(np, 0) + 0xb0;
|
||||
if (!rstcr)
|
||||
if (!rstcr) {
|
||||
printk (KERN_ERR "Error: reset control "
|
||||
"register not mapped!\n");
|
||||
} else {
|
||||
register_restart_handler(&restart_handler);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!rstcr && ppc_md.restart == fsl_rstcr_restart)
|
||||
printk(KERN_ERR "No RSTCR register, warm reboot won't work\n");
|
||||
|
||||
of_node_put(np);
|
||||
|
||||
return 0;
|
||||
|
|
@ -204,15 +220,6 @@ static int __init setup_rstcr(void)
|
|||
|
||||
arch_initcall(setup_rstcr);
|
||||
|
||||
void __noreturn fsl_rstcr_restart(char *cmd)
|
||||
{
|
||||
local_irq_disable();
|
||||
if (rstcr)
|
||||
/* set reset control register */
|
||||
out_be32(rstcr, 0x2); /* HRESET_REQ */
|
||||
|
||||
while (1) ;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE)
|
||||
|
|
|
|||
|
|
@ -19,8 +19,6 @@ extern u32 fsl_get_sys_freq(void);
|
|||
struct spi_board_info;
|
||||
struct device_node;
|
||||
|
||||
extern void __noreturn fsl_rstcr_restart(char *cmd);
|
||||
|
||||
/* The different ports that the DIU can be connected to */
|
||||
enum fsl_diu_monitor_port {
|
||||
FSL_DIU_PORT_DVI, /* DVI */
|
||||
|
|
|
|||
|
|
@ -1249,7 +1249,7 @@ struct mpic * __init mpic_alloc(struct device_node *node,
|
|||
/* Pick the physical address from the device tree if unspecified */
|
||||
if (!phys_addr) {
|
||||
/* Check if it is DCR-based */
|
||||
if (of_get_property(node, "dcr-reg", NULL)) {
|
||||
if (of_property_read_bool(node, "dcr-reg")) {
|
||||
flags |= MPIC_USES_DCR;
|
||||
} else {
|
||||
struct resource r;
|
||||
|
|
|
|||
Loading…
Reference in a new issue