Module Name: src Committed By: jmcneill Date: Thu Dec 12 22:30:47 UTC 2024
Modified Files: src/sys/dev/acpi: qcomgpio.c Log Message: qcomgpio: Add event counters for individual interrupt pins. arm64$ vmstat -i | grep qcomgpio qcomgpio0 pin 126 1 0 qcomgpio0 pin 3 1 0 To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/dev/acpi/qcomgpio.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/acpi/qcomgpio.c diff -u src/sys/dev/acpi/qcomgpio.c:1.5 src/sys/dev/acpi/qcomgpio.c:1.6 --- src/sys/dev/acpi/qcomgpio.c:1.5 Thu Dec 12 21:51:19 2024 +++ src/sys/dev/acpi/qcomgpio.c Thu Dec 12 22:30:47 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: qcomgpio.c,v 1.5 2024/12/12 21:51:19 jmcneill Exp $ */ +/* $NetBSD: qcomgpio.c,v 1.6 2024/12/12 22:30:47 jmcneill Exp $ */ /*- * Copyright (c) 2024 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: qcomgpio.c,v 1.5 2024/12/12 21:51:19 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: qcomgpio.c,v 1.6 2024/12/12 22:30:47 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -40,6 +40,7 @@ __KERNEL_RCSID(0, "$NetBSD: qcomgpio.c,v #include <sys/queue.h> #include <sys/kmem.h> #include <sys/mutex.h> +#include <sys/evcnt.h> #include <dev/acpi/acpireg.h> #include <dev/acpi/acpivar.h> @@ -71,6 +72,8 @@ struct qcomgpio_intr_handler { void *ih_arg; int ih_pin; int ih_type; + struct evcnt ih_evcnt; + char ih_name[16]; LIST_ENTRY(qcomgpio_intr_handler) ih_list; }; @@ -536,6 +539,7 @@ qcomgpio_intr_establish(void *priv, int qih->ih_pin = pin; qih->ih_type = (irqmode & GPIO_INTR_LEVEL_MASK) != 0 ? IST_LEVEL : IST_EDGE; + snprintf(qih->ih_name, sizeof(qih->ih_name), "pin %d", pin); mutex_enter(&sc->sc_lock); @@ -584,6 +588,9 @@ qcomgpio_intr_establish(void *priv, int mutex_exit(&sc->sc_lock); + evcnt_attach_dynamic(&qih->ih_evcnt, EVCNT_TYPE_INTR, + NULL, device_xname(sc->sc_dev), qih->ih_name); + return qih; } @@ -594,6 +601,8 @@ qcomgpio_intr_disestablish(void *priv, v struct qcomgpio_intr_handler *qih = ih; uint32_t val; + evcnt_detach(&qih->ih_evcnt); + mutex_enter(&sc->sc_lock); LIST_REMOVE(qih, ih_list); @@ -663,6 +672,8 @@ qcomgpio_intr(void *priv) val = RD4(sc, TLMM_GPIO_INTR_STATUS(pin)); if ((val & TLMM_GPIO_INTR_STATUS_INTR_STATUS) != 0) { + qih->ih_evcnt.ev_count++; + rv |= qih->ih_func(qih->ih_arg); val &= ~TLMM_GPIO_INTR_STATUS_INTR_STATUS;