Module Name: src Committed By: nonaka Date: Fri Jan 23 09:02:42 UTC 2015
Modified Files: src/sys/arch/powerpc/booke: e500_intr.c Log Message: Initialize timer DR. To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 src/sys/arch/powerpc/booke/e500_intr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/powerpc/booke/e500_intr.c diff -u src/sys/arch/powerpc/booke/e500_intr.c:1.31 src/sys/arch/powerpc/booke/e500_intr.c:1.32 --- src/sys/arch/powerpc/booke/e500_intr.c:1.31 Fri Jan 23 07:27:05 2015 +++ src/sys/arch/powerpc/booke/e500_intr.c Fri Jan 23 09:02:42 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: e500_intr.c,v 1.31 2015/01/23 07:27:05 nonaka Exp $ */ +/* $NetBSD: e500_intr.c,v 1.32 2015/01/23 09:02:42 nonaka Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. * All rights reserved. @@ -41,7 +41,7 @@ #define __INTR_PRIVATE #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: e500_intr.c,v 1.31 2015/01/23 07:27:05 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: e500_intr.c,v 1.32 2015/01/23 09:02:42 nonaka Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -409,6 +409,7 @@ static void e500_intr_cpu_attach(struct static void e500_intr_cpu_hatch(struct cpu_info *ci); static void e500_intr_cpu_send_ipi(cpuid_t, uintptr_t); static void e500_intr_init(void); +static void e500_intr_init_precpu(void); static const char *e500_intr_string(int, int, char *, size_t); static const char *e500_intr_typename(int); static void e500_critintr(struct trapframe *tf); @@ -1145,6 +1146,22 @@ e500_intr_init(void) } static void +e500_intr_init_precpu(void) +{ + struct cpu_info const *ci = curcpu(); + struct cpu_softc * const cpu = ci->ci_softc; + bus_addr_t dr; + + /* + * timer's DR is set to be delivered to cpu0 as initial value. + */ + for (u_int irq = 0; irq < e500_intr_info.ii_timer_sources; irq++) { + dr = OPENPIC_GTDR(ci->ci_cpuid, irq); + openpic_write(cpu, dr, 0); /* stop delivery */ + } +} + +static void e500_idlespin(void) { KASSERTMSG(curcpu()->ci_cpl == IPL_NONE, @@ -1312,6 +1329,10 @@ e500_ipi_intr(void *v) static void e500_intr_cpu_hatch(struct cpu_info *ci) { + + /* Initialize percpu interupts. */ + e500_intr_init_precpu(); + /* * Establish clock interrupt for this CPU. */