On Thu, Mar 31, 2016 at 10:17:46AM -0500, Rob Herring wrote: > On Thu, Mar 31, 2016 at 12:22 AM, David Gibson > wrote: > > On Wed, Mar 23, 2016 at 07:40:19PM -0500, Rob Herring wrote: > >> In preparation to support bus specific checks, add the necessary > >> infrastructure to determine the bus type for nodes. Initially, PCI and > >> simple bus are supported. > >> > >> Signed-off-by: Rob Herring > >> --- > >> David, > > > > Sorry it's taken me a while to look at this. I've been a mixture of > > busy and sick :/ > > No problem. > > [...] > > >> +static bool is_pci_bridge(struct node *node) > >> +{ > >> + struct property *prop; > >> + > >> + if (!node) > >> + return false; > >> + > >> + prop = get_property(node, "device_type"); > >> + if (!prop) > >> + return false; > >> + > >> + if (strcmp(prop->val.val, "pci") == 0) > >> + return true; > >> + > >> + return false; > >> +} > > > > So, I don't love using device_type here, since that's generally > > discouraged in modern flat trees, but I don't know of a better way to > > detect a pci bridge, so I guess it's ok. > > True, but pci, cpu, and memory remain as accepted uses. We'd have to > define a "pci-bridge" or "pci-bus" compatible to replace it. Right, that was the conclusion I was coming around to. > >> +struct bus_type pci_bus_type = { > >> + .expected_addr_cells = 3, > >> + .expected_size_cells = 2, > > > > I'm a bit torn here. Part of me wants to suggest a 'check_bridge' > > function which handles this and can also make more subtle checks, but > > then just the expected cells values will handle nearly all real cases > > more succinctly. > > I left them as you had them, but I'm not so sure these are all that > useful. It works for PCI as the sizes are fixed, but then we could > just check against fixed values. For simple-bus, we need more > flexibility because the size could be 1 or 2. For other cases like I2C > or SPI buses, we know the sizes, but we can't really detect those > buses. Hm, ok. Well how about instead of the expected cells values, we have two callbacks: check_bridge() and check_device(). The check_bridge() callback can check the cells parameters along with anything else that makes sense. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson