Since we've seen that having a driver for the GPIO controller on
modern Intel laptops is important, here is a diff that makes
pchgpio(4) attach in more cases.  In particular, this adds support for
the "performace" CPUs often found in larger laptop models.

If you currently have a

"INT3450" at acpi0 not configured

or

"INT34C6" at acpi0 not configured

line in your dmesg, please try this diff and report back to me.

Thanks,

Mark


Index: dev/acpi/pchgpio.c
===================================================================
RCS file: /cvs/src/sys/dev/acpi/pchgpio.c,v
retrieving revision 1.7
diff -u -p -r1.7 pchgpio.c
--- dev/acpi/pchgpio.c  21 Sep 2021 14:59:13 -0000      1.7
+++ dev/acpi/pchgpio.c  27 Sep 2021 13:33:50 -0000
@@ -26,7 +26,7 @@
 #include <dev/acpi/amltypes.h>
 #include <dev/acpi/dsdt.h>
 
-#define PCHGPIO_MAXCOM         4
+#define PCHGPIO_MAXCOM         5
 
 #define PCHGPIO_CONF_TXSTATE           0x00000001
 #define PCHGPIO_CONF_RXSTATE           0x00000002
@@ -107,11 +107,45 @@ struct cfdriver pchgpio_cd = {
 };
 
 const char *pchgpio_hids[] = {
+       "INT3450",
        "INT34BB",
        "INT34C5",
+       "INT34C6",
        NULL
 };
 
+const struct pchgpio_group cnl_h_groups[] =
+{
+       /* Community 0 */
+       { 0, 0, 0, 24, 0 },             /* GPP_A */
+       { 0, 1, 25, 50, 32 },           /* GPP_B */
+
+       /* Community 1 */
+       { 1, 0, 51, 74, 64 },           /* GPP_C */
+       { 1, 1, 75, 98, 96 },           /* GPP_D */
+       { 1, 2, 99, 106, 128 },         /* GPP_G */
+
+       /* Community 3 */
+       { 2, 0, 155, 178, 192 },        /* GPP_K */
+       { 2, 1, 179, 202, 224 },        /* GPP_H */
+       { 2, 2, 203, 215, 256 },        /* GPP_E */
+       { 2, 3, 216, 239, 288 },        /* GPP_F */
+
+       /* Community 4 */
+       { 3, 2, 269, 286, 320 },        /* GPP_I */
+       { 3, 3, 287, 298, 352 },        /* GPP_J */
+};
+
+const struct pchgpio_device cnl_h_device =
+{
+       .pad_size = 16,
+       .gpi_is = 0x100,
+       .gpi_ie = 0x120,
+       .groups = cnl_h_groups,
+       .ngroups = nitems(cnl_h_groups),
+       .npins = 384,
+};
+
 const struct pchgpio_group cnl_lp_groups[] =
 {
        /* Community 0 */
@@ -171,9 +205,47 @@ const struct pchgpio_device tgl_lp_devic
        .npins = 360,
 };
 
+const struct pchgpio_group tgl_h_groups[] =
+{
+       /* Community 0 */
+       { 0, 0, 0, 24, 0 },             /* GPP_A */
+       { 0, 1, 25, 44, 32 },           /* GPP_R */
+       { 0, 2, 45, 70, 64 },           /* GPP_B */
+
+       /* Community 1 */
+       { 1, 0, 79, 104, 128 },         /* GPP_D */
+       { 1, 1, 105, 128, 160 },        /* GPP_C */
+       { 1, 2, 129, 136, 192 },        /* GPP_S */
+       { 1, 3, 137, 153, 224 },        /* GPP_G */
+
+       /* Community 3 */
+       { 2, 0, 181, 193, 288 },        /* GPP_E */
+       { 2, 1, 194, 217, 320 },        /* GPP_F */
+
+       /* Community 4 */
+       { 2, 0, 218, 241, 352 },        /* GPP_H */
+       { 2, 1, 242, 251, 384 },        /* GPP_J */
+       { 2, 2, 252, 266, 416 },        /* GPP_K */
+
+       /* Community 5 */
+       { 3, 0, 267, 281, 448 },        /* GPP_I */
+};
+
+const struct pchgpio_device tgl_h_device =
+{
+       .pad_size = 16,
+       .gpi_is = 0x100,
+       .gpi_ie = 0x120,
+       .groups = tgl_lp_groups,
+       .ngroups = nitems(tgl_h_groups),
+       .npins = 480,
+};
+
 struct pchgpio_match pchgpio_devices[] = {
+       { "INT3450", &cnl_h_device },
        { "INT34BB", &cnl_lp_device },
        { "INT34C5", &tgl_lp_device },
+       { "INT34C6", &tgl_h_device },
 };
 
 int    pchgpio_read_pin(void *, int);

Reply via email to