Re: [RFC RESEND] GPIO: gpio-generic: Add DT support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Wed, Aug 07, 2013 at 05:12:12PM +0100, Stephen Warren wrote:
> On 08/07/2013 08:07 AM, Mark Rutland wrote:
> > On Tue, Aug 06, 2013 at 12:00:50PM +0100, Pawel Moll wrote:
> >> On Wed, 2013-07-31 at 16:56 +0100, Mark Rutland wrote:
> >>>> Ah, I guess the question more: Do we want generic bindings that describe
> >>>> the low-level details of the HW in a completely generic fashion so that
> >>>> new HW can be supported with zero kernel changes, or do we want a simple
> >>>> driver with a lookup table that maps from compatible value to the HW
> >>>> configuration? One of the potential benefits of DT is to be able to
> >>>> support new HW without code changes, although perhaps that's more
> >>>> typically considered in the context of new boards rather than new IP
> >>>> blocks or SoCs.
> >>
> >> ... or FPGAs that can be synthesized with random collection of standard
> >> IP blocks. With Xilinx's Zynq and Altera's SOCFPGA this is getting
> >> simpler and simpler...
> >>
> >>> I think that going forward it would be better to have have a compatible
> >>> string per different device. As Olof pointed out, we're leaking the way
> >>> we currently handle things in Linux into the binding, rather than
> >>> precisely describing the hardware (with a unique compatible string). I'm
> >>> not sure if this is much better than embedding a bytecode describing how
> >>> to poke devices.
> 
> This really isn't leaking information about how Linux handles the
> device. It's simply saying that there is a GPIO controller whose HW is
> able to be described by a simple/generic binding, and that binding
> provides full details of the register layout. Other OSs can handle this
> differently; see below ...

I worry that it doesn't provide a full description, but rather a
description of the subset of the hardware used by the driver.

> 
> ...
> >> Frankly speaking I don't know where to draw the line, but I feel that in
> >> this particular case - a "generic" GPIO binding - is worth the effort.
> >> SOCs are literally littered with control registers driving random bits.
> >> My favourite example - Versatile Express ;-) - have random registers
> >> representing things like LEDs or MMC status lines. Depending on the
> >> motherboard/FPGA version they can live in different places. And yes, I
> >> can have a Versatile Express "platform" driver registering different set
> >> of them depending on the particular variant of the FPGA bitfile. Or try
> >> to represent them in the tree...
> > 
> > I worry that going down that route encourages bindings to describe a
> > single way to use a given device, rather than describing the device
> > itself and allowing the OS to decide how to use it. This limits what we
> > can do in future, and I worry about how we can handle quirks sanely if
> > we describe devices in this way.
> 
> Well, each DT node that uses this binding must still have a compatible
> property that fully defines the exact instance of the HW. In other
> words, assuming this binding worked fine for Tegra, the DT must contain:
> 
> compatible = "nvidia,tegra20-gpio", "simple-gpio";
> 
> and not just:
> 
> compatible = "simple-gpio";
> 
> In that case, an OS could choose to match on "nvidia,tegra20-gpio" and
> ignore most of the other properties to instantiate a more "custom"
> driver, or to enable HW-specific quirks.

In that case, does the "nvidia,tegra20-gpio" require any extra reg
fields for registers not used by the "simple-gpio" binding? If peopel
are given a shortcut, I don't see why they'd bother to describe the
hardware they're not using.

What about the case where some mfd IP block can act as a gpio
controller, compatbile with simple-gpio, and also provides some other
functionality requiring a separate driver? I suspect people will
describe this as two devices, mirroring the Linux driver model, rather
than describing the hardware itself.

As I see it, a "simple-gpio" compatible string says "I can be driven by
the Linux simple-gpio driver", and the rest of the description is a
reflection of the structure of the simple-gpio driver rather than the
device.

Thanks,
Mark.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux