xref: /aosp_15_r20/external/coreboot/Documentation/superio/common/pnp.md (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1# PNP devices
2
3Typical PNP devices are Super I/Os, LPC-connected TPMs and board
4management controllers.
5
6PNP devices are usually connected to the LPC or eSPI bus of a system
7and shouldn't be confused with PCI(e) devices that use a completely
8different plug and play mechanism. PNP originates in the ISA plug and
9play specification. Since the original ISA bus is more or less extinct,
10the auto-detection part of ISA PNP is mostly irrelevant nowadays. For
11the register offsets for different functionality, appendix A of that
12specification is still the main reference though.
13
14## Configuration access and config mode
15
16Super I/O chips connected via LPC to the southbridge usually have their
17I/O-mapped configuration interface with a size of two bytes at the base
18address `0x2e` or `0x4e`. Other PNP devices have their configuration
19interface at other addresses.
20
21The two byte registers allow access to an indirect 256 bytes big
22register space that contains the configuration. By writing the index to
23the lower byte (e.g. `0x2e`), you can access the register contents at
24that index by reading/writing the higher byte (e.g. `0x2f`).
25
26To prevent accidental changes of the Super I/O (SIO) configuration,
27the SIOs need a configuration mode unlock sequence. After changing the
28configuration, the configuration mode should be left again, by sending
29the configuration mode lock sequence.
30
31## Logical device numbers (LDN)
32
33Each PNP device can contain multiple logical devices. The bytes from
34`0x00` to `0x2f` in the indirect configuration register space are common
35for all LDNs, but some SIO chips require a certain LDN to be selected in
36order to write certain registers in there. An LDN gets selected by
37writing the LDN number to the LDN select register `0x07`. Registers
38`0x30` to `0xff` are specific to each LDN number.
39
40coreboot encodes the physical LDN number in the lower byte of the LDN
41number.
42
43### Virtual logical device numbers
44
45Register `0x30` is the LDN enable register and since it is an 8 bit
46register, it can contain up to 8 enable bits for different parts of
47the functionality of that logical device. To set a certain enable bit
48in one physical LDN, the concept of virtual LDNs was introduced.
49Virtual LDNs share the registers of their base LDN, but allow to
50specify which part of a LDN should be enabled.
51
52coreboot encodes the enable bit number and by that the virtual LDN
53part in the lower 3 bits of the higher byte of the LDN number.
54
55## I/O resources
56
57Starting at register address `0x60`, each LDN has 2 byte wide I/O base
58address registers. The size of an I/O resource is always a power of
59two.
60
61### I/O resource masks
62
63The I/O resource masks encode both the size and the maximum base
64address of the corresponding IO resource. The number of zeros counted
65from the least significant bit encode the resource size. If N is the
66number of LSBs being zero, which can also be zero if the LSB is a one,
67the resource has N address bits and a size of 2\*\*N bytes. The mask
68address is also the highest possible address to map the I/O region.
69
70A typical example for an I/O resource mask is `0x07f8` which is
71`0b0000011111111000` in binary notation. The three LSBs are zeros here,
72so it's an eight byte I/O resource with three address offset bits
73inside the resource. The highest base address it can be mapped to is
74`0x07f8`, so the region will end at `0x07ff`.
75
76The Super I/O datasheets typically contain the information about the
77I/O resource masks. On most Super I/O chips the mask can also be found
78out by writing `0xffff` to the corresponding I/O base address register
79and reading back the value; since the lowest and highest bits are
80hard-wired to zero according to the I/O resource size and maximal
81possible I/O address, this gives the mask.
82
83## IRQ resources
84
85Each physical LDN has up to two configurable interrupt request register
86pairs `0x70`, `0x71` and `0x72`, `0x73`. Each pair can be configured to
87use a certain IRQ number. Writing 1 to 15 into the first register
88selects the IRQ number generated by the corresponding IRQ source and
89enables IRQ generation; writing 0 to it disables the generation of IRQs
90for the source. The second register selects the IRQ type (level or edge)
91and IRQ level (high or low). For LPC SIOs the IRQ type is hard-wired to
92edge.
93
94On the LPC bus a shared SERIRQ line is used to signal IRQs to the
95host; the IRQ number gets encoded by the number of LPC clock cycles
96after the start frame before the device pulls the open drain
97connection low.
98
99SERIRQ can be used in two different modes: In the continuous SERIRQ
100mode the host continuously sends IRQ frame starts and the devices
101signal their IRQ request by pulling low the SERIRQ line at the right
102time. In quiet SERIRQ mode the host doesn't send IRQ frame starts, so
103the devices have to send both the IRQ frame start and the encoded IRQ
104number. The quiet mode is often broken.
105
106## DRQ resources
107
108Each physical LDN has two legacy ISA-style DMA request channel
109registers at `0x74` and `0x75`. Those are only used for legacy devices
110like parallel printer ports or floppy disk controllers.
111
112Each device using LPC legacy DMA needs its own LDMA line to the host.
113Some newer chipsets have dropped the LDMA line and with that the
114legacy DMA capability on LPC.
115