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