From owner-svn-src-all@FreeBSD.ORG Sun May 16 22:01:44 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 046E7106566C; Sun, 16 May 2010 22:01:44 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (unknown [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E61CB8FC15; Sun, 16 May 2010 22:01:43 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o4GM1hej027921; Sun, 16 May 2010 22:01:43 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o4GM1h8W027917; Sun, 16 May 2010 22:01:43 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201005162201.o4GM1h8W027917@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 16 May 2010 22:01:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r208172 - in head/sys: dev/ofw powerpc/aim powerpc/ofw X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 16 May 2010 22:01:44 -0000 Author: nwhitehorn Date: Sun May 16 22:01:43 2010 New Revision: 208172 URL: http://svn.freebsd.org/changeset/base/208172 Log: Pull OF_quiesce() out of the MI Open Firmware layer and entirely into PPC ofw_machdep.c, in recognition of its state as a machine specific hack. Requested by: marius Modified: head/sys/dev/ofw/ofw_if.m head/sys/dev/ofw/ofw_standard.c head/sys/dev/ofw/openfirm.c head/sys/dev/ofw/openfirm.h head/sys/powerpc/aim/ofw_machdep.c head/sys/powerpc/ofw/ofw_real.c Modified: head/sys/dev/ofw/ofw_if.m ============================================================================== --- head/sys/dev/ofw/ofw_if.m Sun May 16 21:48:39 2010 (r208171) +++ head/sys/dev/ofw/ofw_if.m Sun May 16 22:01:43 2010 (r208172) @@ -340,13 +340,6 @@ METHOD void release { # Commands for returning control to the firmware /** - * @brief Turn off firmware background activities - */ -METHOD void quiesce { - ofw_t _ofw; -}; - -/** * @brief Temporarily return control to firmware. */ METHOD void enter { Modified: head/sys/dev/ofw/ofw_standard.c ============================================================================== --- head/sys/dev/ofw/ofw_standard.c Sun May 16 21:48:39 2010 (r208171) +++ head/sys/dev/ofw/ofw_standard.c Sun May 16 22:01:43 2010 (r208172) @@ -105,7 +105,6 @@ static ssize_t ofw_std_write(ofw_t ofw, static int ofw_std_seek(ofw_t ofw, ihandle_t instance, uint64_t pos); static caddr_t ofw_std_claim(ofw_t ofw, void *virt, size_t size, u_int align); static void ofw_std_release(ofw_t ofw, void *virt, size_t size); -static void ofw_std_quiesce(ofw_t ofw); static void ofw_std_enter(ofw_t ofw); static void ofw_std_exit(ofw_t ofw); @@ -134,7 +133,6 @@ static ofw_method_t ofw_std_methods[] = OFWMETHOD(ofw_seek, ofw_std_seek), OFWMETHOD(ofw_claim, ofw_std_claim), OFWMETHOD(ofw_release, ofw_std_release), - OFWMETHOD(ofw_quiesce, ofw_std_quiesce), OFWMETHOD(ofw_enter, ofw_std_enter), OFWMETHOD(ofw_exit, ofw_std_exit), @@ -732,23 +730,6 @@ ofw_std_release(ofw_t ofw, void *virt, s * Control transfer functions */ -/* Turn off OF background tasks */ -static void -ofw_std_quiesce(ofw_t ofw) -{ - struct { - cell_t name; - cell_t nargs; - cell_t nreturns; - } args = { - (cell_t)"quiesce", - 0, - 0, - }; - - openfirmware(&args); -} - /* Suspend and drop back to the Open Firmware interface. */ static void ofw_std_enter(ofw_t ofw) Modified: head/sys/dev/ofw/openfirm.c ============================================================================== --- head/sys/dev/ofw/openfirm.c Sun May 16 21:48:39 2010 (r208171) +++ head/sys/dev/ofw/openfirm.c Sun May 16 22:01:43 2010 (r208172) @@ -409,15 +409,6 @@ OF_release(void *virt, size_t size) * Control transfer functions */ -/* Turn off OF background tasks */ -void -OF_quiesce() -{ - - OFW_QUIESCE(ofw_obj); -} - - /* Suspend and drop back to the Open Firmware interface. */ void OF_enter() Modified: head/sys/dev/ofw/openfirm.h ============================================================================== --- head/sys/dev/ofw/openfirm.h Sun May 16 21:48:39 2010 (r208171) +++ head/sys/dev/ofw/openfirm.h Sun May 16 22:01:43 2010 (r208172) @@ -133,7 +133,6 @@ void *OF_claim(void *virtrequest, size_ void OF_release(void *virt, size_t size); /* Control transfer functions */ -void OF_quiesce(void); void OF_enter(void); void OF_exit(void) __attribute__((noreturn)); Modified: head/sys/powerpc/aim/ofw_machdep.c ============================================================================== --- head/sys/powerpc/aim/ofw_machdep.c Sun May 16 21:48:39 2010 (r208171) +++ head/sys/powerpc/aim/ofw_machdep.c Sun May 16 22:01:43 2010 (r208172) @@ -77,6 +77,7 @@ static int (*ofwcall)(void *); static void *fdt; int ofw_real_mode; +static void ofw_quiesce(void); static int openfirmware(void *args); /* @@ -281,8 +282,6 @@ OF_initial_setup(void *fdt_ptr, void *ju boolean_t OF_bootstrap() { - char model[32]; - phandle_t rootnode; boolean_t status = FALSE; mtx_init(&ofw_mutex, "open firmware", NULL, MTX_DEF); @@ -302,12 +301,7 @@ OF_bootstrap() * On some machines, we need to quiesce OF to turn off * background processes. */ - rootnode = OF_finddevice("/"); - if (OF_getprop(rootnode, "model", model, sizeof(model)) > 0) { - if (strcmp(model, "PowerMac11,2") == 0 || - strcmp(model, "PowerMac12,1") == 0) - OF_quiesce(); - } + ofw_quiesce(); } else { status = OF_install(OFW_FDT, 0); @@ -320,6 +314,39 @@ OF_bootstrap() return (status); } +static void +ofw_quiesce(void) +{ + phandle_t rootnode; + char model[32]; + struct { + cell_t name; + cell_t nargs; + cell_t nreturns; + } args; + + /* + * Only quiesce Open Firmware on PowerMac11,2 and 12,1. It is + * necessary there to shut down a background thread doing fan + * management, and is harmful on other machines. + * + * Note: we don't need to worry about which OF module we are + * using since this is called only from very early boot, within + * OF's boot context. + */ + + rootnode = OF_finddevice("/"); + if (OF_getprop(rootnode, "model", model, sizeof(model)) > 0) { + if (strcmp(model, "PowerMac11,2") == 0 || + strcmp(model, "PowerMac12,1") == 0) { + args.name = (cell_t)(uintptr_t)"quiesce"; + args.nargs = 0; + args.nreturns = 0; + openfirmware(&args); + } + } +} + static int openfirmware(void *args) { Modified: head/sys/powerpc/ofw/ofw_real.c ============================================================================== --- head/sys/powerpc/ofw/ofw_real.c Sun May 16 21:48:39 2010 (r208171) +++ head/sys/powerpc/ofw/ofw_real.c Sun May 16 22:01:43 2010 (r208172) @@ -106,7 +106,6 @@ static ssize_t ofw_real_write(ofw_t, iha static int ofw_real_seek(ofw_t, ihandle_t instance, u_int64_t pos); static caddr_t ofw_real_claim(ofw_t, void *virt, size_t size, u_int align); static void ofw_real_release(ofw_t, void *virt, size_t size); -static void ofw_real_quiesce(ofw_t); static void ofw_real_enter(ofw_t); static void ofw_real_exit(ofw_t); @@ -134,7 +133,6 @@ static ofw_method_t ofw_real_methods[] = OFWMETHOD(ofw_seek, ofw_real_seek), OFWMETHOD(ofw_claim, ofw_real_claim), OFWMETHOD(ofw_release, ofw_real_release), - OFWMETHOD(ofw_quiesce, ofw_real_quiesce), OFWMETHOD(ofw_enter, ofw_real_enter), OFWMETHOD(ofw_exit, ofw_real_exit), @@ -891,27 +889,6 @@ ofw_real_release(ofw_t ofw, void *virt, * Control transfer functions */ -/* Turn off OF background tasks */ -static void -ofw_real_quiesce(ofw_t ofw) -{ - vm_offset_t argsptr; - struct { - cell_t name; - cell_t nargs; - cell_t nreturns; - } args; - - args.name = (cell_t)(uintptr_t)"quiesce"; - args.nargs = 0; - args.nreturns = 0; - - ofw_real_start(); - argsptr = ofw_real_map(&args, sizeof(args)); - openfirmware((void *)argsptr); - ofw_real_stop(); -} - /* Suspend and drop back to the Open Firmware interface. */ static void ofw_real_enter(ofw_t ofw)