From owner-p4-projects@FreeBSD.ORG Fri Mar 14 04:12:55 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6798A1065676; Fri, 14 Mar 2008 04:12:55 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 270601065673 for ; Fri, 14 Mar 2008 04:12:55 +0000 (UTC) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 0B9078FC21 for ; Fri, 14 Mar 2008 04:12:54 +0000 (UTC) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m2E4Cs2l080924 for ; Fri, 14 Mar 2008 04:12:54 GMT (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m2E4CsWW080922 for perforce@freebsd.org; Fri, 14 Mar 2008 04:12:54 GMT (envelope-from marcel@freebsd.org) Date: Fri, 14 Mar 2008 04:12:54 GMT Message-Id: <200803140412.m2E4CsWW080922@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar To: Perforce Change Reviews Cc: Subject: PERFORCE change 137679 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Mar 2008 04:12:55 -0000 http://perforce.freebsd.org/chv.cgi?CH=137679 Change 137679 by marcel@marcel_xcllnt on 2008/03/14 04:12:39 Make the soft reset of the AP work. We actually get to the EXC_RST vector on the second CPU: Waking up CPU 1 (dev=ff880bc8) XXX: 48000015 00000000 00000000 00000000 00000000 7c6802a6 XXX: 48000015 00000104 00043010 0000c000 00001000 7c6802a6 Most importantly: MSR=PSL_ME Affected files ... .. //depot/projects/powerpc/sys/powerpc/aim/mp_cpudep.c#2 edit Differences ... ==== //depot/projects/powerpc/sys/powerpc/aim/mp_cpudep.c#2 (text+ko) ==== @@ -38,10 +38,13 @@ #include #include #include +#include #include #include +extern void *rstcode; + static int powerpc_smp_fill_cpuref(struct cpuref *cpuref, phandle_t cpu) { @@ -127,10 +130,25 @@ return (powerpc_smp_fill_cpuref(cpuref, bsp)); } +static void +dump_rstvec(void) +{ + uint32_t buf[6]; + + mtmsr(mfmsr() & ~(PSL_IR | PSL_DR)); + isync(); + bcopy((void *)EXC_RST, buf, sizeof(buf)); + mtmsr(mfmsr() | PSL_IR | PSL_DR); + + printf("XXX: %08x %08x %08x %08x %08x %08x\n", buf[0], buf[1], buf[2], + buf[3], buf[4], buf[5]); +} + int powerpc_smp_start_cpu(struct pcpu *pc) { phandle_t cpu; + volatile uint8_t *rstvec; int res, reset; cpu = pc->pc_hwref; @@ -138,8 +156,19 @@ if (res < 0) return (ENXIO); - printf("XXX: reset=%d\n", reset); - *(u_char *)(0x80000000 + reset) = 4; - *(u_char *)(0x80000000 + reset) = 5; + dump_rstvec(); + + rstvec = (uint8_t *)(0x80000000 + reset); + + *rstvec = 4; + __asm __volatile("sync"); + DELAY(1); + *rstvec = 0; + __asm __volatile("sync"); + + DELAY(1000); + + dump_rstvec(); + return (0); }