Hi Andrew!

Thank you for your mail!

On Wed, Dec 20, 2017 at 11:25 PM, Andrew Cooks
<andrew.co...@opengear.com> wrote:

> I'm working on gpio for an AMD Family 16h Model 30h system[1].
> The SoC is the same as the GX412-TC used in the PC Engines APU2.

OK

> There is an out-of-tree gpio driver (gpio-amd) for this SoC in the meta-amd 
> yocto layer[2].

That is bad. It needs to be upstream.

I have to try very hard to avoid sarcasm about it "seeming like a good idea
at the time" and silly things like that.

What we are seeing is breakage of social norms, in this case,
upstream first. :(

> Another driver (gpio-sb8xx) was submitted for upstream inclusion, but was
> knocked back with the suggestion that pinctrl is the way forward[3].

Hm I cannot follow link [3] right now. And I don't remember the submission :(
It doesn't seem to be in my mail archives either.

> I would much prefer to use a mainline driver for the system I'm working
> on, so I'm looking at the pinctrl-amd driver to see whether it applies to our
> SoC, or whether it could be extended, or used as starting point for a new 
> driver.

This is the right spirit!

> The out-of-tree drivers apply to the GX412-TC SoC and uses PCI for probing:
>
> gpio-amd registers a platform driver that applies to { PCI_VENDOR_ID_AMD, 
> PCI_DEVICE_ID_AMD_HUDSON2_SMBUS }
> gpio-sb8xx applies to { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_HUDSON2_SMBUS } 
> and { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS }
>
> These IDs make it easy to cross reference with the datasheet, and keeps the 
> coupling between ACPI and the driver low.
> These drivers do not provide a mechanism for firmware (ACPI or DT) to specify 
> which gpios are safe to use or how to use them.

The Intel pin control driver has gone to lengths to avoid using unusable
ACPI-controlled GPIOs. Thought they were mostly concerned with
GPIOs not available for IRQs. This is what the "valid_mask" in
struct gpio_irq_chip is for.

Timur Tabi from CodeAurora is currently
floating a patch set that makes it possible to remove entire sets of
lines as "controlled by someone else" (read: ACPI BIOS).
This will apply to the whole GPIO chip.
https://marc.info/?l=linux-gpio&m=151379704013464&w=2

This is however under heavy discussion.

So there is work being done to mask out sets of GPIOs that
are used by ACPI. (Or secure worlds or whatever.)

> In contrast, the pinctrl-amd driver only mentions the newer KERNCZ platform
> name and uses ACPI for probing without disclosing any Family or Model numbers.
>
> pinctrl-amd applies to "AMD0030" and "AMDI0030"
>
> The ACPI HID matching makes it difficult to determine what family and model 
> the
> driver applies to, or rather, I have not been able to find such a mapping of 
> HIDs
> to family and model numbers. It's also impossible to guess an ACPI _HID
> that may or may not exist for the Family 16h Model 30h platform and even if I
> allocate a new HID for our ACPI implementation, that HID has little hope of
> being accepted into the mainline driver.

I didn't understand anything of what you just wrote.
I am basically ignorant when it comes to ACPI details.

So let's CC the GPIO ACPI maintainer, Mika Westerberg.

> I would like to extend the generically named, but very specifically 
> implemented
> pinctrl-amd driver to also work on Family 16h, Model 30h (specifically the 
> FT3b
> package), and I propose to use the PCI_DEVICE_ID_AMD_16H_M30H_NB_F3
> symbol to probe for the device.
>
> Does this seem like a sensible way forward?

Sounds good to me.

Any ACPI questions, I hope Mika can help out with.

The AMD folks are sometimes silent, I would say just hack on it so
we get somewhere with this!

Your effort is appreciated.

Yours,
Linus Walleij

Reply via email to