xref: /onnv-gate/usr/src/uts/sun4u/io/cpudrv_mach.c (revision 8906:e559381f1e2b)
17319SMark.Haywood@Sun.COM /*
27319SMark.Haywood@Sun.COM  * CDDL HEADER START
37319SMark.Haywood@Sun.COM  *
47319SMark.Haywood@Sun.COM  * The contents of this file are subject to the terms of the
57319SMark.Haywood@Sun.COM  * Common Development and Distribution License (the "License").
67319SMark.Haywood@Sun.COM  * You may not use this file except in compliance with the License.
77319SMark.Haywood@Sun.COM  *
87319SMark.Haywood@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97319SMark.Haywood@Sun.COM  * or http://www.opensolaris.org/os/licensing.
107319SMark.Haywood@Sun.COM  * See the License for the specific language governing permissions
117319SMark.Haywood@Sun.COM  * and limitations under the License.
127319SMark.Haywood@Sun.COM  *
137319SMark.Haywood@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
147319SMark.Haywood@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157319SMark.Haywood@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
167319SMark.Haywood@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
177319SMark.Haywood@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
187319SMark.Haywood@Sun.COM  *
197319SMark.Haywood@Sun.COM  * CDDL HEADER END
207319SMark.Haywood@Sun.COM  */
217319SMark.Haywood@Sun.COM /*
22*8906SEric.Saxe@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
237319SMark.Haywood@Sun.COM  * Use is subject to license terms.
247319SMark.Haywood@Sun.COM  */
257319SMark.Haywood@Sun.COM 
267319SMark.Haywood@Sun.COM /*
277319SMark.Haywood@Sun.COM  * CPU power management driver support for sun4u.
287319SMark.Haywood@Sun.COM  */
297319SMark.Haywood@Sun.COM #include <sys/ddi.h>
307319SMark.Haywood@Sun.COM #include <sys/sunddi.h>
31*8906SEric.Saxe@Sun.COM #include <sys/cpupm.h>
327319SMark.Haywood@Sun.COM #include <sys/cpudrv_mach.h>
337319SMark.Haywood@Sun.COM #include <sys/machsystm.h>
347319SMark.Haywood@Sun.COM 
357319SMark.Haywood@Sun.COM /*
367319SMark.Haywood@Sun.COM  * Change CPU speed.
377319SMark.Haywood@Sun.COM  */
387319SMark.Haywood@Sun.COM int
39*8906SEric.Saxe@Sun.COM cpudrv_change_speed(cpudrv_devstate_t *cpudsp, cpudrv_pm_spd_t *new_spd)
407319SMark.Haywood@Sun.COM {
417319SMark.Haywood@Sun.COM 	xc_one(cpudsp->cpu_id, (xcfunc_t *)cpu_change_speed, \
427319SMark.Haywood@Sun.COM 	    (uint64_t)new_spd->speed, 0);
437319SMark.Haywood@Sun.COM 	return (DDI_SUCCESS);
447319SMark.Haywood@Sun.COM }
457319SMark.Haywood@Sun.COM 
467319SMark.Haywood@Sun.COM /*
477319SMark.Haywood@Sun.COM  * Determine the cpu_id for the CPU device.
487319SMark.Haywood@Sun.COM  */
497319SMark.Haywood@Sun.COM boolean_t
50*8906SEric.Saxe@Sun.COM cpudrv_get_cpu_id(dev_info_t *dip,  processorid_t *cpu_id)
517319SMark.Haywood@Sun.COM {
527319SMark.Haywood@Sun.COM 	return (dip_to_cpu_id(dip, cpu_id) == DDI_SUCCESS);
537319SMark.Haywood@Sun.COM }
547319SMark.Haywood@Sun.COM 
557319SMark.Haywood@Sun.COM /*
567319SMark.Haywood@Sun.COM  * A noop for this machine type.
577319SMark.Haywood@Sun.COM  */
587319SMark.Haywood@Sun.COM boolean_t
59*8906SEric.Saxe@Sun.COM cpudrv_power_ready(void)
607319SMark.Haywood@Sun.COM {
617319SMark.Haywood@Sun.COM 	return (B_TRUE);
627319SMark.Haywood@Sun.COM }
637319SMark.Haywood@Sun.COM 
647319SMark.Haywood@Sun.COM /*
657319SMark.Haywood@Sun.COM  * A noop for this machine type.
667319SMark.Haywood@Sun.COM  */
677319SMark.Haywood@Sun.COM /* ARGSUSED */
687319SMark.Haywood@Sun.COM boolean_t
69*8906SEric.Saxe@Sun.COM cpudrv_is_governor_thread(cpudrv_pm_t *cpupm)
707319SMark.Haywood@Sun.COM {
717319SMark.Haywood@Sun.COM 	return (B_FALSE);
727319SMark.Haywood@Sun.COM }
737319SMark.Haywood@Sun.COM 
747319SMark.Haywood@Sun.COM /*
757319SMark.Haywood@Sun.COM  * A noop for this machine type.
767319SMark.Haywood@Sun.COM  */
777319SMark.Haywood@Sun.COM /*ARGSUSED*/
787319SMark.Haywood@Sun.COM boolean_t
79*8906SEric.Saxe@Sun.COM cpudrv_mach_init(cpudrv_devstate_t *cpudsp)
807319SMark.Haywood@Sun.COM {
817319SMark.Haywood@Sun.COM 	return (B_TRUE);
827319SMark.Haywood@Sun.COM }
837319SMark.Haywood@Sun.COM 
847319SMark.Haywood@Sun.COM /*
85*8906SEric.Saxe@Sun.COM  * On SPARC all instances support power management unless attach fails.
86*8906SEric.Saxe@Sun.COM  * In the case of attach failure, cpudrv_enabled will be false.
877319SMark.Haywood@Sun.COM  */
887319SMark.Haywood@Sun.COM /*ARGSUSED*/
89*8906SEric.Saxe@Sun.COM boolean_t
90*8906SEric.Saxe@Sun.COM cpudrv_is_enabled(cpudrv_devstate_t *cpudsp)
917319SMark.Haywood@Sun.COM {
92*8906SEric.Saxe@Sun.COM 	return (cpudrv_enabled);
937319SMark.Haywood@Sun.COM }
947319SMark.Haywood@Sun.COM 
95*8906SEric.Saxe@Sun.COM void
96*8906SEric.Saxe@Sun.COM cpudrv_set_supp_freqs(cpudrv_devstate_t *cpudsp)
977319SMark.Haywood@Sun.COM {
98*8906SEric.Saxe@Sun.COM 	int		*speeds;
99*8906SEric.Saxe@Sun.COM 	uint_t		nspeeds;
100*8906SEric.Saxe@Sun.COM 
101*8906SEric.Saxe@Sun.COM 	CPUDRV_GET_SPEEDS(cpudsp, speeds, nspeeds);
102*8906SEric.Saxe@Sun.COM 	if (nspeeds == 0)
103*8906SEric.Saxe@Sun.COM 		return;
104*8906SEric.Saxe@Sun.COM 	cpupm_set_supp_freqs(cpudsp->cp, speeds, nspeeds);
105*8906SEric.Saxe@Sun.COM 	CPUDRV_FREE_SPEEDS(speeds, nspeeds);
1067319SMark.Haywood@Sun.COM }
107