From: Manohar Vanga <manohar.vanga@cern.ch>
To: Martyn Welch <martyn.welch@ge.com>
Cc: <gregkh@suse.de>, <cota@braap.org>, <devel@driverdev.osuosl.org>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/8] staging: vme: allow explicit assignment of bus numbers
Date: Tue, 2 Aug 2011 13:54:34 +0200 [thread overview]
Message-ID: <20110802115434.GA25063@becoht-mvanga> (raw)
In-Reply-To: <4E36CB29.2030907@ge.com>
Hey Martin,
> No I'm thinking more along the lines of how the persistent device names seem
> to be created. For example, on my system udev is used to create a symlink
> called "/dev/cdrom" using this udev rule:
>
> SUBSYSTEM=="block", ENV{ID_CDROM}=="?*",
> ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-1:0:0:0", SYMLINK+="cdrom",
> ENV{GENERATED}="1"
>
> The bit that might be more useful to us is the ENV{ID_PATH}, the
> "pci-0000:00:1f.2" bit in particular. If I'm not mistaken, this is sufficient
> to identify a PCI device (such as a VME bridge)
We have cases where we have multiple PCI devices of the same type and we need
a way to access each of them based on physical location. This cannot be solved
in PCI in any way except manually testing and figuring out which slot
corresponds to which device.
Firmware changes and BIOS updates have a chance of changing the PCI ordering.
We have had this problem before and we solve it by mapping the PCI bus and
device ID's to slot numbers (these are manually entered into the database by
looking at the lspci output and manually testing which device is which). These
mappings are stored in a local file at the moment (with plans to move it into
the database). This file looks something like this:
$ cat /etc/crateconfig
1 0 0
2 0 0
3 0 0
4 2 f
5 2 e <-- eg. This is the 1st device (02:0e.0)
6 2 d <-- This is the 2nd device (02:0d.0)
7 0 0
8 0 0
9 0 0
10 0 0
11 0 0
12 1 f
13 1 e
14 1 d
The database entry for the crate then uses these mapped numbers only:
--> TEWS Technologies GmbH TPCI200, Slot 5
--> TEWS Technologies GmbH TPCI200, Slot 6
For such device drivers, the loading is done as follows:
1. Get the mapped slot number for the device from the database (eg. 5, 6)
2. Convert it to the bus/device combination using /etc/crateconfig
(eg. 5 --> 02,0e and 6 --> 02,0d)
3. Pass it to the driver during load time using module parameters
$ insmod driver.ko dev_id=0,1 buses=02,02 devices=0e, 0d
The driver checks this with the pci_dev structure passed to it and
assigns the device number based on this.
This is what would be my suggestion for doing with multiple bridges of the
same kind. This way we can control the changes from firmware through
modparams and a config file like /etc/crateconfig. If the PCI locations
change with BIOS/firmware updates, we can manually change the mappings to
the new ones.
The UUID's do nothing but compress the two separate params (bus, device)
into a single param (the UUID). This has the bigger disadvantage that it
is not human readable. This is a strong requirement since the database
mappings need to be maintained by the admins.
The point I'm trying to make is that the PCI id's cannot be used directly
as they change with firmware and BIOS changes.
> I'm thinking of the topology that is used in the above example to uniquely
> identify a specific SATA device.
SATA devices like hard disks have unique fixed identifiers that can be used
to generate the UUID's. PCI device locations shouldn't be assumed to be
fixed.
> We could either provide the above paths, or rename buses similar to how
> network interfaces are renamed (hence why I mentioned them as well). Of course
> renaming the buses has the disadvantage that the correct names will only be in
> place once the board has got to user space, so the drivers would have to be
> built as modules.
Yes, this would be another contraint.
> I assume that you replace like with like, so the bridges are found in the same
> order (if you have more than one of the same bridge). In this case the
> topology will be the same, so you should reliably be able to replace cards.
Yeah but if firmware/BIOS versions are differing in the cards (eg. updated
revisions of the board), then things could get messy.
--
/manohar
next prev parent reply other threads:[~2011-08-02 11:57 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-01 10:20 [PATCH 0/8] VME Driver Fixes Manohar Vanga
2011-08-01 10:20 ` [PATCH 1/8] staging: vme_user: change kmalloc+memset to kzalloc Manohar Vanga
2011-08-01 10:52 ` Martyn Welch
2011-08-10 7:44 ` Martyn Welch
2011-08-01 10:20 ` [PATCH 2/8] staging: vme: allow explicit assignment of bus numbers Manohar Vanga
2011-08-01 11:10 ` Dan Carpenter
2011-08-01 12:12 ` Manohar Vanga
2011-08-01 13:06 ` Martyn Welch
2011-08-01 14:31 ` Manohar Vanga
2011-08-01 15:50 ` Martyn Welch
2011-08-02 11:54 ` Manohar Vanga [this message]
2011-08-02 14:57 ` Martyn Welch
2011-08-03 8:54 ` Martyn Welch
2011-08-04 9:16 ` Manohar Vanga
2011-08-01 10:20 ` [PATCH 3/8] staging: vme: make [alloc|free]_consistent bridge specific Manohar Vanga
2011-08-01 11:10 ` Dan Carpenter
2011-08-01 12:24 ` Manohar Vanga
2011-08-01 13:41 ` Martyn Welch
2011-08-01 13:40 ` Manohar Vanga
2011-08-01 14:00 ` Manohar Vanga
2011-08-01 14:05 ` Martyn Welch
2011-08-01 10:20 ` [PATCH 4/8] staging: vme: keep track of registered buses Manohar Vanga
2011-08-01 10:20 ` [PATCH 5/8] staging: vme: add functions for bridge module refcounting Manohar Vanga
2011-08-03 14:04 ` Martyn Welch
2011-08-03 14:06 ` Manohar Vanga
2011-08-03 15:23 ` Emilio G. Cota
2011-08-04 7:23 ` Martyn Welch
2011-08-04 16:34 ` Emilio G. Cota
2011-08-05 7:45 ` Martyn Welch
2011-08-05 9:04 ` Manohar Vanga
2011-08-05 9:24 ` Martyn Welch
2011-08-05 17:47 ` Emilio G. Cota
2011-08-08 8:01 ` Martyn Welch
2011-08-08 9:14 ` Emilio G. Cota
2011-08-08 9:42 ` Martyn Welch
[not found] ` <4E3FABDA.8080204@ge.com>
[not found] ` <20110808101140.GA21300@flamenco.cs.columbia.edu>
2011-08-08 11:06 ` Martyn Welch
2011-08-08 17:22 ` Emilio G. Cota
2011-08-08 18:04 ` Greg KH
2011-08-09 9:00 ` Martyn Welch
2011-08-09 19:19 ` Emilio G. Cota
2011-08-10 7:39 ` Martyn Welch
2011-08-10 9:15 ` Emilio G. Cota
2011-08-10 9:50 ` Martyn Welch
2011-08-10 18:35 ` Emilio G. Cota
2011-08-09 13:24 ` Manohar Vanga
2011-08-09 14:26 ` Martyn Welch
2011-08-09 14:35 ` Manohar Vanga
2011-08-09 15:05 ` Martyn Welch
2011-08-09 18:49 ` Emilio G. Cota
2011-08-10 6:52 ` Manohar Vanga
2011-08-01 10:20 ` [PATCH 6/8] staging: vme: rename *_slot_get to *_get_slot Manohar Vanga
2011-08-01 12:29 ` Martyn Welch
2011-08-01 12:31 ` Manohar Vanga
2011-08-09 15:18 ` Martyn Welch
2011-08-09 15:25 ` Greg KH
2011-08-09 15:32 ` Manohar Vanga
2011-08-01 10:20 ` [PATCH 7/8] staging: vme: add struct vme_dev for VME devices Manohar Vanga
2011-08-09 15:19 ` Martyn Welch
2011-08-01 10:20 ` [PATCH 8/8] staging: vme: make match() driver specific to improve non-VME64x support Manohar Vanga
2011-08-03 9:16 ` Martyn Welch
2011-08-03 12:18 ` Manohar Vanga
2011-08-01 14:29 ` [PATCH 0/8] VME Driver Fixes Martyn Welch
2011-08-01 14:32 ` Manohar Vanga
2011-08-23 22:07 ` Greg KH
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=20110802115434.GA25063@becoht-mvanga \
--to=manohar.vanga@cern.ch \
--cc=cota@braap.org \
--cc=devel@driverdev.osuosl.org \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=martyn.welch@ge.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®