Garrett D'Amore wrote: >My question is, what are the rules for establishing devi_parent_data? I >would have guessed that this member would have been "private" to the >parent driver (the schizo in this case) and that any interpretation by >i_ddi_apply_range() would be strictly off-limits. > > > Yes the devi_parent_data is private to the parent nexus. But there's no direct interpretation, but by calling a ddi function: ddi_apply_range(). There's no assumption that any information is stored in devi_parent_data. It's an implicit agreement that translation is provided via ddi_apply_range() in some way.
ddi_apply_range() or i_ddi_apply_range() are only for for nexi, as the comments says: /* * ddi_apply_range: (Called by nexi only.) * Apply ranges in parent node dp, to child regspec rp... */ int ddi_apply_range(dev_info_t *dp, dev_info_t *rdip, struct regspec *rp) ... On SPARC we only tested the cardbus driver under a pci_pci bridge, not directly under a schizo. So there's obviously a bug that's not covered by our test matrix. We can start with finding out why the devi_parent_data is NULL in your case. You may also paste the panic stack so we can all have a look. Vincent.
