add iosf(4), a driver for the Intel OnChip System Fabric
authordlg <dlg@openbsd.org>
Sun, 23 Apr 2023 00:20:26 +0000 (00:20 +0000)
committerdlg <dlg@openbsd.org>
Sun, 23 Apr 2023 00:20:26 +0000 (00:20 +0000)
commita72a7a26ca74e0ebf4947f74ac0c009a2c6b3897
treeaaccda732618231bf3098877076c65e775bffc68
parent336d7bd6fcc63e38c49f467f1dedde1b49223dbf
add iosf(4), a driver for the Intel OnChip System Fabric

The OnChip System Fabric is mostly an implementation detail on a
bunch of Intel SoC platforms we usually don't care about, except
on some of these machines there are devices shared between the
kernel and the platform that need to coordinate. The iosf(4) driver
allows the kernel to talk via a mailbox interface to take and
release a semaphore that the hardware also uses to lock around
accesses to some components.

There are two ways to talk to the mailbox interface, one via mmio
ops on an INT33BD acpi device. The other is via magic pci conf space
operations on the pci host device. This provides a generic iosf
driver with attachment glue for both acpi and pci so either can be
used. According to linux, the pci ops are a lot more reliable and
less buggy, so if both acpi and pci are available we will prefer
the pci ops after they attach.

I found this because I got a Dell Wyse 3040, which is a cherry
trail/braswell system that has an acpitz(4) which talks to a tipmic(4)
device attached to dwiic(4) on acpi. This box almost always locked
up by the time it got to showing the console login prompt, and it
turns out one of the reasons for this is because acpitz was touching
the tipmic device at the same time the powerunit on the platform
was also trying to use it. The tipmic device lists the iosf mailbox
as a dependency, and the dwiic controller has a _SEM property, both
of which indicate we should use an iosf device to coordinate iic
ops when talking to the tipmic.

This adds the code, but doesn't wire it into dwiic or the build yet.

help from patrick@ jsg@ kettenis@
ok kettenis@ patrick@
sys/conf/files
sys/dev/acpi/files.acpi
sys/dev/acpi/iosf_acpi.c [new file with mode: 0644]
sys/dev/ic/iosf.c [new file with mode: 0644]
sys/dev/ic/iosfvar.h [new file with mode: 0644]
sys/dev/pci/files.pci
sys/dev/pci/iosf_pci.c [new file with mode: 0644]