Hi Rob, Yash,

On 28/03/2019 13:16, Rob Herring wrote:
> On Tue, Mar 12, 2019 at 02:51:00PM +0530, Yash Shah wrote:
>> DT documentation for L2 cache controller added.

>> diff --git a/Documentation/devicetree/bindings/edac/sifive-edac-l2.txt 
>> b/Documentation/devicetree/bindings/edac/sifive-edac-l2.txt
>> new file mode 100644
>> index 0000000..abce09f
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/edac/sifive-edac-l2.txt
>> @@ -0,0 +1,31 @@
>> +SiFive L2 Cache EDAC driver device tree bindings
>> +-------------------------------------------------
>> +This driver uses the EDAC framework to report L2 cache controller ECC 
>> errors.
> 
> Bindings are for h/w blocks, not drivers. (And Boris may want a single 
> driver, but bindings should reflect the h/w, not what Linux (currently) 
> wants.

For h/w block compatibles and edac, I think all we need now is to ensure the DT 
contains
the three compatible strings: platform (if there is one), soc and ip-name (if 
its a
re-usable thing).
This is so that linux can pick the biggest of the three (usually platform) to 
probe the
driver from, as this lets us capture platform properties we only find out about 
later.

The single-driver idea is because ras/edac gets done late, (its not necessary 
to boot
linux on the board), and the edac core has difficulty with multiple components 
feeding
into it.

I don't think we need platform-specific-drivers until someone has a platform 
that needs
one for this multiple-component issue. To let us do that later (and possibly 
your
customer's customer to do it), we'd like to avoid probing based on the smallest
compatible, and use the biggest instead.
This lets us remove the platform-compatible from the L2-cache-controller 
driver's list,
and let some platform driver use it as a library instead. This is to avoid 'but 
not this
one' checks in the driver.

Yes it results in more one-line patches to enable support in the kernel, but 
these are
also statements that this platform/soc supports ras/edac. Its possible to build 
a soc out
of components that all support ras, but not have it working end-to-end.
(oh its optional, was it turned on? Does firmware need to enable something? Is 
there a
side-band signal, was it wired up everywhere).


> Are the only controls for ECC? Are all the cache attributes discoverable 
> (size, ways, line size, level, etc.)? 

>> +Example:
>> +
>> +cache-controller@2010000 {
>> +    compatible = "sifive,fu540-c000-ccache", "sifive,ccache0";

/me googles
fu540-c000 is the soc, but it doesn't have dram, so it must get used in other 
platforms.

If there is anything the platform/firmware can influence with this thing please 
ensure
they have properties in here. (firmware-privilege enables, or pins that have to 
be tied
high/lwo)

As an example of the problem we're tring to avoid: someone could re-use the 
design of
"sifive,ccache0" in another soc, where the DRAM controller also supports edac. 
From just
"sifive,ccache0", they can't tell their system (which needs a multi-component 
driver) from
yours, which just needs this one.

There may be a clever way of getting DT to do this...


>> +    interrupt-parent = <&plic>;
>> +    interrupts = <1 2 3>;
>> +    reg = <0x0 0x2010000 0x0 0x1000 0x0 0x8000000 0x0 0x2000000>;
>> +    reg-names = "control", "sideband";
>> +};
>> -- 
>> 1.9.1
>>


Thanks,

James

Reply via email to