[PATCH linux dev-4.10 v2 1/2] arm/dts: Add I2C master and ports to FSI cfam

Joel Stanley joel at jms.id.au
Thu Jul 6 16:43:34 AEST 2017


On Thu, Jul 6, 2017 at 3:40 AM, Eddie James <eajames at linux.vnet.ibm.com> wrote:
>
>
> On 07/03/2017 03:38 AM, Joel Stanley wrote:
>>
>> On Fri, Jun 30, 2017 at 2:12 AM, Eddie James <eajames at linux.vnet.ibm.com>
>> wrote:
>>>
>>> From: "Edward A. James" <eajames at us.ibm.com>
>>>
>>> FSI I2C master algorithm probes port devices based on dts.
>>>
>>> Signed-off-by: Edward A. James <eajames at us.ibm.com>
>>> ---
>>>   arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts     | 120
>>> +++++++++++++++++
>>>   arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts | 120
>>> +++++++++++++++++
>>>   arch/arm/boot/dts/ibm-power9-cfam.dtsi           | 164
>>> +++++++++++++++++++++++
>>>   3 files changed, 404 insertions(+)
>>>
>>> diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts
>>> b/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts
>>> index d53dc59..4a1a390 100644
>>> --- a/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts
>>> +++ b/arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts
>>> @@ -72,6 +72,126 @@
>>>
>>>   #include "ibm-power9-cfam.dtsi"
>>>
>>> +&cfam0_i2c0 {
>>> +       status = "okay";
>>> +};
>>
>> The point of separating out the description and enabling of these i2c
>> nodes was so we could selectively enable the ones that are in use by
>> OpenBMC kernel drivers and userspace applications.
>>
>> With this change we enable 30 i2c character devices, and consume the
>> associated kernel memory.
>>
>> Did you make any progress with discovering the devices that are required?
>>
>> I can see from a bug report that the SBE EEPROM is one use case:
>>
>>   errorMessage  : ServerI2CInstruction::iic_open invalid device open
>> attempt /dev/i2c-100
>>
>> Could we enable just that one on each processor to unblock people
>> using it for this use case while you investigate other uses?
>
>
> I heard back from Cronus team, they said they want all the ports
> (/dev/i2c-100 - 114 and 200 - 214). Manufacturing guys deferred to Cronus
> team, so I think that's the best source for which ports we need for now.

According to the spec, we have the following:

 - 4x i2c seeprom
 - 8x i2c avagos
 - 1x dpss
 - 2x dimms

That accounts for all 15 devices on the CFAM i2cm.

Can you ask the Cronus team which port these devices are on, so we can
annotate the device tree? Put me on cc :)

>From there we could look to using the kernel driver for e.g. the seeprom.

Cheers,

Joel


>
> Thanks,
> Eddie
>
>
>>
>> Cheers,
>>
>> Joel
>>>
>>> +
>>> +&cfam0_i2c1 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c2 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c3 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c4 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c5 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c6 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c7 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c8 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c9 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c10 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c11 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c12 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c13 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c14 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c0 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c1 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c2 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c3 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c4 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c5 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c6 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c7 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c8 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c9 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c10 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c11 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c12 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c13 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c14 {
>>> +       status = "okay";
>>> +};
>>> +
>>>   &fmc {
>>>          status = "okay";
>>>          flash at 0 {
>>> diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts
>>> b/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts
>>> index 31315d0..4cc99e2 100644
>>> --- a/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts
>>> +++ b/arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts
>>> @@ -84,6 +84,126 @@
>>>
>>>   #include "ibm-power9-cfam.dtsi"
>>>
>>> +&cfam0_i2c0 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c1 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c2 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c3 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c4 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c5 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c6 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c7 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c8 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c9 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c10 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c11 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c12 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c13 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam0_i2c14 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c0 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c1 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c2 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c3 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c4 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c5 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c6 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c7 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c8 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c9 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c10 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c11 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c12 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c13 {
>>> +       status = "okay";
>>> +};
>>> +
>>> +&cfam1_i2c14 {
>>> +       status = "okay";
>>> +};
>>> +
>>>   &fmc {
>>>          status = "okay";
>>>          flash at 0 {
>>> diff --git a/arch/arm/boot/dts/ibm-power9-cfam.dtsi
>>> b/arch/arm/boot/dts/ibm-power9-cfam.dtsi
>>> index f29c6e3..ede778d 100644
>>> --- a/arch/arm/boot/dts/ibm-power9-cfam.dtsi
>>> +++ b/arch/arm/boot/dts/ibm-power9-cfam.dtsi
>>> @@ -4,6 +4,88 @@
>>>                  #address-cells = <1>;
>>>                  #size-cells = <1>;
>>>
>>> +               i2c at 1800 {
>>> +                       compatible = "ibm,fsi-i2c-master";
>>> +                       reg = <0x1800 0x400>;
>>> +                       #address-cells = <1>;
>>> +                       #size-cells = <0>;
>>> +
>>> +                       cfam0_i2c0: i2c-bus at 0 {
>>> +                               status = "disabled";
>>> +                               reg = <0>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c1: i2c-bus at 1 {
>>> +                               status = "disabled";
>>> +                               reg = <1>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c2: i2c-bus at 2 {
>>> +                               status = "disabled";
>>> +                               reg = <2>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c3: i2c-bus at 3 {
>>> +                               status = "disabled";
>>> +                               reg = <3>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c4: i2c-bus at 4 {
>>> +                               status = "disabled";
>>> +                               reg = <4>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c5: i2c-bus at 5 {
>>> +                               status = "disabled";
>>> +                               reg = <5>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c6: i2c-bus at 6 {
>>> +                               status = "disabled";
>>> +                               reg = <6>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c7: i2c-bus at 7 {
>>> +                               status = "disabled";
>>> +                               reg = <7>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c8: i2c-bus at 8 {
>>> +                               status = "disabled";
>>> +                               reg = <8>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c9: i2c-bus at 9 {
>>> +                               status = "disabled";
>>> +                               reg = <9>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c10: i2c-bus at 10 {
>>> +                               status = "disabled";
>>> +                               reg = <10>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c11: i2c-bus at 11 {
>>> +                               status = "disabled";
>>> +                               reg = <11>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c12: i2c-bus at 12 {
>>> +                               status = "disabled";
>>> +                               reg = <12>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c13: i2c-bus at 13 {
>>> +                               status = "disabled";
>>> +                               reg = <13>;
>>> +                       };
>>> +
>>> +                       cfam0_i2c14: i2c-bus at 14 {
>>> +                               status = "disabled";
>>> +                               reg = <14>;
>>> +                       };
>>> +               };
>>> +
>>>                  sbefifo at 2400 {
>>>                          compatible = "ibm,p9-sbefifo";
>>>                          reg = <0x2400 0x400>;
>>> @@ -31,6 +113,88 @@
>>>                                  #address-cells = <1>;
>>>                                  #size-cells = <1>;
>>>
>>> +                               i2c at 1800 {
>>> +                                       compatible =
>>> "ibm,fsi-i2c-master";
>>> +                                       reg = <0x1800 0x400>;
>>> +                                       #address-cells = <1>;
>>> +                                       #size-cells = <0>;
>>> +
>>> +                                       cfam1_i2c0: i2c-bus at 0 {
>>> +                                               status = "disabled";
>>> +                                               reg = <0>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c1: i2c-bus at 1 {
>>> +                                               status = "disabled";
>>> +                                               reg = <1>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c2: i2c-bus at 2 {
>>> +                                               status = "disabled";
>>> +                                               reg = <2>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c3: i2c-bus at 3 {
>>> +                                               status = "disabled";
>>> +                                               reg = <3>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c4: i2c-bus at 4 {
>>> +                                               status = "disabled";
>>> +                                               reg = <4>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c5: i2c-bus at 5 {
>>> +                                               status = "disabled";
>>> +                                               reg = <5>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c6: i2c-bus at 6 {
>>> +                                               status = "disabled";
>>> +                                               reg = <6>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c7: i2c-bus at 7 {
>>> +                                               status = "disabled";
>>> +                                               reg = <7>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c8: i2c-bus at 8 {
>>> +                                               status = "disabled";
>>> +                                               reg = <8>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c9: i2c-bus at 9 {
>>> +                                               status = "disabled";
>>> +                                               reg = <9>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c10: i2c-bus at 10 {
>>> +                                               status = "disabled";
>>> +                                               reg = <10>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c11: i2c-bus at 11 {
>>> +                                               status = "disabled";
>>> +                                               reg = <11>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c12: i2c-bus at 12 {
>>> +                                               status = "disabled";
>>> +                                               reg = <12>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c13: i2c-bus at 13 {
>>> +                                               status = "disabled";
>>> +                                               reg = <13>;
>>> +                                       };
>>> +
>>> +                                       cfam1_i2c14: i2c-bus at 14 {
>>> +                                               status = "disabled";
>>> +                                               reg = <14>;
>>> +                                       };
>>> +                               };
>>> +
>>>                                  sbefifo at 2400 {
>>>                                          compatible = "ibm,p9-sbefifo";
>>>                                          reg = <0x2400 0x400>;
>>> --
>>> 1.8.3.1
>>>
>


More information about the openbmc mailing list