All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Feist <james.feist@linux.intel.com>
To: Alex Qiu <xqiu@google.com>, Milton Miller II <miltonm@us.ibm.com>
Cc: Peter Lundgren <peterlundgren@google.com>,
	OpenBMC Maillist <openbmc@lists.ozlabs.org>,
	Kais Belgaied <belgaied@google.com>,
	Devjit Gopalpur <devjitg@google.com>
Subject: Re: Configuring device with I2C mux
Date: Wed, 8 Jan 2020 09:46:57 -0800	[thread overview]
Message-ID: <d1069c71-108f-d5e0-f2fa-4af1048386e2@linux.intel.com> (raw)
In-Reply-To: <CAA_a9xJQsSjrcjq+=+uoPe4KCkUjWTgEp_cG-0E2FczP=PtBUg@mail.gmail.com>

On 1/8/20 9:25 AM, Alex Qiu wrote:
> Hi Milton,
> 
> Yes, the child buses are traceable in the sysfs, but actually my 
> question is, does entity-manager supports tracing child buses through 
> the sysfs? If it does, how shall I write the JSON config to take 
> advantage of this feature?
> 
> For example, we have a I2C device sitting at the same level as the mux, 
> configured as {"Address": "0x40", "Bus": "$bus"}, and now I don't find 
> the way to add or subtract a certain number to $bus to find a child bus. 
> Do we have a feature with syntax like {"Address": "0x50", "Bus": 
> "$bus.mux.0x70.channel.1"} to configure devices on child buses, with mux 
> sitting on 0x70 of the parent bus?

Do you have a device sitting behind the mux? Generally in most our 
situations we have another FRU behind the mux, and we can use "$bus" to 
describe this.

Second option is you can name the mux channels, like this: 
https://github.com/openbmc/entity-manager/blob/01542d2af1b1f45335cc8813fffcd3ed07f22989/configurations/WFT%20Baseboard.json#L1023

And then in /dev/ you'll get symlinks like this:

root@intel-obmc:~# ls -al /dev/i2c-mux/M2_Mux/
drwxr-xr-x    2 root     root            80 Jan  1 00:01 .
drwxr-xr-x    9 root     root           180 Jan  1 00:01 ..
lrwxrwxrwx    1 root     root            11 Jan  1 00:01 M2Slot1 -> 
/dev/i2c-14
lrwxrwxrwx    1 root     root            11 Jan  1 00:01 M2Slot2 -> 
/dev/i2c-15

-James


> 
> Thank you!
> 
> - Alex Qiu
> 
> 
> On Wed, Jan 8, 2020 at 6:43 AM Milton Miller II <miltonm@us.ibm.com 
> <mailto:miltonm@us.ibm.com>> wrote:
> 
>     About 01/07/2020 07:14PM in some timezone, Alex Qiu wrote:
>      >Hi folks,
>      >
>      >We have a JSON file configuring I2C devices of a PCIe card which has
>      >an 8-channel I2C mux for entity-manager. After we properly configure
>      >the mux of the card, we get 8 new I2C buses in sysfs; however, we
>      >don't find an arithmetic way to describe the relationship between the
>      >new buses and their parent buses.
>      >
>      >For example, we have a mux on physical BMC I2C bus i2c-8 spawning a
>      >couple of child buses including i2c-24 and i2c-26, which are the
>      >buses for each PCIe card. The mux on i2c-24 PCIe card spawned 8 buses
>      >from i2c-70 to i2c-77, and the mux on i2c-26 PCIe card spawned ones
>      >from i2c-62 to i2c-69. We have I2C devices on i2c-76 and i2c-68 needs
>      >to be configured together with the PCIe card on i2c-24 and i2c-26
>      >separately.
>      >
>      >How do we implement this in the JSON file? If that's not possible to
>      >do it in JSON merely, what's the suggested approach to implement this
>      >feature? Device tree? Implement code in entity-manager to walk
>      >through the I2C sysfs?
> 
> 
>     I would expect the i2c buses provied by the mux to appear in sysfs
>     under the hierarchy of the parent bus.  Explore the sysfs directory
>     structure, I'm making this up, but I've now peeked at i2c-mux.c and
>     have a better chance getting reality.
> 
> 
>     /sys/bus/i2c/devices/i2c-8 -> /sys/devices/platform/ahb-432000/i2c-8
> 
>     /sys/bus/i2c/devices/i2c-24 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24
>     /sys/bus/i2c/devices/i2c-24 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-25
>     /sys/bus/i2c/devices/i2c-24 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26
> 
>     /sys/bus/i2c/devices/i2c-62 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-62
>     /sys/bus/i2c/devices/i2c-63 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-63
>     /sys/bus/i2c/devices/i2c-64 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-64
>     /sys/bus/i2c/devices/i2c-65 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-65
>     /sys/bus/i2c/devices/i2c-66 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-66
>     /sys/bus/i2c/devices/i2c-67 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-67
>     /sys/bus/i2c/devices/i2c-68 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-68
>     /sys/bus/i2c/devices/i2c-69 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-69
>     /sys/bus/i2c/devices/i2c-70 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-70
>     /sys/bus/i2c/devices/i2c-71 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-71
>     /sys/bus/i2c/devices/i2c-72 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-72
>     /sys/bus/i2c/devices/i2c-73 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-73
>     /sys/bus/i2c/devices/i2c-74 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-74
>     /sys/bus/i2c/devices/i2c-75 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-75
>     /sys/bus/i2c/devices/i2c-76 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-76
>     /sys/bus/i2c/devices/i2c-77 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-77
> 
>     /sys/bus/i2c/devices/i2c-24/mux_device ->
>     /sys/devices/platform/ahb-432000/i2c-8/8-52
>     /sys/bus/i2c/devices/i2c-25/mux_device ->
>     /sys/devices/platform/ahb-432000/i2c-8/8-52
>     /sys/bus/i2c/devices/i2c-26/mux_device ->
>     /sys/devices/platform/ahb-432000/i2c-8/8-52
> 
>     /sys/bus/i2c/devices/8-52/channel-0 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24
>     /sys/bus/i2c/devices/8-52/channel-1 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-25
>     /sys/bus/i2c/devices/8-52/channel-2 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26
> 
>     /sys/bus/i2c/devices/24-52/channel-0 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-62
>     /sys/bus/i2c/devices/24-52/channel-1 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-63
>     /sys/bus/i2c/devices/24-52/channel-2 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-64
>     /sys/bus/i2c/devices/24-52/channel-3 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-65
>     /sys/bus/i2c/devices/24-52/channel-4 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-66
>     /sys/bus/i2c/devices/24-52/channel-5 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-67
>     /sys/bus/i2c/devices/24-52/channel-6 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-68
>     /sys/bus/i2c/devices/24-52/channel-7 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-24/i2c-69
>     /sys/bus/i2c/devices/26-52/channel-0 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-70
>     /sys/bus/i2c/devices/26-52/channel-1 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-71
>     /sys/bus/i2c/devices/26-52/channel-2 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-72
>     /sys/bus/i2c/devices/26-52/channel-3 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-73
>     /sys/bus/i2c/devices/26-52/channel-4 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-74
>     /sys/bus/i2c/devices/26-52/channel-5 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-75
>     /sys/bus/i2c/devices/26-52/channel-6 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-76
>     /sys/bus/i2c/devices/26-52/channel-7 ->
>     /sys/devices/platform/ahb-432000/i2c-8/i2c-26/i2c-77
> 
>     The child bus will have a symlink "mux_device" pointing to the mux.
>     The mux device node will have n symlinks "channel-1" where 1 is
>     the channel id.
> 
>     Hmm, there is no apparent code to put a "mux_channel" attribute in
>     the adapter node.  The adapter name attribute does include the channel
>     id, but its long descriptive text.  Regardless, you should be able to
>     find the buses from the mux channel-3 symlinks.
> 
>     Note: I haven't looked at the JSON to see how much it will change once
>     your find the bus.  I'm guessing you will have to generate it by taking
>     a template and substituting the bus numbers you find to make the slots
>     common, alhtough you could just go from the 8-52/channel-3 symlink to
>     the adapter bus (the device name will still have the bus number in it).
> 
>     I hope this helps you,
> 
>     milton
> 

  reply	other threads:[~2020-01-08 17:47 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-08  1:13 Configuring device with I2C mux Alex Qiu
2020-01-08 14:43 ` Milton Miller II
2020-01-08 17:25   ` Alex Qiu
2020-01-08 17:46     ` James Feist [this message]
2020-01-08 17:54       ` Alex Qiu
2020-01-08 18:02         ` James Feist
2020-01-08 18:06           ` Alex Qiu
2020-01-10  1:46             ` Alex Qiu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d1069c71-108f-d5e0-f2fa-4af1048386e2@linux.intel.com \
    --to=james.feist@linux.intel.com \
    --cc=belgaied@google.com \
    --cc=devjitg@google.com \
    --cc=miltonm@us.ibm.com \
    --cc=openbmc@lists.ozlabs.org \
    --cc=peterlundgren@google.com \
    --cc=xqiu@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.