Re: [RFC PATCH v1 20/21] RISC-V: ACPI: Create PLIC platform device

From: Anup Patel
Date: Tue Aug 08 2023 - 13:45:00 EST


On Tue, Aug 8, 2023 at 2:12 PM Conor Dooley <conor@xxxxxxxxxx> wrote:
>
> On Thu, Aug 03, 2023 at 11:29:15PM +0530, Sunil V L wrote:
> > Since PLIC needs to be a platform device
>
> For the unwashed, why does the PLCI need to be a platform device?
> (And while you're at that, please try to make use of the extra ~20
> characters per line that you can use here.)

As suggested by Marc Z, only timers and IPIs need to be probed early.
Everything else needs to be a platform device. The devlink feature of
Linux DD framework ensures that platform devices are probed in the
right order based on the interdependency.

The PATCH5 of the v7 AIA series converts the PLIC driver into a
platform driver. This works perfectly fine.

>
> > probe the
> > MADT and create platform devices for each PLIC in the
> > system. Use software node framework for the fwnode
> > which allows to create properties and hence the
> > actual irqchip driver doesn't need to do anything
> > different for ACPI vs DT.
> >
> > Signed-off-by: Sunil V L <sunilvl@xxxxxxxxxxxxxxxx>
> > Co-developed-by: Haibo Xu <haibo1.xu@xxxxxxxxx>
> > Signed-off-by: Haibo Xu <haibo1.xu@xxxxxxxxx>
>
> > +static struct fwnode_handle *acpi_plic_create_fwnode(struct acpi_madt_plic *plic)
> > +{
> > + struct fwnode_handle *fwnode, *parent_fwnode;
> > + struct riscv_irqchip_list *plic_element;
> > + struct software_node_ref_args *refs;
> > + struct property_entry props[8] = {};
> > + int nr_contexts;
> > +
> > + props[0] = PROPERTY_ENTRY_U32("riscv,gsi-base", plic->gsi_base);
> > + props[1] = PROPERTY_ENTRY_U32("riscv,ndev", plic->num_irqs);
> > + props[2] = PROPERTY_ENTRY_U32("riscv,max_prio", plic->max_prio);
>
> My OCD wants to know why this gets an _ but the others have a -.
>
> > + props[3] = PROPERTY_ENTRY_U8("riscv,plic-id", plic->id);
> > + props[4] = PROPERTY_ENTRY_U64("riscv,plic-base", plic->base_addr);
> > + props[5] = PROPERTY_ENTRY_U32("riscv,plic-size", plic->size);
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@xxxxxxxxxxxxxxxxxxx
> http://lists.infradead.org/mailman/listinfo/linux-riscv

Regards,
Anup