Remove jedec_ts(4)

The jedec_ts(4) driver has been marked as deprecated in stable/11, and is
now being removed from -HEAD. Add a notice in UPDATING, and update the few
remaining references (regarding jedec_dimm(4)'s compatibility and history)
to reflect the fact that jedec_ts(4) is now deleted.

Reviewed by:	avg
Relnotes:	yes
Differential Revision:	https://reviews.freebsd.org/D16537
This commit is contained in:
Ravi Pokala 2018-08-01 08:24:34 +00:00
parent b151226550
commit b598845049
10 changed files with 12 additions and 444 deletions

View File

@ -31,6 +31,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW:
disable the most expensive debugging functionality run
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
20180731:
The jedec_ts(4) driver has been removed. A superset of its functionality
is available in the jedec_dimm(4) driver, and the manpage for that
driver includes migration instructions. If you have "device jedec_ts"
in your kernel configuration file, it must be removed.
20180730:
amd64/GENERIC now has EFI runtime services, EFIRT, enabled by default.
This should have no effect if the kernel is booted via BIOS/legacy boot.

View File

@ -241,7 +241,6 @@ MAN= aac.4 \
ixl.4 \
ixlv.4 \
jedec_dimm.4 \
jedec_ts.4 \
jme.4 \
joy.4 \
kbdmux.4 \

View File

@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd July 24, 2018
.Dd July 31, 2018
.Dt JEDEC_DIMM 4
.Os
.Sh NAME
@ -164,7 +164,7 @@ dev.jedec_dimm.6.type: DDR4
.Ed
.Sh COMPATIBILITY
.Nm
implements a superset of the functionality of
implements a superset of the functionality of the now-deleted
.Xr jedec_ts 4 .
Hints for
.Xr jedec_ts 4
@ -199,7 +199,6 @@ sed -i ".old" -e 's/jedec_ts/jedec_dimm/' \\
.Sh SEE ALSO
.Xr iicbus 4 ,
.Xr iicsmb 4 ,
.Xr jedec_ts 4 ,
.Xr smbus 4 ,
.Xr sysctl 8
.Sh STANDARDS
@ -237,7 +236,7 @@ The
.Nm
driver and this manual page were written by
.An Ravi Pokala Aq Mt rpokala@freebsd.org .
They are both based in part on the
They are both based in part on the now-deleted
.Xr jedec_ts 4
driver and manual page, written by
.An Andriy Gapon Aq Mt avg@FreeBSD.org .

View File

@ -1,142 +0,0 @@
.\"
.\" Copyright (c) 2016 Andriy Gapon <avg@FreeBSD.org>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" $FreeBSD$
.\"
.Dd July 24, 2018
.Dt JEDEC_TS 4
.Os
.Sh NAME
.Nm jedec_ts
.Nd driver for temperature sensors on memory modules
.Sh SYNOPSIS
.Bd -ragged -offset indent
.Cd "device jedec_ts"
.Cd "device smbus"
.Ed
.Pp
Alternatively, to load the driver as a
module at boot time, place the following line in
.Xr loader.conf 5 :
.Bd -literal -offset indent
jedec_ts_load="YES"
.Ed
.Pp
In
.Pa /boot/device.hints :
.Bd -literal -offset indent
.Cd hint.jedec_ts.0.at="smbus0"
.Cd hint.jedec_ts.0.addr="0x30"
.Cd hint.jedec_ts.1.at="smbus0"
.Cd hint.jedec_ts.1.addr="0x32"
.Cd hint.jedec_ts.2.at="smbus0"
.Cd hint.jedec_ts.2.addr="0x34"
.Cd hint.jedec_ts.3.at="smbus0"
.Cd hint.jedec_ts.3.addr="0x36"
.Cd hint.jedec_ts.4.at="smbus0"
.Cd hint.jedec_ts.4.addr="0x38"
.Cd hint.jedec_ts.5.at="smbus0"
.Cd hint.jedec_ts.5.addr="0x3A"
.Cd hint.jedec_ts.6.at="smbus0"
.Cd hint.jedec_ts.6.addr="0x3C"
.Cd hint.jedec_ts.7.at="smbus0"
.Cd hint.jedec_ts.7.addr="0x3E"
.Ed
.Sh DEPRECATION NOTICE
The
.Nm
driver is not present in
.Fx 12.0
and later.
A superset of its functionality is available in the
.Xr jedec_dimm 4
driver.
That driver's manpage includes instructions on updating
.Pa /boot/device.hints
accordingly.
.Sh DESCRIPTION
The
.Nm
driver provides access to sensor data over the
.Xr smbus 4 .
The driver supports temperature sensors on memory modules that conform
to JEDEC Standard 21-C, TSE2002 Specification.
.Pp
The access to
.Nm
data is made via the
.Xr sysctl 8
interface:
.Bl -tag -width "dev.jedec_ts.%d.temp"
.It Va dev.jedec_ts.%d.temp
read-only value of the current temperature read by the sensor.
.El
.Pp
On a system using
.Xr device.hints 5 ,
these values are configurable for
.Nm :
.Bl -tag -width "hint.jedec_ts.%d.addr"
.It Va hint.jedec_ts.%d.at
target
.Xr smbus 4 .
.It Va hint.jedec_ts.%d.addr
.Nm
SMBus address on the
.Xr smbus 4 .
.El
.Pp
.Nm
temperature sensors can be wired to eight different addresses,
allowing up to eight sensors on the same
.Xr smbus 4 .
.Pp
If the sensors are on an I2C bus behind an
.Xr iicbus 4
controller, then the
.Xr iicsmb 4
bridge driver can be used to attach the
.Xr smbus 4 .
.Sh EXAMPLES
.Ss Sensor read out for two memory modules:
.Bd -literal
dev.jedec_ts.0.temp: 40.2500C
dev.jedec_ts.1.temp: 40.7500C
.Ed
.Sh SEE ALSO
.Xr iicbus 4 ,
.Xr iicsmb 4 ,
.Xr smbus 4 ,
.Xr sysctl 8
.Sh HISTORY
The
.Nm
driver first appeared in
.Fx 11.1 .
.Sh AUTHORS
.An -nosplit
The
.Nm
driver and this manual page were written by
.An Andriy Gapon Aq Mt avg@FreeBSD.org .

View File

@ -2478,10 +2478,8 @@ device smb
# SMBus peripheral devices
#
# jedec_dimm Asset and temperature reporting for DDR3 and DDR4 DIMMs
# jedec_ts Temperature Sensor compliant with JEDEC Standard 21-C
#
device jedec_dimm
device jedec_ts
# I2C Bus
#

View File

@ -2308,7 +2308,6 @@ dev/ixgbe/ixgbe_dcb_82598.c optional ix inet | ixv inet \
dev/ixgbe/ixgbe_dcb_82599.c optional ix inet | ixv inet \
compile-with "${NORMAL_C} -I$S/dev/ixgbe"
dev/jedec_dimm/jedec_dimm.c optional jedec_dimm smbus
dev/jedec_ts/jedec_ts.c optional jedec_ts smbus
dev/jme/if_jme.c optional jme pci
dev/joy/joy.c optional joy
dev/joy/joy_isa.c optional joy isa

View File

@ -32,9 +32,9 @@
*/
/*
* This driver is a super-set of jedec_ts(4), and most of the code for reading
* and reporting the temperature is either based on that driver, or copied
* from it verbatim.
* This driver is a super-set of the now-deleted jedec_ts(4), and most of the
* code for reading and reporting the temperature is either based on that driver,
* or copied from it verbatim.
*/
#include <sys/param.h>

View File

@ -1,283 +0,0 @@
/*-
* Copyright (c) 2016 Andriy Gapon <avg@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/bus.h>
#include <sys/endian.h>
#include <sys/module.h>
#include <sys/rman.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
#include <dev/smbus/smbconf.h>
#include <dev/smbus/smbus.h>
#include "smbus_if.h"
/*
* General device identification notes.
*
* The JEDEC TSE2004av specification defines the device ID that all compliant
* devices should use, but very few do in practice. Maybe that's because
* TSE2002av was rather vague about that.
* Rare examples are IDT TSE2004GB2B0 and Atmel AT30TSE004A, not sure if
* they are TSE2004av compliant by design or by accident.
* Also, the specification mandates that PCI SIG manufacturer IDs are to be
* used, but in practice the JEDEC manufacturer IDs are often used.
*/
const struct ts_dev {
uint16_t vendor_id;
uint8_t device_id;
const char *description;
} known_devices[] = {
/*
* Analog Devices ADT7408.
* http://www.analog.com/media/en/technical-documentation/data-sheets/ADT7408.pdf
*/
{ 0x11d4, 0x08, "Analog Devices DIMM temperature sensor" },
/*
* Atmel AT30TSE002B, AT30TSE004A.
* http://www.atmel.com/images/doc8711.pdf
* http://www.atmel.com/images/atmel-8868-dts-at30tse004a-datasheet.pdf
* Note how one chip uses the JEDEC Manufacturer ID while the other
* uses the PCI SIG one.
*/
{ 0x001f, 0x82, "Atmel DIMM temperature sensor" },
{ 0x1114, 0x22, "Atmel DIMM temperature sensor" },
/*
* Integrated Device Technology (IDT) TS3000B3A, TSE2002B3C,
* TSE2004GB2B0 chips and their variants.
* http://www.idt.com/sites/default/files/documents/IDT_TSE2002B3C_DST_20100512_120303152056.pdf
* http://www.idt.com/sites/default/files/documents/IDT_TS3000B3A_DST_20101129_120303152013.pdf
* https://www.idt.com/document/dst/tse2004gb2b0-datasheet
*/
{ 0x00b3, 0x29, "IDT DIMM temperature sensor" },
{ 0x00b3, 0x22, "IDT DIMM temperature sensor" },
/*
* Maxim Integrated MAX6604.
* Different document revisions specify different Device IDs.
* Document 19-3837; Rev 0; 10/05 has 0x3e00 while
* 19-3837; Rev 3; 10/11 has 0x5400.
* http://datasheets.maximintegrated.com/en/ds/MAX6604.pdf
*/
{ 0x004d, 0x3e, "Maxim Integrated DIMM temperature sensor" },
{ 0x004d, 0x54, "Maxim Integrated DIMM temperature sensor" },
/*
* Microchip Technology MCP9805, MCP9843, MCP98242, MCP98243
* and their variants.
* http://ww1.microchip.com/downloads/en/DeviceDoc/21977b.pdf
* Microchip Technology EMC1501.
* http://ww1.microchip.com/downloads/en/DeviceDoc/00001605A.pdf
*/
{ 0x0054, 0x00, "Microchip DIMM temperature sensor" },
{ 0x0054, 0x20, "Microchip DIMM temperature sensor" },
{ 0x0054, 0x21, "Microchip DIMM temperature sensor" },
{ 0x1055, 0x08, "Microchip DIMM temperature sensor" },
/*
* NXP Semiconductors SE97 and SE98.
* http://www.nxp.com/docs/en/data-sheet/SE97B.pdf
*/
{ 0x1131, 0xa1, "NXP DIMM temperature sensor" },
{ 0x1131, 0xa2, "NXP DIMM temperature sensor" },
/*
* ON Semiconductor CAT34TS02 revisions B and C, CAT6095 and compatible.
* https://www.onsemi.com/pub/Collateral/CAT34TS02-D.PDF
* http://www.onsemi.com/pub/Collateral/CAT6095-D.PDF
*/
{ 0x1b09, 0x08, "ON Semiconductor DIMM temperature sensor" },
{ 0x1b09, 0x0a, "ON Semiconductor DIMM temperature sensor" },
/*
* ST[Microelectronics] STTS424E02, STTS2002 and others.
* http://www.st.com/resource/en/datasheet/cd00157558.pdf
* http://www.st.com/resource/en/datasheet/stts2002.pdf
*/
{ 0x104a, 0x00, "ST DIMM temperature sensor" },
{ 0x104a, 0x03, "ST DIMM temperature sensor" },
};
static const char *
ts_match_device(uint16_t vid, uint16_t did)
{
const struct ts_dev *d;
int i;
for (i = 0; i < nitems(known_devices); i++) {
d = &known_devices[i];
if (vid == d->vendor_id && (did >> 8) == d->device_id)
return (d->description);
}
/*
* If no match for a specific device, then check
* for a generic TSE2004av compliant device.
*/
if ((did >> 8) == 0x22)
return ("TSE2004av compliant DIMM temperature sensor");
return (NULL);
}
/*
* SMBus specification defines little-endian byte order,
* but it seems that the JEDEC devices expect it to
* be big-endian.
*/
static int
ts_readw_be(device_t dev, uint8_t reg, uint16_t *val)
{
device_t bus = device_get_parent(dev);
uint8_t addr = smbus_get_addr(dev);
int err;
err = smbus_readw(bus, addr, reg, val);
if (err != 0)
return (err);
*val = be16toh(*val);
return (0);
}
static int
ts_temp_sysctl(SYSCTL_HANDLER_ARGS)
{
device_t dev = arg1;
int err;
int temp;
uint16_t val;
err = ts_readw_be(dev, 5, &val);
if (err != 0)
return (EIO);
/*
* Convert the reading to temperature in 0.0001 Kelvins.
* Three most significant bits are flags, the next
* most significant bit is a sign bit.
* Each step is 0.0625 degrees.
*/
temp = val & 0xfff;
if ((val & 0x1000) != 0)
temp = -temp;
temp = temp * 625 + 2731500;
err = sysctl_handle_int(oidp, &temp, 0, req);
return (err);
}
static int
ts_probe(device_t dev)
{
const char *match;
int err;
uint16_t vendorid;
uint16_t devid;
uint8_t addr;
addr = smbus_get_addr(dev);
if ((addr & 0xf0) != 0x30) {
/* Up to 8 slave devices starting at 0x30. */
return (ENXIO);
}
err = ts_readw_be(dev, 6, &vendorid);
if (err != 0) {
device_printf(dev, "failed to read Manufacturer ID\n");
return (ENXIO);
}
err = ts_readw_be(dev, 7, &devid);
if (err != 0) {
device_printf(dev, "failed to read Device ID\n");
return (ENXIO);
}
match = ts_match_device(vendorid, devid);
if (match == NULL) {
if (bootverbose) {
device_printf(dev, "Unknown Manufacturer and Device IDs"
", 0x%x and 0x%x\n", vendorid, devid);
}
return (ENXIO);
}
device_set_desc(dev, match);
return (BUS_PROBE_DEFAULT);
}
static int
ts_attach(device_t dev)
{
struct sysctl_ctx_list *ctx;
struct sysctl_oid_list *tree;
ctx = device_get_sysctl_ctx(dev);
tree = SYSCTL_CHILDREN(device_get_sysctl_tree(dev));
SYSCTL_ADD_PROC(ctx, tree, OID_AUTO, "temp",
CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, 0,
ts_temp_sysctl, "IK4", "Current temperature");
gone_in_dev(dev, 12,
"jedec_ts(4) driver; see COMPATIBILITY section of jedec_dimm(4)");
return (0);
}
static int
ts_detach(device_t dev)
{
return (0);
}
static device_method_t jedec_ts_methods[] = {
/* Methods from the device interface */
DEVMETHOD(device_probe, ts_probe),
DEVMETHOD(device_attach, ts_attach),
DEVMETHOD(device_detach, ts_detach),
/* Terminate method list */
{ 0, 0 }
};
static driver_t jedec_ts_driver = {
"jedec_ts",
jedec_ts_methods,
0 /* no softc */
};
static devclass_t jedec_ts_devclass;
DRIVER_MODULE(jedec_ts, smbus, jedec_ts_driver, jedec_ts_devclass, 0, 0);
MODULE_DEPEND(jedec_ts, smbus, SMBUS_MINVER, SMBUS_PREFVER, SMBUS_MAXVER);
MODULE_VERSION(jedec_ts, 1);

View File

@ -16,7 +16,6 @@ SUBDIR = \
isl \
isl12xx \
jedec_dimm \
jedec_ts \
nxprtc \
rtc8583 \
s35390a \

View File

@ -1,7 +0,0 @@
# $FreeBSD$
.PATH: ${SRCTOP}/sys/dev/jedec_ts
KMOD = jedec_ts
SRCS = jedec_ts.c bus_if.h device_if.h smbus_if.h
.include <bsd.kmod.mk>