From owner-freebsd-acpi@FreeBSD.ORG Sat Jun 16 05:06:36 2007 Return-Path: X-Original-To: acpi@freebsd.org Delivered-To: freebsd-acpi@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 55F0C16A400 for ; Sat, 16 Jun 2007 05:06:36 +0000 (UTC) (envelope-from nate@root.org) Received: from root.org (root.org [67.118.192.226]) by mx1.freebsd.org (Postfix) with ESMTP id 39BD013C468 for ; Sat, 16 Jun 2007 05:06:36 +0000 (UTC) (envelope-from nate@root.org) Received: (qmail 24030 invoked from network); 16 Jun 2007 03:00:58 -0000 Received: from ppp-71-139-42-13.dsl.snfc21.pacbell.net (HELO ?10.0.0.15?) (nate-mail@71.139.42.13) by root.org with ESMTPA; 16 Jun 2007 03:00:58 -0000 Message-ID: <46735262.50601@root.org> Date: Fri, 15 Jun 2007 20:00:50 -0700 From: Nate Lawson User-Agent: Thunderbird 2.0.0.0 (X11/20070511) MIME-Version: 1.0 To: current X-Enigmail-Version: 0.95.0 Content-Type: multipart/mixed; boundary="------------050800030600070904060503" Cc: acpi@freebsd.org Subject: smi speedstep patch X-BeenThere: freebsd-acpi@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: ACPI and power management development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 Jun 2007 05:06:36 -0000 This is a multi-part message in MIME format. --------------050800030600070904060503 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit If you have a pentium 3 that works for speedstep, please try this patch. It fixes the PAE case. Compile-tested. -- Nate --------------050800030600070904060503 Content-Type: text/x-patch; name="smist.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="smist.diff" Index: sys/i386/cpufreq/smist.c =================================================================== RCS file: /home/ncvs/src/sys/i386/cpufreq/smist.c,v retrieving revision 1.1 diff -d -u -r1.1 smist.c --- sys/i386/cpufreq/smist.c 19 Apr 2005 16:38:24 -0000 1.1 +++ sys/i386/cpufreq/smist.c 16 Jun 2007 02:42:03 -0000 @@ -45,6 +45,7 @@ #include #include +#include #include #include @@ -71,6 +72,8 @@ struct cf_setting sets[2]; /* Only two settings. */ }; +static char smist_magic[] = "Copyright (c) 1999 Intel Corporation"; + static void smist_identify(driver_t *driver, device_t parent); static int smist_probe(device_t dev); static int smist_attach(device_t dev); @@ -150,16 +153,39 @@ static int set_ownership(device_t dev) { - int result; struct smist_softc *sc; - vm_paddr_t pmagic; - static char magic[] = "Copyright (c) 1999 Intel Corporation"; + bus_dma_tag_t tag; + bus_dmamap_t map; + void *magic_buf; + int result; + /* + * Specify the region to store the magic string. Since its address is + * passed to the BIOS in a 32-bit register, we have to make sure it is + * located in a buffer below 4 GB (i.e., for PAE.) + */ sc = device_get_softc(dev); - if (!sc) + if (bus_dma_tag_create(/*parent*/ NULL, + /*alignment*/ PAGE_SIZE, /*no boundary*/ 0, + /*lowaddr*/ 0, /*highaddr*/ (1<<31), NULL, NULL, + /*maxsize*/ PAGE_SIZE, /*segments*/ 1, /*maxsegsize*/ PAGE_SIZE, + 0, busdma_lock_mutex, &Giant, &tag) != 0) { + device_printf(dev, "can't create mem tag\n"); return (ENXIO); - - pmagic = vtophys(magic); + } + if (bus_dmamem_alloc(tag, &magic_buf, BUS_DMA_NOWAIT, &map) != 0) { + bus_dma_tag_destroy(tag); + device_printf(dev, "can't alloc mapped mem\n"); + return (ENXIO); + } + if (bus_dmamap_load(tag, map, magic_buf, PAGE_SIZE, NULL, NULL, + BUS_DMA_NOWAIT) != 0) { + bus_dmamem_free(tag, magic_buf, map); + bus_dma_tag_destroy(tag); + device_printf(dev, "can't load mem\n"); + return (ENXIO); + }; + strlcpy(magic_buf, smist_magic, PAGE_SIZE); __asm __volatile( "movl $-1, %%edi\n\t" @@ -169,11 +195,14 @@ "b" (0), "c" (0), "d" (sc->smi_cmd), - "S" (pmagic) + "S" ((u_int)(uintptr_t)magic_buf) ); DPRINT(dev, "taking ownership over BIOS return %d\n", result); + bus_dmamap_unload(tag, map); + bus_dmamem_free(tag, magic_buf, map); + bus_dma_tag_destroy(tag); return (result ? ENXIO : 0); } --------------050800030600070904060503--