Skip to content

acpi: add support for PCC table #233

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

acpi: add support for PCC table #233

wants to merge 2 commits into from

Conversation

00xc
Copy link
Contributor

@00xc 00xc commented Nov 25, 2024

The PCCT (Platform Communications Channel Table) is a generic mechanism for OSPM to communicate with an entity in the platform (e.g. a platform controller, or a Baseboard Management Controller (BMC)).

The table provides access to a new namespace, to which Generic Address Structures (GAS) in other tables can refer to. Each entry in the PCCT is an addressable subspace, which provides the address and length of a shared memory region that can be used for communication with the platform. Subspaces may also have a doorbell register to notify the platform of certain events, as well as additional registers.

See the ACPI spec for more information: https://uefi.org/htmlspecs/ACPI_Spec_6_4_html/14_Platform_Communications_Channel/Platform_Comm_Channel.html

Unfortunately for us, the PCC address space allows all access size values (as opposed to e.g. system memory, which only allows 1, 2, 4 and 8-byte access sizes), which means we must remove the AccessSize enum, and have a regular u8 in the GenericAddress struct.

00xc added 2 commits November 25, 2024 10:13
For certain address spaces, like the PCC (Platform Communications
Channel), all access size values in a GAS (Generic Address Structure)
are valid. Therefore, while this might make sense for other address
spaces (like system memory), we cannot keep the enum with a subset of
valid values.
The PCCT (Platform Communications Channel Table) is a generic
mechanism for OSPM to communicate with an entity in the platform (e.g.
a platform controller, or a Baseboard Management Controller (BMC)).

The table provides access to a new namespace, to which Generic Address
Structures (GAS) in other tables can refer to. Each entry in the PCCT
is an addressable subspace, which provides the address and length of a
shared memory region that can be used for communication with the
platform. Subspaces may also have a doorbell register to notify the
platform of certain events, as well as additional registers.
@00xc
Copy link
Contributor Author

00xc commented Mar 23, 2025

@IsaacWoods have you had time to review this?

@IsaacWoods
Copy link
Member

Wow, thanks for working on this and apologies for the delay in reviewing.

I have not had the chance to look into the PCC very much, but have just glanced over the section in the spec. Have you managed to test this with a machine that actually has the tables for the PCC - I can imagine it existing mainly on servers with BMCs but maybe it is present on e.g. enterprise thin-clients with BMCs for remote management?

I'll hopefully have a chance to sit and look through the structures in detail soon, but they don't look unreasonable at first glance. One thing you could address is the master/slave terminology - I can see that they're the terms used by the spec, but I generally try to avoid them, and this is an instance where they don't even really seem to make sense. I'll leave an alternative up to you - something like Ospm and Firmware / Controller and Platform, whatever really.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants