[PATCHv2 4/4] ARM: mvebu: implement L2/PCIe deadlock workaround
Thomas Petazzoni
thomas.petazzoni at free-electrons.com
Wed May 14 08:04:30 PDT 2014
Dear Catalin Marinas,
On Wed, 14 May 2014 15:58:54 +0100, Catalin Marinas wrote:
> > + for_each_compatible_node(np, NULL, "arm,pl310-cache") {
> > + struct property *new_compat;
> > +
> > + new_compat = kzalloc(sizeof(*new_compat), GFP_KERNEL);
> > + new_compat->name = kstrdup("compatible", GFP_KERNEL);
> > + new_compat->value = kstrdup("arm,pl310-coherent-cache",
> > + GFP_KERNEL);
> > + new_compat->length = strlen(new_compat->value) + 1;
> > + of_update_property(np, new_compat);
> > + }
> > +}
>
> I got it know, you update the DT property on the fly.
Correct.
> > static void __init mvebu_timer_and_clk_init(void)
> > {
> > of_clk_init(NULL);
> > @@ -78,6 +125,14 @@ static void __init mvebu_timer_and_clk_init(void)
> > mvebu_scu_enable();
> > coherency_init();
> > BUG_ON(mvebu_mbus_dt_init(coherency_available()));
> > +
> > + if (of_machine_is_compatible("marvell,armada375") ||
> > + of_machine_is_compatible("marvell,armada38x")) {
> > + arch_ioremap_caller = armada_pcie_wa_ioremap_caller;
> > + pci_ioremap_set_mem_type(MT_MEMORY_RW_SO);
> > + mvebu_l2x0_pl310_coherent();
> > + }
> > +
> > l2x0_of_init(0, ~0UL);
> >
> > if (of_machine_is_compatible("marvell,armada375"))
>
> A more "hackish" way would be to simply set outer_cache.sync to NULL
> after l2x0_of_init, less code ;) but not nice either.
How could this be done? All the outer_cache structures are 'static' in
mm/cache-l2x0.c, so the mvebu code cannot hack them after calling
l2x0_of_init().
> With the .fixup in
> Russell's L2C patches you could have added an mvebu specific callback to
> check for coherency before setting .sync to NULL.
I had a look at the ->fixup thing from Russell, but it's only meant to
call fixup operations *inside* the L2C driver. Not external fixup
operations, like operations defined by the platform. Therefore I don't
see how the ->fixup mechanism proposed by Russell would have solved
the particular problem we're discussing.
> Anyway, your approach is fine by me but I would prefer a specific
> property rather than "compatible".
Ok, thanks, I'll repost. For now, I'll repost a series without the
strongly-ordered thing, since we don't have the confirmation it's
absolutely needed for the workaround of the PCIe/SMP/PL310 deadlock
problem.
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
More information about the linux-arm-kernel
mailing list