[PATCH v5] PCI: ARM: add support for generic PCI host controller

Will Deacon will.deacon at arm.com
Thu Mar 6 06:37:17 EST 2014


On Wed, Mar 05, 2014 at 06:10:57PM +0000, Liviu Dudau wrote:
> On Mon, Mar 03, 2014 at 06:46:40PM +0000, Will Deacon wrote:
> > +static int gen_pci_calc_io_offset(struct device *dev,
> > +                                 struct of_pci_range *range,
> > +                                 struct resource *res,
> > +                                 resource_size_t *offset)
> > +{
> > +       static atomic_t wins = ATOMIC_INIT(0);
> > +       int err, idx, max_win;
> > +       unsigned int window;
> > +
> > +       if (!PAGE_ALIGNED(range->cpu_addr))
> > +               return -EINVAL;
> > +
> > +       max_win = (IO_SPACE_LIMIT + 1) / SZ_64K;
> > +       idx = atomic_inc_return(&wins);
> > +       if (idx >= max_win)
> > +               return -ENOSPC;
> > +
> > +       window = (idx - 1) * SZ_64K;
> > +       err = pci_ioremap_io(window, range->cpu_addr);
> > +       if (err)
> > +               return err;
> > +
> > +       of_pci_range_to_resource(range, dev->of_node, res);
> > +       res->start = window;
> > +       res->end = res->start + range->size - 1;
> > +       *offset = window - range->pci_addr;
> 
> If my fix for of_pci_range_to_resource will get accepted, this
> function will have to morph into the pci_register_io_range() call.
> Would that cause problems for other users of of_pci_range_to_resource()
> (namely mach-integrator ?)

I imagine anybody using an I/O region would break, no? Maybe you could check
range->flags in of_pci_range_to_resource and do the right thing if somebody
passes you an I/O range?

I'm happy to update this driver, but it's best to avoid breaking other users
if we can.

> Otherwise, looks good to me. You can add my (worthless?)
> 
> Reviewed-by: Liviu Dudau <Liviu.Dudau at arm.com>

Thanks, Liviu!

Will



More information about the linux-arm-kernel mailing list