lkml.org 
[lkml]   [2019]   [Jun]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH 1/2] mfd: core: Support multiple OF child devices of the same type
From
Date
On 2019-06-05 12:45 p.m., Lee Jones wrote:
>>>> diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h
>>>> index 99c0395..470f6cb 100644
>>>> --- a/include/linux/mfd/core.h
>>>> +++ b/include/linux/mfd/core.h
>>>> @@ -55,6 +55,9 @@ struct mfd_cell {
>>>> */
>>>> const char *of_compatible;
>>>>
>>>> + /* Optionally match against a specific device of a given type */
>>>> + const char *of_full_name;
>>>> +
>>>
>>> Can you give me an example for when this might be useful?
>>
>> This is an example of some device tree entries for our MFD device:
>>
>> axi_iic_0: i2c@c0000 {
>> compatible = "xlnx,xps-iic-2.00.a";
>> clocks = <&axi_clk>;
>> clock-frequency = <100000>;
>> interrupts = <7>;
>> #size-cells = <0>;
>> #address-cells = <1>;
>> };
>>
>> axi_iic_1: i2c@d0000 {
>> compatible = "xlnx,xps-iic-2.00.a";
>> clocks = <&axi_clk>;
>> clock-frequency = <100000>;
>> interrupts = <8>;
>> #size-cells = <0>;
>> #address-cells = <1>;
>> };
>>
>> and the corresponding MFD cells:
>>
>> {
>> .name = "axi_iic_0",
>> .of_compatible = "xlnx,xps-iic-2.00.a",
>> .of_full_name = "i2c@c0000",
>> .num_resources = ARRAY_SIZE(dbe_i2c1_resources),
>> .resources = dbe_i2c1_resources
>> },
>> {
>> .name = "axi_iic_1",
>> .of_compatible = "xlnx,xps-iic-2.00.a",
>> .of_full_name = "i2c@d0000",
>> .num_resources = ARRAY_SIZE(dbe_i2c2_resources),
>> .resources = dbe_i2c2_resources
>> },
>>
>> Without having the .of_full_name support, both MFD cells ended up
>> wrongly matching against the i2c@c0000 device tree node since we just
>> picked the first one where of_compatible matched.
>
> What is contained in each of their resources?

These are the resource entries for those two devices:

static const struct resource dbe_i2c1_resources[] = {
{
.start = 0xc0000,
.end = 0xcffff,
.name = "xi2c1_regs",
.flags = IORESOURCE_MEM,
.desc = IORES_DESC_NONE
},
};

static const struct resource dbe_i2c2_resources[] = {
{
.start = 0xd0000,
.end = 0xdffff,
.name = "xi2c2_regs",
.flags = IORESOURCE_MEM,
.desc = IORES_DESC_NONE
},
};

Ideally the IO memory resource entries would be picked up and mapped
through the device tree as well, as they are with the interrupts, but I
haven't yet found the device tree magic that would allow that to happen
yet, if it's possible. The setup we have has a number of peripherals on
an AXI bus which are behind a PCIe to AXI bridge, and we're using mfd to
instantiate each of those AXI devices under the PCIe device.

--
Robert Hancock
Senior Software Developer
SED Systems, a division of Calian Ltd.
Email: hancock@sedsystems.ca

\
 
 \ /
  Last update: 2019-06-05 21:28    [W:0.083 / U:0.040 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site