17f606aceSMark Haywood /* 27f606aceSMark Haywood * CDDL HEADER START 37f606aceSMark Haywood * 47f606aceSMark Haywood * The contents of this file are subject to the terms of the 57f606aceSMark Haywood * Common Development and Distribution License (the "License"). 67f606aceSMark Haywood * You may not use this file except in compliance with the License. 77f606aceSMark Haywood * 87f606aceSMark Haywood * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97f606aceSMark Haywood * or http://www.opensolaris.org/os/licensing. 107f606aceSMark Haywood * See the License for the specific language governing permissions 117f606aceSMark Haywood * and limitations under the License. 127f606aceSMark Haywood * 137f606aceSMark Haywood * When distributing Covered Code, include this CDDL HEADER in each 147f606aceSMark Haywood * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157f606aceSMark Haywood * If applicable, add the following below this CDDL HEADER, with the 167f606aceSMark Haywood * fields enclosed by brackets "[]" replaced with your own identifying 177f606aceSMark Haywood * information: Portions Copyright [yyyy] [name of copyright owner] 187f606aceSMark Haywood * 197f606aceSMark Haywood * CDDL HEADER END 207f606aceSMark Haywood */ 217f606aceSMark Haywood /* 220e751525SEric Saxe * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 237f606aceSMark Haywood * Use is subject to license terms. 247f606aceSMark Haywood */ 257f606aceSMark Haywood 267f606aceSMark Haywood /* 277f606aceSMark Haywood * CPU power management driver support for sun4u. 287f606aceSMark Haywood */ 297f606aceSMark Haywood #include <sys/ddi.h> 307f606aceSMark Haywood #include <sys/sunddi.h> 310e751525SEric Saxe #include <sys/cpupm.h> 327f606aceSMark Haywood #include <sys/cpudrv_mach.h> 337f606aceSMark Haywood #include <sys/machsystm.h> 347f606aceSMark Haywood 357f606aceSMark Haywood /* 367f606aceSMark Haywood * Change CPU speed. 377f606aceSMark Haywood */ 387f606aceSMark Haywood int 390e751525SEric Saxe cpudrv_change_speed(cpudrv_devstate_t *cpudsp, cpudrv_pm_spd_t *new_spd) 407f606aceSMark Haywood { 417f606aceSMark Haywood xc_one(cpudsp->cpu_id, (xcfunc_t *)cpu_change_speed, \ 427f606aceSMark Haywood (uint64_t)new_spd->speed, 0); 437f606aceSMark Haywood return (DDI_SUCCESS); 447f606aceSMark Haywood } 457f606aceSMark Haywood 467f606aceSMark Haywood /* 477f606aceSMark Haywood * Determine the cpu_id for the CPU device. 487f606aceSMark Haywood */ 497f606aceSMark Haywood boolean_t 500e751525SEric Saxe cpudrv_get_cpu_id(dev_info_t *dip, processorid_t *cpu_id) 517f606aceSMark Haywood { 527f606aceSMark Haywood return (dip_to_cpu_id(dip, cpu_id) == DDI_SUCCESS); 537f606aceSMark Haywood } 547f606aceSMark Haywood 557f606aceSMark Haywood /* 567f606aceSMark Haywood * A noop for this machine type. 577f606aceSMark Haywood */ 58*d5688513SMark Haywood /* ARGSUSED */ 597f606aceSMark Haywood boolean_t 60444f66e7SMark Haywood cpudrv_power_ready(cpu_t *cp) 617f606aceSMark Haywood { 627f606aceSMark Haywood return (B_TRUE); 637f606aceSMark Haywood } 647f606aceSMark Haywood 657f606aceSMark Haywood /* 667f606aceSMark Haywood * A noop for this machine type. 677f606aceSMark Haywood */ 687f606aceSMark Haywood /* ARGSUSED */ 697f606aceSMark Haywood boolean_t 700e751525SEric Saxe cpudrv_is_governor_thread(cpudrv_pm_t *cpupm) 717f606aceSMark Haywood { 727f606aceSMark Haywood return (B_FALSE); 737f606aceSMark Haywood } 747f606aceSMark Haywood 757f606aceSMark Haywood /* 767f606aceSMark Haywood * A noop for this machine type. 777f606aceSMark Haywood */ 787f606aceSMark Haywood /*ARGSUSED*/ 797f606aceSMark Haywood boolean_t 800e751525SEric Saxe cpudrv_mach_init(cpudrv_devstate_t *cpudsp) 817f606aceSMark Haywood { 827f606aceSMark Haywood return (B_TRUE); 837f606aceSMark Haywood } 847f606aceSMark Haywood 857f606aceSMark Haywood /* 867f606aceSMark Haywood * On SPARC all instances support power management unless attach fails. 870e751525SEric Saxe * In the case of attach failure, cpudrv_enabled will be false. 887f606aceSMark Haywood */ 890e751525SEric Saxe /*ARGSUSED*/ 907f606aceSMark Haywood boolean_t 910e751525SEric Saxe cpudrv_is_enabled(cpudrv_devstate_t *cpudsp) 927f606aceSMark Haywood { 930e751525SEric Saxe return (cpudrv_enabled); 940e751525SEric Saxe } 950e751525SEric Saxe 960e751525SEric Saxe void 970e751525SEric Saxe cpudrv_set_supp_freqs(cpudrv_devstate_t *cpudsp) 980e751525SEric Saxe { 990e751525SEric Saxe int *speeds; 1000e751525SEric Saxe uint_t nspeeds; 1010e751525SEric Saxe 1020e751525SEric Saxe CPUDRV_GET_SPEEDS(cpudsp, speeds, nspeeds); 1030e751525SEric Saxe if (nspeeds == 0) 1040e751525SEric Saxe return; 1050e751525SEric Saxe cpupm_set_supp_freqs(cpudsp->cp, speeds, nspeeds); 1060e751525SEric Saxe CPUDRV_FREE_SPEEDS(speeds, nspeeds); 1077f606aceSMark Haywood } 108