NetBSD Problem Report #60700
From dtyson@penkett.anduin.org.uk Wed Sep 9 09:13:15 2026
Return-Path: <dtyson@penkett.anduin.org.uk>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (2048 bits)
client-signature RSA-PSS (2048 bits))
(Client CN "mail.netbsd.org", Issuer "YR1" (not verified))
by mollari.NetBSD.org (Postfix) with ESMTPS id 7E1691A923B
for <gnats-bugs@gnats.NetBSD.org>; Wed, 9 Sep 2026 09:13:15 +0000 (UTC)
Message-Id: <20260909090631.95DDE12E15B@penkett.anduin.org.uk>
Date: Wed, 09 Sep 2026 10:06:31 +0100 (BST)
From: dtyson@anduin.org.uk
Reply-To: dtyson@anduin.org.uk
To: gnats-bugs@NetBSD.org
Subject: Enhancement and man page for PCF8583
X-Send-Pr-Version: 3.95
X-From4GNATS: "dtyson@anduin.org.uk via gnats" <gnats-admin@NetBSD.org>
>Number: 60700
>Category: kern
>Synopsis: Enhancement and man page for PCF8583
>Confidential: no
>Severity: non-critical
>Priority: high
>Responsible: kern-bug-people
>State: open
>Class: change-request
>Submitter-Id: net
>Arrival-Date: Wed Sep 09 09:15:01 +0000 2026
>Last-Modified: Thu Oct 08 08:55:01 +0000 2026
>Originator: Dave Tyson
>Release: NetBSD 11.0_STABLE
>Organization:
Anduin
>Environment:
System: NetBSD penkett.anduin.org.uk 11.0_STABLE NetBSD 11.0_STABLE (HP) #0: Wed Aug 12 12:26:19 BST 2026 root@z230.anduin.org.uk:/usr/obj/sys/arch/amd64/compile/HP amd64
Architecture: x86_64
Machine: amd64
>Description:
I have made some changes to the Philips pcf8583 (pcfrtc) driver to support devices
at address 0x51 as well as the existing 0x50 and also permit the device to work in
counter mode.
The existing driver only attaches devices at address 0x50, a trivial change allows
address 0x51 as well so that two devices can share the same bus.
Currently the driver reads the status/config register and reports the device
operating mode, however there is no support for modifying the mode and after a
power on reset the chip always comes up in 32768hz mode.
The device will actually operate different modes:
mode 0: 32768hz using a Xtal (tod clock mode)
mode 1: external 50hz input (tod clock mode)
mode 2: counter mode with an external pulse
mode 3: factory test mode.
The 50hz mode may be useful for some countries as the grid timebase is reasonably
accurate when viewed on a 24 hour basis, but the counter mode allows arbirary
counting of events which is useful for rain gauges etc.
In order to support mode selection, code has been added to support a flag field on
the device config statement.
e.g:
pcfrtc* at iic? addr 0x50
pcfrtc* at iic? addr 0x51 flags 2
if the flag field is missing or set to 0 then the code operates as standard.
The code takes the flag field and if non-zero writes a new value into the
config/status register. The code then reads and reports the status register as
before but then only sets up the tod callbacks in mode 0 and 1.
In mode 2 it creates an INT environment variable which maps to the counter fields.
The counter is a 6 digit BCD value so can count to 1000000. Envstat reports the
current value. The counter will overflow back to zero, however it is probably
useful to have a mechanism to reset the counter on demand and so a sysctl hw
variable is created and zeroed. If this is set to 1 by:
hw.pcfrtc1.counter_reset=1
then the counters are zeroed after the next envstat call to read the counter
and the sysctl variable is reset to 0.
The code has been tested on RPI zero 2 W NetBSD arm64.anduin.org.uk 11.99.5
with suitable dtc. One pcf8583 (counter mode)and bme280 on iic2 and the
other pcf8583 (32768hz) on iic1.
[ 1.000004] iic1 at bsciic1: I2C bus
[ 1.000004] pcfrtc0 at iic1 addr 0x50: PCF8583 Real-time Clock/Counter/NVRAM
[ 1.000004] pcfrtc0: 32.768 kHz clock
[ 1.000004] iic2 at bsciic2: I2C bus
[ 1.000004] pcfrtc1 at iic2 addr 0x51: PCF8583 Real-time Clock/Counter/NVRAM
[ 1.000004] pcfrtc1: event counter
[ 1.000004] bmx280thp0 at iic2 addr 0x76
[ 1.000004] bmx280thp0: Bosch Sensortec BME280, Chip ID: 0x60
Current CritMax WarnMax WarnMin CritMin Unit
[bmx280thp0]
temperature: 21.590 degC
pressure: 1003.110 hPa
humidity: 51.936 %rH
[pcfrtc1]
counter: 3 0 0 0 0 none
[vcmbox0]
temperature: 38.628 85.000 degC
arm64root(arm64)root$ sysctl -a |grep hw.pcf
hw.pcfrtc1.counter_reset = 0
>How-To-Repeat:
Examine existing code, note that it always uses the default mode
>Fix:
The patches to implement this and provide the missing man page for the pcf8583 are below. These are against a very recent checkout of current.
--- pcf8583.c.orig 2026-09-08 21:54:12.244599802 +0100
+++ pcf8583.c 2026-09-08 20:06:08.249206844 +0100
@@ -40,6 +40,15 @@
*
* This driver is partially derived from Ben Harris's PCF8583 driver
* for NetBSD/acorn26.
+ *
+ * Additional code written by Dave Tyson to support dual addressing 0x50/0x51
+ * and to select chip operating mode using optional flag in kernel config.
+ * Default with no flag set or flag 0 is existing tod clock mode, flag 1 sets
+ * 50hz input (tod clock), flag 2 sets counter mode, flag 3 sets test mode.
+ *
+ * Setting counter mode provides an envsys variable mapped to the counter and
+ * exposes a hw syctl variable which can set to 1 to zero the counter registers
+ * after the next envstat call.
*/
#include <sys/cdefs.h>
@@ -49,6 +58,7 @@
#include <sys/systm.h>
#include <sys/device.h>
#include <sys/kernel.h>
+#include <sys/sysctl.h>
#include <sys/fcntl.h>
#include <sys/uio.h>
#include <sys/conf.h>
@@ -59,6 +69,7 @@
#include <dev/i2c/i2cvar.h>
#include <dev/i2c/pcf8583reg.h>
#include <dev/i2c/pcf8583var.h>
+#include <dev/sysmon/sysmonvar.h>
#include "ioconf.h"
@@ -68,10 +79,15 @@
int sc_address;
int sc_open;
struct todr_chip_handle sc_todr;
+ struct sysmon_envsys *sc_sme;
+ envsys_data_t sc_counter;
+ struct sysctllog *sc_pcfrtclog;
+ int reset_counter;
};
static int pcfrtc_match(device_t, cfdata_t, void *);
static void pcfrtc_attach(device_t, device_t, void *);
+static int pcfrtc_sysctl_setup(struct pcfrtc_softc *sc);
CFATTACH_DECL_NEW(pcfrtc, sizeof(struct pcfrtc_softc),
pcfrtc_match, pcfrtc_attach, NULL, NULL);
@@ -102,13 +118,16 @@
uint8_t);
static int pcfrtc_gettime(struct todr_chip_handle *, struct timeval *);
static int pcfrtc_settime(struct todr_chip_handle *, struct timeval *);
+static void pcfrtc_readcount(struct sysmon_envsys *, envsys_data_t *) ;
+static int pcfrtc_sysctl_check(SYSCTLFN_ARGS);
int
pcfrtc_match(device_t parent, cfdata_t cf, void *aux)
{
struct i2c_attach_args *ia = aux;
- if ((ia->ia_addr & PCF8583_ADDRMASK) == PCF8583_ADDR)
+ if ((ia->ia_addr & PCF8583_ADDRMASK) == PCF8583_ADDR ||
+ (ia->ia_addr & PCF8583_ADDRMASK) == PCF8583_ADDR2)
return (I2C_MATCH_ADDRESS_ONLY);
return (0);
@@ -118,16 +137,30 @@
pcfrtc_attach(device_t parent, device_t self, void *aux)
{
struct pcfrtc_softc *sc = device_private(self);
+ struct cfdata *cf = device_cfdata(self);
struct i2c_attach_args *ia = aux;
- uint8_t cmdbuf[1], csr;
+ uint8_t cmdbuf[1], csr, mode;
+ int error;
sc->sc_tag = ia->ia_tag;
sc->sc_address = ia->ia_addr;
sc->sc_dev = self;
- aprint_naive(": Real-time Clock/NVRAM\n");
- aprint_normal(": PCF8583 Real-time Clock/NVRAM\n");
+ aprint_naive(": Real-time Clock/Counter/NVRAM\n");
+ aprint_normal(": PCF8583 Real-time Clock/Counter/NVRAM\n");
+
+ /* if flags set & !zero then need to change device mode */
+ if (cf->cf_flags != 0) {
+ mode = cf->cf_flags << 4 & PCF8583_CSR_FN_MASK;
+ cmdbuf[0] = PCF8583_REG_CSR;
+ if (iic_exec(sc->sc_tag, I2C_OP_WRITE_WITH_STOP, sc->sc_address,
+ cmdbuf, 1, &mode, 1, 0) != 0) {
+ aprint_error_dev(self, "unable to write CSR\n");
+ return;
+ }
+ }
+
cmdbuf[0] = PCF8583_REG_CSR;
if (iic_exec(sc->sc_tag, I2C_OP_READ_WITH_STOP, sc->sc_address,
cmdbuf, 1, &csr, 1, 0) != 0) {
@@ -160,11 +193,51 @@
sc->sc_open = 0;
- sc->sc_todr.todr_dev = self;
- sc->sc_todr.todr_gettime = pcfrtc_gettime;
- sc->sc_todr.todr_settime = pcfrtc_settime;
+ switch (csr & PCF8583_CSR_FN_MASK) {
+
+ case PCF8583_CSR_FN_32768HZ:
+ case PCF8583_CSR_FN_50HZ:
+ sc->sc_todr.todr_dev = self;
+ sc->sc_todr.todr_gettime = pcfrtc_gettime;
+ sc->sc_todr.todr_settime = pcfrtc_settime;
+
+ todr_attach(&sc->sc_todr);
+ break;
- todr_attach(&sc->sc_todr);
+ case PCF8583_CSR_FN_EVENT:
+ if ((sc->sc_sme = sysmon_envsys_create()) == NULL) {
+ aprint_error_dev(sc->sc_dev,
+ "unable to create sysmon structure");
+ sc->sc_sme = NULL;
+ return ;
+ }
+ sc->sc_counter.units=ENVSYS_INTEGER;
+ sc->sc_counter.state=ENVSYS_SINVALID;
+ strlcpy(sc->sc_counter.desc, "counter",
+ sizeof(sc->sc_counter.desc));
+ if (sysmon_envsys_sensor_attach(sc->sc_sme, &sc->sc_counter)) {
+ sysmon_envsys_destroy(sc->sc_sme);
+ return;
+ }
+
+ sc->sc_sme->sme_name = device_xname(self) ;
+ sc->sc_sme->sme_refresh = pcfrtc_readcount;
+ sc->sc_sme->sme_cookie = sc;
+
+ if (sysmon_envsys_register(sc->sc_sme)) {
+ sysmon_envsys_destroy(sc->sc_sme);
+ return;
+ }
+
+ /* setup sysctl for resetting counter */
+
+ if ((error = pcfrtc_sysctl_setup(sc)) !=0) {
+ aprint_error_dev(sc->sc_dev, "cannot setup sysctl tree (%d)\n", error);
+ sysmon_envsys_destroy(sc->sc_sme);
+ }
+ sc->reset_counter = 0;
+ break ;
+ }
}
/*ARGSUSED*/
@@ -499,3 +572,96 @@
iic_release_bus(tag, 0);
return (0);
}
+
+int pcfrtc_sysctl_check(SYSCTLFN_ARGS)
+{
+ struct sysctlnode node;
+ int t, error;
+
+ t = *(int *)rnode->sysctl_data;
+
+ node = *rnode;
+ node.sysctl_data = &t;
+ error = sysctl_lookup(SYSCTLFN_CALL(&node));
+ if (error || newp == NULL)
+ return (error);
+
+ if (t < 0 || t > 1)
+ return (EINVAL);
+
+ *(int *)rnode->sysctl_data = t;
+ return 0;
+}
+
+static int pcfrtc_sysctl_setup(struct pcfrtc_softc *sc)
+{
+ int error;
+ const struct sysctlnode *cnode;
+ int sysctlroot_num;
+
+ if ((error = sysctl_createv(&sc->sc_pcfrtclog, 0, NULL, &cnode,
+ 0, CTLTYPE_NODE, device_xname(sc->sc_dev),
+ SYSCTL_DESCR("pcfrtc counter reset"), NULL, 0, NULL, 0,
+ CTL_HW, CTL_CREATE, CTL_EOL)) != 0)
+ return error;
+ sysctlroot_num = cnode->sysctl_num;
+
+ if ((error = sysctl_createv(&sc->sc_pcfrtclog, 0, NULL, &cnode,
+ CTLFLAG_READWRITE, CTLTYPE_INT, "counter_reset",
+ SYSCTL_DESCR("counter reset"), pcfrtc_sysctl_check, 0,
+ &sc->reset_counter, 0, CTL_HW,
+ sysctlroot_num, CTL_CREATE, CTL_EOL)) != 0)
+ return error;
+ return 0;
+}
+
+static void pcfrtc_readcount(struct sysmon_envsys *sme, envsys_data_t *edata)
+{
+ struct pcfrtc_softc *sc = sme->sme_cookie;
+ int err, i;
+ uint8_t bcd[3],cmdbuf[1];
+ uint8_t zero=0;
+
+ if ((err = iic_acquire_bus(sc->sc_tag, 0))) {
+ aprint_error_dev(sc->sc_dev,
+ "pcfrtc_readcount: failed to acquire I2C bus\n");
+ return;
+ }
+
+ for (i = PCF8583_COUNTER0; i <= PCF8583_COUNTER2; i++) {
+ cmdbuf[0] = i;
+
+ if ((err = iic_exec(sc->sc_tag, I2C_OP_READ_WITH_STOP,
+ sc->sc_address, cmdbuf, 1,
+ &bcd[i-1], 1, 0))) {
+ iic_release_bus(sc->sc_tag, 0);
+ aprint_error_dev(sc->sc_dev,
+ "pcfrtc_readcount: failed to read register at %x\n", i);
+ return;
+ }
+ }
+
+
+ edata->value_cur = bcdtobin(bcd[0]) + bcdtobin(bcd[1])*100 + bcdtobin(bcd[2])*10000 ;
+ edata->state = ENVSYS_SVALID ;
+
+ /* if reset_counter = 1 then clear totals */
+
+ if (sc->reset_counter != 0) {
+ for (i = PCF8583_COUNTER0; i <= PCF8583_COUNTER2; i++) {
+ cmdbuf[0] = i;
+
+ if ((err = iic_exec(sc->sc_tag, I2C_OP_WRITE_WITH_STOP,
+ sc->sc_address, cmdbuf, 1, &zero, 1, 0))) {
+ iic_release_bus(sc->sc_tag, 0);
+ aprint_error_dev(sc->sc_dev,
+ "pcfrtc_readcount: failed to write register at %x\n", i);
+ return;
+ }
+ }
+
+ sc->reset_counter = 0 ;
+ }
+
+ iic_release_bus(sc->sc_tag, 0);
+}
--- pcf8583reg.h.orig 2026-09-08 21:54:34.779392250 +0100
+++ pcf8583reg.h 2026-09-08 20:07:07.037379496 +0100
@@ -22,6 +22,7 @@
*/
#define PCF8583_ADDRMASK 0x3ff
#define PCF8583_ADDR 0x50
+#define PCF8583_ADDR2 0x51
#define PCF8583_REG_CSR 0x00
#define PCF8583_REG_CENTI 0x01
@@ -86,4 +87,7 @@
#define PCF8583_ALMCTL_TIMERALM 0x40
#define PCF8583_ALMCTL_ALMINT 0x80
+#define PCF8583_COUNTER0 0x01
+#define PCF8583_COUNTER1 0x02
+#define PCF8583_COUNTER2 0x03
#endif /* _PCF8583REG_H */
--- /dev/null 2026-09-08 21:55:04.222229606 +0100
+++ pcf8583.4 2026-09-08 20:06:08.058956112 +0100
@@ -0,0 +1,74 @@
+.\"
+.\" Copyright (c) 2026 Dave Tyson <dtyson@anduin.org.uk>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd September 8, 2026
+.Dt PCF8583
+.Os
+.Sh NAME
+.Nm pcf8583
+.Nd Driver for NPX PCF8583 Clock and Calendar/Counter/240 x 8bit RAM
+via I2C bus
+.Sh SYNOPSIS
+.Cd "pcftod* at iic? addr 0x50"
+.Cd "pcftod* at iic? addr 0x50 flags x"
+.Cd "pcftod* at iic? addr 0x51"
+.Cd "pcftod* at iic? addr 0x51 flags x"
+.Sh DESCRIPTION
+The
+.Nm
+driver supports the PCF8583 multifunction chip which can operate in one of four modes
+depending on the value of the flag [if specified]:
+.Bl -tag
+.It mode 0 - Clock & Calendar using external 32768 hz crystal.
+This is the default mode in the absence of a flag field and is the state when a
+power-on reset occurs.
+.It mode 1 - Clock & Calendar using external 50 Hz clock.
+Similar to mode 0, but relies on an external clock source rather than a crystal.
+.It mode 2 - Counter for external inputs.
+The clock & calendar are disabled and the device counts external events using a 3 byte
+bcd counter [0-999999].
+.It mode 3 - Test mode.
+This is undocumented and unlikely to be useful.
+.El
+.Pp
+The
+.Nm
+driver is commonly used to support a Real Time Clock using a 32768 hz crystal and a backup battery. It also provides a small amount of battery backed RAM which is used, for example, for bootstrapping acorn32 system. It is possible to use an external 50hz clock by switching to mode 1 - this might be useful with a European mains derived signal as the long term drift is likely to be less than an unstabilised crystal. The reading and setting of the internal clock is handled by the todr code.
+.Pp
+Switching to mode 2 provides access to a 6 digit BCD counter which can be used to count arbitary external events. The driver maps this counter to an integer envstat variable which can be read via the normal envstat subsystem and also exposes a sysctl variable to allow the counter to be reset.
+.Sh SYSCTL VARIABLES
+In mode 2 the following
+.Xr sysctl 3
+variables are provided:
+.Bl -tag -width indent
+.It Li hw.pcfrtc1.counter_reset
+If this is set to 1 then the next read of the envstat counter causes the BCD counter to be zeroed and resets the sysctl variable back to zero.
+.Sh SEE ALSO
+.Xr todr 9 ,
+.Xr envstat 8 ,
+.Xr sysctl 8
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Nx 1.0 .
+.Sh AUTHORS
+The
+.Nm
+driver was written by Steve C. Woodford and Jason R. Thorpe for Wasabi Systems, Inc. based on Ben Harris's PCF8583 driver for NetBSD/acorn26.
+.Pp
+Later modifications to support other modes by
+.An Dave Tyson Aq Mt dtyson@anduin.org.uk
+
>Audit-Trail:
From: Julian Coleman <jdc@coris.org.uk>
To: dtyson@anduin.org.uk, gnats-bugs@netbsd.org
Cc:
Subject: Re: kern/60700: Enhancement and man page for PCF8583
Date: Tue, 22 Sep 2026 10:22:27 +0200
Hi,
Just a couple of small points.
> + aprint_naive(": Real-time Clock/Counter/NVRAM\n");
> + aprint_normal(": PCF8583 Real-time Clock/Counter/NVRAM\n");
> +
> + /* if flags set & !zero then need to change device mode */
>
> + if (cf->cf_flags != 0) {
> + mode = cf->cf_flags << 4 & PCF8583_CSR_FN_MASK;
> + cmdbuf[0] = PCF8583_REG_CSR;
> + if (iic_exec(sc->sc_tag, I2C_OP_WRITE_WITH_STOP, sc->sc_address,
> + cmdbuf, 1, &mode, 1, 0) != 0) {
> + aprint_error_dev(self, "unable to write CSR\n");
> + return;
> + }
> + }
> +
Do we always need to set the mode here, or does the chip retain the setting
across powerdown? I can't see it from the data sheet but I wonder about
writing on each boot, in case the chip has a limited number of writes.
Would it be better to read the current value and only write if we want to
change it?
For the aprint lines, I think that we could display the mode as well. It
could be useful to see from the dmesg which mode has been selected, in case
we are looking for some problem (e.g. accidently running the wrong kernel)
and it would be simple to add.
Regards,
Julian
--
From: Dave Tyson <dtyson@anduin.org.uk>
To: Julian Coleman <jdc@coris.org.uk>, gnats-bugs@netbsd.org
Cc:
Subject: Re: kern/60700: Enhancement and man page for PCF8583
Date: Tue, 29 Sep 2026 20:13:22 +0100
--=-88t/1wLz9f76B+tjY4kn
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
This is an updated patch which addresses points raised by Julian. The
device does not contain NVRAM and so does not retain info over power
down unless a battery is attached. The print lines now display the mode
on the attachment line. The new man page has some updates and
corrections.
Tested on a RPI Zero 2 under NetBSD current 11.99.8=C2=A0AARCH64
bsciic1 at simplebus1: Broadcom Serial Controller
bsciic1: interrupting on icu irq 53
iic1 at bsciic1: I2C bus
pcfrtc0 at iic1 addr 0x50: PCF8583 Mode 0: 32768 Hz tod clock
bsciic2 at simplebus1: Broadcom Serial Controller
bsciic2: interrupting on icu irq 53
iic2 at bsciic2: I2C bus
pcfrtc1 at iic2 addr 0x51: PCF8583 Mode 2: Counter
Unified patches against latest current available at
https://penkett.anduin.org.uk/~dtyson/pcf8583/diffs
or in attachment
--=-88t/1wLz9f76B+tjY4kn
Content-Disposition: attachment; filename="diffs"
Content-Transfer-Encoding: base64
Content-Type: text/x-patch; name="diffs"; charset="UTF-8"
LS0tIHBjZjg1ODMuYy5vcmlnCTIwMjUtMDktMDcgMjI6NDU6MTUuMDAwMDAwMDAwICswMTAwCisr
KyBwY2Y4NTgzLmMJMjAyNi0wOS0yOCAyMzoxNjowNC40MjM3OTE4NzMgKzAxMDAKQEAgLTQwLDYg
KzQwLDE1IEBACiAgKgogICogVGhpcyBkcml2ZXIgaXMgcGFydGlhbGx5IGRlcml2ZWQgZnJvbSBC
ZW4gSGFycmlzJ3MgUENGODU4MyBkcml2ZXIKICAqIGZvciBOZXRCU0QvYWNvcm4yNi4KKyAqCisg
KiBBZGRpdGlvbmFsIGNvZGUgd3JpdHRlbiBieSBEYXZlIFR5c29uIHRvIHN1cHBvcnQgZHVhbCBh
ZGRyZXNzaW5nIDB4NTAvMHg1MQorICogYW5kIHRvIHNlbGVjdCBjaGlwIG9wZXJhdGluZyBtb2Rl
IHVzaW5nIG9wdGlvbmFsIGZsYWcgaW4ga2VybmVsIGNvbmZpZy4KKyAqIERlZmF1bHQgd2l0aCBu
byBmbGFnIHNldCBvciBmbGFnIDAgaXMgZXhpc3RpbmcgdG9kIGNsb2NrIG1vZGUsIGZsYWcgMSBz
ZXRzCisgKiA1MGh6IGlucHV0ICh0b2QgY2xvY2spLCBmbGFnIDIgc2V0cyBjb3VudGVyIG1vZGUs
IGZsYWcgMyBzZXRzIHRlc3QgbW9kZS4KKyAqCisgKiBTZXR0aW5nIGNvdW50ZXIgbW9kZSBwcm92
aWRlcyBhbiBlbnZzeXMgdmFyaWFibGUgbWFwcGVkIHRvIHRoZSBjb3VudGVyIGFuZAorICogZXhw
b3NlcyBhIGh3IHN5Y3RsIHZhcmlhYmxlIHdoaWNoIGNhbiBzZXQgdG8gMSB0byB6ZXJvIHRoZSBj
b3VudGVyIHJlZ2lzdGVycworICogYWZ0ZXIgdGhlIG5leHQgZW52c3RhdCBjYWxsLiAKICAqLwog
CiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CkBAIC00OSw2ICs1OCw3IEBACiAjaW5jbHVkZSA8c3lz
L3N5c3RtLmg+CiAjaW5jbHVkZSA8c3lzL2RldmljZS5oPgogI2luY2x1ZGUgPHN5cy9rZXJuZWwu
aD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CiAjaW5j
bHVkZSA8c3lzL3Vpby5oPgogI2luY2x1ZGUgPHN5cy9jb25mLmg+CkBAIC01OSw2ICs2OSw3IEBA
CiAjaW5jbHVkZSA8ZGV2L2kyYy9pMmN2YXIuaD4KICNpbmNsdWRlIDxkZXYvaTJjL3BjZjg1ODNy
ZWcuaD4KICNpbmNsdWRlIDxkZXYvaTJjL3BjZjg1ODN2YXIuaD4KKyNpbmNsdWRlIDxkZXYvc3lz
bW9uL3N5c21vbnZhci5oPgogCiAjaW5jbHVkZSAiaW9jb25mLmgiCiAKQEAgLTY4LDEwICs3OSwx
NSBAQAogCWludCBzY19hZGRyZXNzOwogCWludCBzY19vcGVuOwogCXN0cnVjdCB0b2RyX2NoaXBf
aGFuZGxlIHNjX3RvZHI7CisJc3RydWN0IHN5c21vbl9lbnZzeXMgKnNjX3NtZTsKKwllbnZzeXNf
ZGF0YV90IHNjX2NvdW50ZXI7CisJc3RydWN0IHN5c2N0bGxvZyAqc2NfcGNmcnRjbG9nOworCWlu
dCByZXNldF9jb3VudGVyOwogfTsKIAogc3RhdGljIGludCAgcGNmcnRjX21hdGNoKGRldmljZV90
LCBjZmRhdGFfdCwgdm9pZCAqKTsKIHN0YXRpYyB2b2lkIHBjZnJ0Y19hdHRhY2goZGV2aWNlX3Qs
IGRldmljZV90LCB2b2lkICopOworc3RhdGljIGludCBwY2ZydGNfc3lzY3RsX3NldHVwKHN0cnVj
dCBwY2ZydGNfc29mdGMgKnNjKTsKIAogQ0ZBVFRBQ0hfREVDTF9ORVcocGNmcnRjLCBzaXplb2Yo
c3RydWN0IHBjZnJ0Y19zb2Z0YyksCiAJcGNmcnRjX21hdGNoLCBwY2ZydGNfYXR0YWNoLCBOVUxM
LCBOVUxMKTsKQEAgLTEwMiwxMyArMTE4LDE2IEBACiAJCQkgICAgICB1aW50OF90KTsKIHN0YXRp
YyBpbnQgcGNmcnRjX2dldHRpbWUoc3RydWN0IHRvZHJfY2hpcF9oYW5kbGUgKiwgc3RydWN0IHRp
bWV2YWwgKik7CiBzdGF0aWMgaW50IHBjZnJ0Y19zZXR0aW1lKHN0cnVjdCB0b2RyX2NoaXBfaGFu
ZGxlICosIHN0cnVjdCB0aW1ldmFsICopOworc3RhdGljIHZvaWQgcGNmcnRjX3JlYWRjb3VudChz
dHJ1Y3Qgc3lzbW9uX2VudnN5cyAqLCBlbnZzeXNfZGF0YV90ICopIDsKK3N0YXRpYyBpbnQgcGNm
cnRjX3N5c2N0bF9jaGVjayhTWVNDVExGTl9BUkdTKTsKIAogaW50CiBwY2ZydGNfbWF0Y2goZGV2
aWNlX3QgcGFyZW50LCBjZmRhdGFfdCBjZiwgdm9pZCAqYXV4KQogewogCXN0cnVjdCBpMmNfYXR0
YWNoX2FyZ3MgKmlhID0gYXV4OwogCi0JaWYgKChpYS0+aWFfYWRkciAmIFBDRjg1ODNfQUREUk1B
U0spID09IFBDRjg1ODNfQUREUikKKwlpZiAoKGlhLT5pYV9hZGRyICYgUENGODU4M19BRERSTUFT
SykgPT0gUENGODU4M19BRERSIHx8CisJICAgIChpYS0+aWFfYWRkciAmIFBDRjg1ODNfQUREUk1B
U0spID09IFBDRjg1ODNfQUREUjIpCiAJCXJldHVybiAoSTJDX01BVENIX0FERFJFU1NfT05MWSk7
CiAKIAlyZXR1cm4gKDApOwpAQCAtMTE4LDUzICsxMzcsMTA0IEBACiBwY2ZydGNfYXR0YWNoKGRl
dmljZV90IHBhcmVudCwgZGV2aWNlX3Qgc2VsZiwgdm9pZCAqYXV4KQogewogCXN0cnVjdCBwY2Zy
dGNfc29mdGMgKnNjID0gZGV2aWNlX3ByaXZhdGUoc2VsZik7CisJc3RydWN0IGNmZGF0YSAqY2Yg
PSBkZXZpY2VfY2ZkYXRhKHNlbGYpOwogCXN0cnVjdCBpMmNfYXR0YWNoX2FyZ3MgKmlhID0gYXV4
OwotCXVpbnQ4X3QgY21kYnVmWzFdLCBjc3I7CisJdWludDhfdCBjbWRidWZbMV0sIGNzciwgbW9k
ZTsKKwlpbnQgZXJyb3I7CiAKIAlzYy0+c2NfdGFnID0gaWEtPmlhX3RhZzsKIAlzYy0+c2NfYWRk
cmVzcyA9IGlhLT5pYV9hZGRyOwogCXNjLT5zY19kZXYgPSBzZWxmOwogCi0JYXByaW50X25haXZl
KCI6IFJlYWwtdGltZSBDbG9jay9OVlJBTVxuIik7Ci0JYXByaW50X25vcm1hbCgiOiBQQ0Y4NTgz
IFJlYWwtdGltZSBDbG9jay9OVlJBTVxuIik7CisJLyogaWYgZmxhZ3Mgc2V0ICYgIXplcm8gdGhl
biBuZWVkIHRvIGNoYW5nZSBkZXZpY2UgbW9kZSAqLwogCisJaWYgKGNmLT5jZl9mbGFncyAhPSAw
KSB7CisJCW1vZGUgPSBjZi0+Y2ZfZmxhZ3MgPDwgNCAmIFBDRjg1ODNfQ1NSX0ZOX01BU0s7CisJ
CWNtZGJ1ZlswXSA9IFBDRjg1ODNfUkVHX0NTUjsKKwkJaWYgKGlpY19leGVjKHNjLT5zY190YWcs
IEkyQ19PUF9XUklURV9XSVRIX1NUT1AsIHNjLT5zY19hZGRyZXNzLAorCSAgICAJIGNtZGJ1Ziwg
MSwgJm1vZGUsIDEsIDApICE9IDApIHsKKwkJCWFwcmludF9lcnJvcl9kZXYoc2VsZiwgInVuYWJs
ZSB0byB3cml0ZSBDU1JcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorIAogCWNtZGJ1ZlswXSA9
IFBDRjg1ODNfUkVHX0NTUjsKIAlpZiAoaWljX2V4ZWMoc2MtPnNjX3RhZywgSTJDX09QX1JFQURf
V0lUSF9TVE9QLCBzYy0+c2NfYWRkcmVzcywKIAkgICAgY21kYnVmLCAxLCAmY3NyLCAxLCAwKSAh
PSAwKSB7CiAJCWFwcmludF9lcnJvcl9kZXYoc2VsZiwgInVuYWJsZSB0byByZWFkIENTUlxuIik7
CiAJCXJldHVybjsKIAl9Ci0JYXByaW50X25vcm1hbF9kZXYoc2MtPnNjX2RldiwgIiIpOworCiAJ
c3dpdGNoIChjc3IgJiBQQ0Y4NTgzX0NTUl9GTl9NQVNLKSB7CiAJY2FzZSBQQ0Y4NTgzX0NTUl9G
Tl8zMjc2OEhaOgotCQlhcHJpbnRfbm9ybWFsKCIgMzIuNzY4IGtIeiBjbG9jayIpOworCQlhcHJp
bnRfbmFpdmUoIjogTW9kZSAwOiAzMjc2OCBIeiB0b2QgQ2xvY2siKTsKKwkJYXByaW50X25vcm1h
bCgiOiBQQ0Y4NTgzIE1vZGUgMDogMzI3NjggSHogdG9kIENsb2NrIik7CiAJCWJyZWFrOwogCiAJ
Y2FzZSBQQ0Y4NTgzX0NTUl9GTl81MEhaOgotCQlhcHJpbnRfbm9ybWFsKCIgNTAgSHogY2xvY2si
KTsKKwkJYXByaW50X25haXZlKCI6IE1vZGUgMTogNTBIeiB0b2QgQ2xvY2siKTsKKwkJYXByaW50
X25vcm1hbCgiOiBQQ0Y4NTgzIE1vZGUgMTogNTBIeiB0b2QgQ2xvY2siKTsKIAkJYnJlYWs7CiAK
IAljYXNlIFBDRjg1ODNfQ1NSX0ZOX0VWRU5UOgotCQlhcHJpbnRfbm9ybWFsKCIgZXZlbnQgY291
bnRlciIpOworCQlhcHJpbnRfbmFpdmUoIjogTW9kZSAyOiBDb3VudGVyIik7CisJCWFwcmludF9u
b3JtYWwoIjogUENGODU4MyBNb2RlIDI6IENvdW50ZXIiKTsKIAkJYnJlYWs7CiAKIAljYXNlIFBD
Rjg1ODNfQ1NSX0ZOX1RFU1Q6Ci0JCWFwcmludF9ub3JtYWwoIiB0ZXN0IG1vZGUiKTsKKwkJYXBy
aW50X25haXZlKCI6IE1vZGUgMzogVGVzdCBtb2RlIik7CisJCWFwcmludF9ub3JtYWwoIjogUENG
ODU4MyBNb2RlIDM6IFRlc3QgbW9kZSIpOwogCQlicmVhazsKIAl9Ci0JaWYgKGNzciAmIFBDRjg1
ODNfQ1NSX1NUT1ApCi0JCWFwcmludF9ub3JtYWwoIiwgc3RvcHBlZCIpOwotCWlmIChjc3IgJiBQ
Q0Y4NTgzX0NTUl9BTEFSTUVOQUJMRSkKLQkJYXByaW50X25vcm1hbCgiLCBhbGFybSBlbmFibGVk
Iik7CiAJYXByaW50X25vcm1hbCgiXG4iKTsKIAogCXNjLT5zY19vcGVuID0gMDsKIAotCXNjLT5z
Y190b2RyLnRvZHJfZGV2ID0gc2VsZjsKLQlzYy0+c2NfdG9kci50b2RyX2dldHRpbWUgPSBwY2Zy
dGNfZ2V0dGltZTsKLQlzYy0+c2NfdG9kci50b2RyX3NldHRpbWUgPSBwY2ZydGNfc2V0dGltZTsK
Kwlzd2l0Y2ggKGNzciAmIFBDRjg1ODNfQ1NSX0ZOX01BU0spIHsKKworCWNhc2UgUENGODU4M19D
U1JfRk5fMzI3NjhIWjoKKwljYXNlIFBDRjg1ODNfQ1NSX0ZOXzUwSFo6CisJCXNjLT5zY190b2Ry
LnRvZHJfZGV2ID0gc2VsZjsKKwkJc2MtPnNjX3RvZHIudG9kcl9nZXR0aW1lID0gcGNmcnRjX2dl
dHRpbWU7CisJCXNjLT5zY190b2RyLnRvZHJfc2V0dGltZSA9IHBjZnJ0Y19zZXR0aW1lOworCisJ
CXRvZHJfYXR0YWNoKCZzYy0+c2NfdG9kcik7CisJCWJyZWFrOwogCi0JdG9kcl9hdHRhY2goJnNj
LT5zY190b2RyKTsKKwljYXNlIFBDRjg1ODNfQ1NSX0ZOX0VWRU5UOgorCQlpZiAoKHNjLT5zY19z
bWUgPSBzeXNtb25fZW52c3lzX2NyZWF0ZSgpKSA9PSBOVUxMKSB7CisJCQlhcHJpbnRfZXJyb3Jf
ZGV2KHNjLT5zY19kZXYsCisJCQkgICJ1bmFibGUgdG8gY3JlYXRlIHN5c21vbiBzdHJ1Y3R1cmUi
KTsKKwkJCXNjLT5zY19zbWUgPSBOVUxMOworCQkJcmV0dXJuIDsKKwkJfQorCQlzYy0+c2NfY291
bnRlci51bml0cz1FTlZTWVNfSU5URUdFUjsKKwkJc2MtPnNjX2NvdW50ZXIuc3RhdGU9RU5WU1lT
X1NJTlZBTElEOworCQlzdHJsY3B5KHNjLT5zY19jb3VudGVyLmRlc2MsICJjb3VudGVyIiwKKwkJ
IHNpemVvZihzYy0+c2NfY291bnRlci5kZXNjKSk7CisJCWlmIChzeXNtb25fZW52c3lzX3NlbnNv
cl9hdHRhY2goc2MtPnNjX3NtZSwgJnNjLT5zY19jb3VudGVyKSkgeworCQkJc3lzbW9uX2VudnN5
c19kZXN0cm95KHNjLT5zY19zbWUpOworCQkJcmV0dXJuOworCQl9CisJCQorCQlzYy0+c2Nfc21l
LT5zbWVfbmFtZSA9IGRldmljZV94bmFtZShzZWxmKSA7CisJCXNjLT5zY19zbWUtPnNtZV9yZWZy
ZXNoID0gcGNmcnRjX3JlYWRjb3VudDsKKwkJc2MtPnNjX3NtZS0+c21lX2Nvb2tpZSA9IHNjOwor
CisJCWlmIChzeXNtb25fZW52c3lzX3JlZ2lzdGVyKHNjLT5zY19zbWUpKSB7CisJCQlzeXNtb25f
ZW52c3lzX2Rlc3Ryb3koc2MtPnNjX3NtZSk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBzZXR1
cCBzeXNjdGwgZm9yIHJlc2V0dGluZyBjb3VudGVyICovCisKKwkJaWYgKChlcnJvciA9IHBjZnJ0
Y19zeXNjdGxfc2V0dXAoc2MpKSAhPTApIHsKKwkJCWFwcmludF9lcnJvcl9kZXYoc2MtPnNjX2Rl
diwgImNhbm5vdCBzZXR1cCBzeXNjdGwgdHJlZSAoJWQpXG4iLCBlcnJvcik7CisJCQlzeXNtb25f
ZW52c3lzX2Rlc3Ryb3koc2MtPnNjX3NtZSk7CisJCX0KKwkJc2MtPnJlc2V0X2NvdW50ZXIgPSAw
OworCQlicmVhayA7CisJfQogfQogCiAvKkFSR1NVU0VEKi8KQEAgLTQ5OSwzICs1NjksOTYgQEAK
IAlpaWNfcmVsZWFzZV9idXModGFnLCAwKTsKIAlyZXR1cm4gKDApOwogfQorCitpbnQgcGNmcnRj
X3N5c2N0bF9jaGVjayhTWVNDVExGTl9BUkdTKQoreworCXN0cnVjdCBzeXNjdGxub2RlIG5vZGU7
CisJaW50IHQsIGVycm9yOworCisJdCA9ICooaW50ICopcm5vZGUtPnN5c2N0bF9kYXRhOworCisJ
bm9kZSA9ICpybm9kZTsKKwlub2RlLnN5c2N0bF9kYXRhID0gJnQ7CisJZXJyb3IgPSBzeXNjdGxf
bG9va3VwKFNZU0NUTEZOX0NBTEwoJm5vZGUpKTsKKwlpZiAoZXJyb3IgfHwgbmV3cCA9PSBOVUxM
KQorCQlyZXR1cm4gKGVycm9yKTsKKworCWlmICh0IDwgMCB8fCB0ID4gMSkKKwkJcmV0dXJuIChF
SU5WQUwpOworCisJKihpbnQgKilybm9kZS0+c3lzY3RsX2RhdGEgPSB0OworCXJldHVybiAwOwor
fQorCitzdGF0aWMgaW50IHBjZnJ0Y19zeXNjdGxfc2V0dXAoc3RydWN0IHBjZnJ0Y19zb2Z0YyAq
c2MpCit7CisJaW50IGVycm9yOworCWNvbnN0IHN0cnVjdCBzeXNjdGxub2RlICpjbm9kZTsKKwlp
bnQgc3lzY3Rscm9vdF9udW07CisKKwlpZiAoKGVycm9yID0gc3lzY3RsX2NyZWF0ZXYoJnNjLT5z
Y19wY2ZydGNsb2csIDAsIE5VTEwsICZjbm9kZSwKKwkJMCwgQ1RMVFlQRV9OT0RFLCBkZXZpY2Vf
eG5hbWUoc2MtPnNjX2RldiksCisJCVNZU0NUTF9ERVNDUigicGNmcnRjIGNvdW50ZXIgcmVzZXQi
KSwgTlVMTCwgMCwgTlVMTCwgMCwKKwkJQ1RMX0hXLCBDVExfQ1JFQVRFLCBDVExfRU9MKSkgIT0g
MCkKKwkJcmV0dXJuIGVycm9yOworCXN5c2N0bHJvb3RfbnVtID0gY25vZGUtPnN5c2N0bF9udW07
CisKKwlpZiAoKGVycm9yID0gc3lzY3RsX2NyZWF0ZXYoJnNjLT5zY19wY2ZydGNsb2csIDAsIE5V
TEwsICZjbm9kZSwKKwkJQ1RMRkxBR19SRUFEV1JJVEUsIENUTFRZUEVfSU5ULCAiY291bnRlcl9y
ZXNldCIsCisJCVNZU0NUTF9ERVNDUigiY291bnRlciByZXNldCIpLCBwY2ZydGNfc3lzY3RsX2No
ZWNrLCAwLAorCQkmc2MtPnJlc2V0X2NvdW50ZXIsIDAsIENUTF9IVywKKwkJc3lzY3Rscm9vdF9u
dW0sIENUTF9DUkVBVEUsIENUTF9FT0wpKSAhPSAwKQorCQlyZXR1cm4gZXJyb3I7CisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjZnJ0Y19yZWFkY291bnQoc3RydWN0IHN5c21vbl9lbnZz
eXMgKnNtZSwgZW52c3lzX2RhdGFfdCAqZWRhdGEpCit7CisJc3RydWN0IHBjZnJ0Y19zb2Z0YyAq
c2MgPSBzbWUtPnNtZV9jb29raWU7CisJaW50IGVyciwgaTsKKwl1aW50OF90IGJjZFszXSxjbWRi
dWZbMV07CisJdWludDhfdCB6ZXJvPTA7CisgCisJaWYgKChlcnIgPSBpaWNfYWNxdWlyZV9idXMo
c2MtPnNjX3RhZywgMCkpKSB7CisJCWFwcmludF9lcnJvcl9kZXYoc2MtPnNjX2RldiwKKwkJICAg
ICJwY2ZydGNfcmVhZGNvdW50OiBmYWlsZWQgdG8gYWNxdWlyZSBJMkMgYnVzXG4iKTsKKwkJcmV0
dXJuOworCX0KKworCWZvciAoaSA9IFBDRjg1ODNfQ09VTlRFUjA7IGkgPD0gUENGODU4M19DT1VO
VEVSMjsgaSsrKSB7CisgICAgICAgICAgICAgICAgY21kYnVmWzBdID0gaTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGlpY19leGVjKHNjLT5zY190YWcsIEky
Q19PUF9SRUFEX1dJVEhfU1RPUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2MtPnNj
X2FkZHJlc3MsIGNtZGJ1ZiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJjZFtp
LTFdLCAxLCAwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlpY19yZWxlYXNlX2J1cyhz
Yy0+c2NfdGFnLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcmludF9lcnJvcl9kZXYo
c2MtPnNjX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGNmcnRjX3JlYWRjb3Vu
dDogZmFpbGVkIHRvIHJlYWQgcmVnaXN0ZXIgYXQgJXhcbiIsIGkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorIAorCisJZWRh
dGEtPnZhbHVlX2N1ciA9IGJjZHRvYmluKGJjZFswXSkgKyBiY2R0b2JpbihiY2RbMV0pKjEwMCAr
IGJjZHRvYmluKGJjZFsyXSkqMTAwMDAgOworCWVkYXRhLT5zdGF0ZSA9IEVOVlNZU19TVkFMSUQg
OworCQorCS8qIGlmIHJlc2V0X2NvdW50ZXIgPSAxIHRoZW4gY2xlYXIgdG90YWxzICovCisKKwlp
ZiAoc2MtPnJlc2V0X2NvdW50ZXIgIT0gMCkgeworCQlmb3IgKGkgPSBQQ0Y4NTgzX0NPVU5URVIw
OyBpIDw9IFBDRjg1ODNfQ09VTlRFUjI7IGkrKykgeworICAgICAgICAgICAgICAgIAljbWRidWZb
MF0gPSBpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAlpZiAoKGVyciA9IGlp
Y19leGVjKHNjLT5zY190YWcsIEkyQ19PUF9XUklURV9XSVRIX1NUT1AsCisJCQkJCXNjLT5zY19h
ZGRyZXNzLCBjbWRidWYsIDEsICZ6ZXJvLCAxLCAwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIAlpaWNfcmVsZWFzZV9idXMoc2MtPnNjX3RhZywgMCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAJYXByaW50X2Vycm9yX2RldihzYy0+c2NfZGV2LAorCQkJCQkicGNmcnRjX3JlYWRjb3Vu
dDogZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyIGF0ICV4XG4iLCBpKTsKKwkJCQlyZXR1cm47Cisg
ICAgICAgICAgICAgICAgCX0KKyAgICAgICAgCX0KKyAKKwkJc2MtPnJlc2V0X2NvdW50ZXIgPSAw
IDsKKwl9CisKKwlpaWNfcmVsZWFzZV9idXMoc2MtPnNjX3RhZywgMCk7Cit9CgotLS0gcGNmODU4
M3JlZy5oLm9yaWcJMjAxMy0wOC0wNyAyMDozODo0NS4wMDAwMDAwMDAgKzAxMDAKKysrIHBjZjg1
ODNyZWcuaAkyMDI2LTA5LTI4IDE0OjQzOjU4LjczMDY5NDQyMiArMDEwMApAQCAtMjIsNiArMjIs
NyBAQAogICovCiAjZGVmaW5lIFBDRjg1ODNfQUREUk1BU0sJMHgzZmYKICNkZWZpbmUgUENGODU4
M19BRERSCQkweDUwCisjZGVmaW5lIFBDRjg1ODNfQUREUjIJCTB4NTEKIAogI2RlZmluZSBQQ0Y4
NTgzX1JFR19DU1IJCTB4MDAKICNkZWZpbmUgUENGODU4M19SRUdfQ0VOVEkJMHgwMQpAQCAtODYs
NCArODcsNyBAQAogI2RlZmluZSBQQ0Y4NTgzX0FMTUNUTF9USU1FUkFMTQkJMHg0MAogI2RlZmlu
ZSBQQ0Y4NTgzX0FMTUNUTF9BTE1JTlQJCTB4ODAKIAorI2RlZmluZSBQQ0Y4NTgzX0NPVU5URVIw
CQkweDAxCisjZGVmaW5lIFBDRjg1ODNfQ09VTlRFUjEJCTB4MDIKKyNkZWZpbmUgUENGODU4M19D
T1VOVEVSMgkJMHgwMwogI2VuZGlmCS8qIF9QQ0Y4NTgzUkVHX0ggKi8KCi0tLSAvZGV2L251bGwJ
MjAyNi0wOS0yOSAxODo0MzoxMS41NjIwODk0MTIgKzAxMDAKKysrIHBjZjg1ODMuNAkyMDI2LTA5
LTI4IDIzOjExOjQ5Ljk4MzU0MjY0NiArMDEwMApAQCAtMCwwICsxLDc5IEBACisuXCIKKy5cIiBD
b3B5cmlnaHQgKGMpIDIwMjYgRGF2ZSBUeXNvbiA8ZHR5c29uQGFuZHVpbi5vcmcudWs+CisuXCIK
Ky5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlz
IHNvZnR3YXJlIGZvciBhbnkKKy5cIiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVy
ZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisuXCIgY29weXJpZ2h0IG5vdGlj
ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKy5cIgor
LlwiIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NM
QUlNUyBBTEwgV0FSUkFOVElFUworLlwiIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5D
TFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKy5cIiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorLlwi
IEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
T1IgQU5ZIERBTUFHRVMKKy5cIiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNF
LCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKy5cIiBBQ1RJT04gT0YgQ09OVFJBQ1Qs
IE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorLlwi
IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09G
VFdBUkUuCisuXCIKKy5EZCBPY3RvYmVyIDEsIDIwMjYKKy5EdCBQQ0Y4NTgzCisuT3MKKy5TaCBO
QU1FCisuTm0gcGNmODU4MworLk5kIERyaXZlciBmb3IgTlBYIFBDRjg1ODMgQ2xvY2sgYW5kIENh
bGVuZGFyL0NvdW50ZXIvMjQwIHggOGJpdCBSQU0KK3ZpYSBJMkMgYnVzCisuU2ggU1lOT1BTSVMK
Ky5DZCAicGNmcnRjKiBhdCBpaWM/IGFkZHIgMHg1MCIKKy5DZCAicGNmcnRjKiBhdCBpaWM/IGFk
ZHIgMHg1MCBmbGFncyB4IgorLkNkICJwY2ZydGMqIGF0IGlpYz8gYWRkciAweDUxIgorLkNkICJw
Y2ZydGMqIGF0IGlpYz8gYWRkciAweDUxIGZsYWdzIHgiCisuU2ggREVTQ1JJUFRJT04KK1RoZQor
Lk5tCitkcml2ZXIgc3VwcG9ydHMgdGhlIFBDRjg1ODMgbXVsdGlmdW5jdGlvbiBjaGlwIHdoaWNo
IGNhbiBvcGVyYXRlIGluIG9uZSBvZiBmb3VyIG1vZGVzCitkZXBlbmRpbmcgb24gdGhlIHZhbHVl
IG9mIHRoZSBmbGFnIFtpZiBzcGVjaWZpZWRdOgorLkJsIC10YWcKKy5JdCBtb2RlIDAgLSBDbG9j
ayAmIENhbGVuZGFyIHVzaW5nIGEgMzI3NjggaHogY3J5c3RhbC4KK1RoaXMgaXMgdGhlIGRlZmF1
bHQgbW9kZSBpbiB0aGUgYWJzZW5jZSBvZiBhIGZsYWdzIGZpZWxkIGFuZCBpcyB0aGUgc3RhdGUg
d2hlbiBhCitwb3dlci1vbiByZXNldCBvY2N1cnMuCisuSXQgbW9kZSAxIC0gQ2xvY2sgJiBDYWxl
bmRhciB1c2luZyBleHRlcm5hbCA1MCBIeiBjbG9jay4KK1NpbWlsYXIgdG8gbW9kZSAwLCBidXQg
cmVsaWVzIG9uIGFuIGV4dGVybmFsIGNsb2NrIHNvdXJjZSByYXRoZXIgdGhhbiBhIGNyeXN0YWwu
CisuSXQgbW9kZSAyIC0gQ291bnRlciBmb3IgZXh0ZXJuYWwgaW5wdXRzLgorVGhlIGNsb2NrICYg
Y2FsZW5kYXIgYXJlIGRpc2FibGVkIGFuZCB0aGUgZGV2aWNlIGNvdW50cyBleHRlcm5hbCBldmVu
dHMgdXNpbmcgYSAzIGJ5dGUKK2JjZCBjb3VudGVyIFswLTk5OTk5OV0uCisuSXQgbW9kZSAzIC0g
VGVzdCBtb2RlLgorVGhpcyBpcyB1bmRvY3VtZW50ZWQgYW5kIHVubGlrZWx5IHRvIGJlIHVzZWZ1
bC4gCisuRWwKKy5QcAorVGhlCisuTm0KK2RyaXZlciBpcyBjb21tb25seSB1c2VkIHRvIHN1cHBv
cnQgYSBSZWFsIFRpbWUgQ2xvY2sgdXNpbmcgYSAzMjc2OCBoeiBjcnlzdGFsIGFuZCBhIGJhY2t1
cCBiYXR0ZXJ5LiBJdCBhbHNvIHByb3ZpZGVzIGEgc21hbGwgYW1vdW50IG9mIGJhdHRlcnkgYmFj
a2VkIFJBTSB3aGljaCBpcyB1c2VkLCBmb3IgZXhhbXBsZSwgZm9yIGJvb3RzdHJhcHBpbmcgYWNv
cm4zMiBzeXN0ZW0uIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSBhbiBleHRlcm5hbCA1MGh6IGNsb2Nr
IGJ5IHN3aXRjaGluZyB0byBtb2RlIDEgLSB0aGlzIG1pZ2h0IGJlIHVzZWZ1bCB3aXRoIGEgRXVy
b3BlYW4gbWFpbnMgZGVyaXZlZCBzaWduYWwgYXMgdGhlIGxvbmcgdGVybSBkcmlmdCBpcyBsaWtl
bHkgdG8gYmUgbGVzcyB0aGFuIGFuIHVuc3RhYmlsaXNlZCBjcnlzdGFsLiBBY2Nlc3MgbWV0aG9k
cyB0byByZXRyaWV2ZSBhbmQgc2V0IGRhdGUgYW5kIHRpbWUgYXJlIHByb3ZpZGVkIHRocm91Z2gg
dGhlCisuRW0gVE9EUgoraW50ZXJmYWNlIGRlZmluZWQgaW4KKy5YciB0b2RyIDkgLgorLlBwCitT
d2l0Y2hpbmcgdG8gbW9kZSAyIHByb3ZpZGVzIGFjY2VzcyB0byBhIDYgZGlnaXQgQkNEIGNvdW50
ZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY291bnQgYXJiaXRhcnkgZXh0ZXJuYWwgZXZlbnRzLiBU
aGUgZHJpdmVyIG1hcHMgdGhpcyBjb3VudGVyIHRvIGFuIGludGVnZXIgZW52c3RhdCB2YXJpYWJs
ZSB3aGljaCBjYW4gYmUgcmVhZCB2aWEgdGhlIG5vcm1hbCBlbnZzdGF0IHN1YnN5c3RlbSBhbmQg
YWxzbyBleHBvc2VzIGEgc3lzY3RsIHZhcmlhYmxlIHRvIGFsbG93IHRoZSBjb3VudGVyIHRvIGJl
IHJlc2V0LgorLlNoIFNZU0NUTCBWQVJJQUJMRVMKK0luIG1vZGUgMiB0aGUgZm9sbG93aW5nCisu
WHIgc3lzY3RsIDMKK3ZhcmlhYmxlcyBhcmUgcHJvdmlkZWQ6CisuQmwgLXRhZyAtd2lkdGggaW5k
ZW50CisuSXQgTGkgaHcucGNmcnRjMS5jb3VudGVyX3Jlc2V0CitJZiB0aGlzIGlzIHNldCB0byAx
IHRoZW4gdGhlIG5leHQgcmVhZCBvZiB0aGUgZW52c3RhdCBjb3VudGVyIGNhdXNlcyB0aGUgQkNE
IGNvdW50ZXIgdG8gYmUgemVyb2VkIGFuZCByZXNldHMgdGhlIHN5c2N0bCB2YXJpYWJsZSBiYWNr
IHRvIHplcm8uCisuU2ggU0VFIEFMU08KKy5YciB0b2RyIDkgLCAKKy5YciBlbnZzdGF0IDggLCAK
Ky5YciBzeXNjdGwgOAorLlNoIEhJU1RPUlkKK1RoZQorLk5tCitkcml2ZXIgZmlyc3QgYXBwZWFy
ZWQgaW4KKy5OeCAxLjAgLgorLlNoIEJVR1MKK1RoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0
aGUgY2hpcCdzIGFsYXJtIGFuZCB0aW1lciBmZWF0dXJlcy4KKy5TaCBBVVRIT1JTCitUaGUKKy5O
bQorZHJpdmVyIHdhcyB3cml0dGVuIGJ5IFN0ZXZlIEMuIFdvb2Rmb3JkIGFuZCBKYXNvbiBSLiBU
aG9ycGUgZm9yIFdhc2FiaSBTeXN0ZW1zLCBJbmMuIGJhc2VkIG9uIEJlbiBIYXJyaXMncyBQQ0Y4
NTgzIGRyaXZlciBmb3IgTmV0QlNEL2Fjb3JuMjYuCisuUHAKK1N1YnNlcXVlbnQgbW9kaWZpY2F0
aW9ucyB0byBzdXBwb3J0IG90aGVyIG1vZGVzIGJ5CisuQW4gRGF2ZSBUeXNvbiBBcSBNdCBkdHlz
b25AYW5kdWluLm9yZy51aworIAo=
--=-88t/1wLz9f76B+tjY4kn--
From: Julian Coleman <jdc@coris.org.uk>
To: Dave Tyson <dtyson@anduin.org.uk>
Cc: gnats-bugs@netbsd.org
Subject: Re: kern/60700: Enhancement and man page for PCF8583
Date: Thu, 8 Oct 2026 09:47:43 +0200
Hi,
> This is an updated patch which addresses points raised by Julian. The
> device does not contain NVRAM and so does not retain info over power
> down unless a battery is attached. The print lines now display the mode
> on the attachment line. The new man page has some updates and
> corrections.
Just a quick question/comment on the man page:
> +.Dt PCF8583
> +.Os
> +.Sh NAME
> +.Nm pcf8583
> +.Nd Driver for NPX PCF8583 Clock and Calendar/Counter/240 x 8bit RAM
> +via I2C bus
> +.Sh SYNOPSIS
> +.Cd "pcfrtc* at iic? addr 0x50"
> +.Cd "pcfrtc* at iic? addr 0x50 flags x"
> +.Cd "pcfrtc* at iic? addr 0x51"
> +.Cd "pcfrtc* at iic? addr 0x51 flags x"
The name is pcf8583, but in the synopsis and in the attach line:
> pcfrtc1 at iic2 addr 0x51: PCF8583 Mode 2: Counter
we have pcfrtc. I would be tempted to rename the man page to "pcfrtc", if
that's OK?
Regards,
Julian
--
From: Dave Tyson <dtyson@anduin.org.uk>
To: gnats-bugs@netbsd.org, Julian Coleman via gnats <gnats-admin@NetBSD.org>,
kern-bug-people@netbsd.org, gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc:
Subject: Re: kern/60700: Enhancement and man page for PCF8583
Date: Thu, 08 Oct 2026 09:50:07 +0100
On 8 October 2026 08:50:02 BST, Julian Coleman via gnats <gnats-admin@NetBS=
D=2Eorg> wrote:
>The following reply was made to PR kern/60700; it has been noted by GNATS=
=2E
>
>From: Julian Coleman <jdc@coris=2Eorg=2Euk>
>To: Dave Tyson <dtyson@anduin=2Eorg=2Euk>
>Cc: gnats-bugs@netbsd=2Eorg
>Subject: Re: kern/60700: Enhancement and man page for PCF8583
>Date: Thu, 8 Oct 2026 09:47:43 +0200
>
> Hi,
>=20
> > This is an updated patch which addresses points raised by Julian=2E Th=
e
> > device does not contain NVRAM and so does not retain info over power
> > down unless a battery is attached=2E The print lines now display the m=
ode
> > on the attachment line=2E The new man page has some updates and
> > corrections=2E
>=20
> Just a quick question/comment on the man page:
>=20
> > +=2EDt PCF8583
> > +=2EOs
> > +=2ESh NAME
> > +=2ENm pcf8583
> > +=2ENd Driver for NPX PCF8583 Clock and Calendar/Counter/240 x 8bit RA=
M
> > +via I2C bus
> > +=2ESh SYNOPSIS
> > +=2ECd "pcfrtc* at iic? addr 0x50"
> > +=2ECd "pcfrtc* at iic? addr 0x50 flags x"
> > +=2ECd "pcfrtc* at iic? addr 0x51"
> > +=2ECd "pcfrtc* at iic? addr 0x51 flags x"
>=20
> The name is pcf8583, but in the synopsis and in the attach line:
>=20
> > pcfrtc1 at iic2 addr 0x51: PCF8583 Mode 2: Counter
>=20
> we have pcfrtc=2E I would be tempted to rename the man page to "pcfrtc"=
, if
> that's OK?
>=20
> Regards,
>=20
> Julian
>=20
> --=20
>=20
Yes, that's fine=2E I always thought it was peculiar that the attach name =
differed from the chip name - probably historical=2E
In the code patch It might be worth changing the sysctl flag CTLFLAG_READW=
RITE to CTLFLAG_ALLWRITE so non-root users can reset the counter stats=2E T=
here are no security issues with this, but if you prefer to leave is as-is =
that's OK=2E
Dave
Dave
--=20
Sent from my Android device with K-9 Mail=2E
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.51 2026/08/10 02:28:17 riastradh Exp $
$NetBSD: gnats_config.sh,v 1.10 2026/05/13 22:00:09 riastradh Exp $
Copyright © 1994-2026
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.