From: Jean Delvare <khali@linux-fr.org>
To: LKML <linux-kernel@vger.kernel.org>,
LM Sensors <lm-sensors@lm-sensors.org>
Cc: Greg KH <greg@kroah.com>
Subject: [PATCH 2.6] (10/11) hwmon vs i2c, second round
Date: Sun, 31 Jul 2005 22:02:24 +0200 [thread overview]
Message-ID: <20050731220224.23136906.khali@linux-fr.org> (raw)
In-Reply-To: <20050731205933.2e2a957f.khali@linux-fr.org>
I see very little reason why vid_from_reg and vid_to_reg are inlined.
The former is not exactly short, and they are never called in speed
critical areas. Uninlining them should cause little performance loss
if any, and saves a signficant space and compilation time as well.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
drivers/hwmon/hwmon-vid.c | 99 ++++++++++++++++++++++++++++++++++++++++++++++
include/linux/hwmon-vid.h | 90 ++---------------------------------------
2 files changed, 104 insertions(+), 85 deletions(-)
--- linux-2.6.13-rc4.orig/drivers/hwmon/hwmon-vid.c 2005-07-31 17:00:12.000000000 +0200
+++ linux-2.6.13-rc4/drivers/hwmon/hwmon-vid.c 2005-07-31 20:55:47.000000000 +0200
@@ -3,6 +3,10 @@
Copyright (c) 2004 Rudolf Marek <r.marek@sh.cvut.cz>
+ Partly imported from i2c-vid.h of the lm_sensors project
+ Copyright (c) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com>
+ With assistance from Trent Piepho <xyzzy@speakeasy.org>
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
@@ -23,6 +27,99 @@
#include <linux/kernel.h>
#include <linux/hwmon-vid.h>
+/*
+ Common code for decoding VID pins.
+
+ References:
+
+ For VRM 8.4 to 9.1, "VRM x.y DC-DC Converter Design Guidelines",
+ available at http://developer.intel.com/.
+
+ For VRD 10.0 and up, "VRD x.y Design Guide",
+ available at http://developer.intel.com/.
+
+ AMD Opteron processors don't follow the Intel specifications.
+ I'm going to "make up" 2.4 as the spec number for the Opterons.
+ No good reason just a mnemonic for the 24x Opteron processor
+ series.
+
+ Opteron VID encoding is:
+ 00000 = 1.550 V
+ 00001 = 1.525 V
+ . . . .
+ 11110 = 0.800 V
+ 11111 = 0.000 V (off)
+*/
+
+/* vrm is the VRM/VRD document version multiplied by 10.
+ val is the 4-, 5- or 6-bit VID code.
+ Returned value is in mV to avoid floating point in the kernel. */
+int vid_from_reg(int val, int vrm)
+{
+ int vid;
+
+ switch(vrm) {
+
+ case 0:
+ return 0;
+
+ case 100: /* VRD 10.0 */
+ if((val & 0x1f) == 0x1f)
+ return 0;
+ if((val & 0x1f) <= 0x09 || val == 0x0a)
+ vid = 10875 - (val & 0x1f) * 250;
+ else
+ vid = 18625 - (val & 0x1f) * 250;
+ if(val & 0x20)
+ vid -= 125;
+ vid /= 10; /* only return 3 dec. places for now */
+ return vid;
+
+ case 24: /* Opteron processor */
+ return(val == 0x1f ? 0 : 1550 - val * 25);
+
+ case 91: /* VRM 9.1 */
+ case 90: /* VRM 9.0 */
+ return(val == 0x1f ? 0 :
+ 1850 - val * 25);
+
+ case 85: /* VRM 8.5 */
+ return((val & 0x10 ? 25 : 0) +
+ ((val & 0x0f) > 0x04 ? 2050 : 1250) -
+ ((val & 0x0f) * 50));
+
+ case 84: /* VRM 8.4 */
+ val &= 0x0f;
+ /* fall through */
+ default: /* VRM 8.2 */
+ return(val == 0x1f ? 0 :
+ val & 0x10 ? 5100 - (val) * 100 :
+ 2050 - (val) * 50);
+ }
+}
+
+/* vrm is the VRM/VRD document version multiplied by 10.
+ val is in mV to avoid floating point in the kernel.
+ Returned value is the 4-, 5- or 6-bit VID code.
+ Note that only VRM 9.x is supported for now. */
+int vid_to_reg(int val, int vrm)
+{
+ switch (vrm) {
+ case 91: /* VRM 9.1 */
+ case 90: /* VRM 9.0 */
+ return ((val >= 1100) && (val <= 1850) ?
+ ((18499 - val * 10) / 25 + 5) / 10 : -1);
+ default:
+ return -1;
+ }
+}
+
+
+/*
+ After this point is the code to automatically determine which
+ VRM/VRD specification should be used depending on the CPU.
+*/
+
struct vrm_model {
u8 vendor;
u8 eff_family;
@@ -96,6 +193,8 @@
}
#endif
+EXPORT_SYMBOL(vid_from_reg);
+EXPORT_SYMBOL(vid_to_reg);
EXPORT_SYMBOL(vid_which_vrm);
MODULE_AUTHOR("Rudolf Marek <r.marek@sh.cvut.cz>");
--- linux-2.6.13-rc4.orig/include/linux/hwmon-vid.h 2005-07-31 17:00:35.000000000 +0200
+++ linux-2.6.13-rc4/include/linux/hwmon-vid.h 2005-07-31 20:55:47.000000000 +0200
@@ -20,91 +20,11 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/*
- This file contains common code for decoding VID pins.
- This file is #included in various chip drivers in this directory.
- As the user is unlikely to load more than one driver which
- includes this code we don't worry about the wasted space.
- Reference: VRM x.y DC-DC Converter Design Guidelines,
- available at http://developer.intel.com
-*/
-
-/*
- AMD Opteron processors don't follow the Intel VRM spec.
- I'm going to "make up" 2.4 as the VRM spec for the Opterons.
- No good reason just a mnemonic for the 24x Opteron processor
- series
-
- Opteron VID encoding is:
-
- 00000 = 1.550 V
- 00001 = 1.525 V
- . . . .
- 11110 = 0.800 V
- 11111 = 0.000 V (off)
- */
-
-/*
- Legal val values 0x00 - 0x1f; except for VRD 10.0, 0x00 - 0x3f.
- vrm is the Intel VRM document version.
- Note: vrm version is scaled by 10 and the return value is scaled by 1000
- to avoid floating point in the kernel.
-*/
+#ifndef _LINUX_HWMON_VID_H
+#define _LINUX_HWMON_VID_H
+int vid_from_reg(int val, int vrm);
+int vid_to_reg(int val, int vrm);
int vid_which_vrm(void);
-static inline int vid_from_reg(int val, int vrm)
-{
- int vid;
-
- switch(vrm) {
-
- case 0:
- return 0;
-
- case 100: /* VRD 10.0 */
- if((val & 0x1f) == 0x1f)
- return 0;
- if((val & 0x1f) <= 0x09 || val == 0x0a)
- vid = 10875 - (val & 0x1f) * 250;
- else
- vid = 18625 - (val & 0x1f) * 250;
- if(val & 0x20)
- vid -= 125;
- vid /= 10; /* only return 3 dec. places for now */
- return vid;
-
- case 24: /* Opteron processor */
- return(val == 0x1f ? 0 : 1550 - val * 25);
-
- case 91: /* VRM 9.1 */
- case 90: /* VRM 9.0 */
- return(val == 0x1f ? 0 :
- 1850 - val * 25);
-
- case 85: /* VRM 8.5 */
- return((val & 0x10 ? 25 : 0) +
- ((val & 0x0f) > 0x04 ? 2050 : 1250) -
- ((val & 0x0f) * 50));
-
- case 84: /* VRM 8.4 */
- val &= 0x0f;
- /* fall through */
- default: /* VRM 8.2 */
- return(val == 0x1f ? 0 :
- val & 0x10 ? 5100 - (val) * 100 :
- 2050 - (val) * 50);
- }
-}
-
-static inline int vid_to_reg(int val, int vrm)
-{
- switch (vrm) {
- case 91: /* VRM 9.1 */
- case 90: /* VRM 9.0 */
- return ((val >= 1100) && (val <= 1850) ?
- ((18499 - val * 10) / 25 + 5) / 10 : -1);
- default:
- return -1;
- }
-}
+#endif /* _LINUX_HWMON_VID_H */
--
Jean Delvare
next prev parent reply other threads:[~2005-07-31 20:03 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-31 18:59 [PATCH 2.6] (0/11) hwmon vs i2c, second round Jean Delvare
2005-07-31 19:20 ` [PATCH 2.6] (1/11) " Jean Delvare
2005-07-31 19:33 ` [PATCH 2.6] (2/11) " Jean Delvare
2005-07-31 19:36 ` [PATCH 2.6] (3/11) " Jean Delvare
2005-07-31 19:42 ` [PATCH 2.6] (4/11) " Jean Delvare
2005-07-31 19:45 ` [PATCH 2.6] (5/11) " Jean Delvare
2005-07-31 19:49 ` [PATCH 2.6] (6/11) " Jean Delvare
2005-07-31 19:52 ` [PATCH 2.6] (7/11) " Jean Delvare
2005-07-31 19:54 ` [PATCH 2.6] (8/11) " Jean Delvare
2005-07-31 19:57 ` [PATCH 2.6] (9/11) " Jean Delvare
2005-07-31 20:02 ` Jean Delvare [this message]
2005-07-31 20:56 ` [PATCH 2.6] (10/11) " Alexey Dobriyan
2005-07-31 21:02 ` Jean Delvare
2005-08-01 20:50 ` [PATCH 2.6] (10/11, revised) " Jean Delvare
2005-07-31 20:12 ` [PATCH 2.6] (11/11) " Jean Delvare
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050731220224.23136906.khali@linux-fr.org \
--to=khali@linux-fr.org \
--cc=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lm-sensors@lm-sensors.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox