On Wed, Feb 17, 2016 at 6:24 AM, Andrei Borzenkov <arvidj...@gmail.com> wrote: > 17.02.2016 05:02, Eric Snowberg пишет: >> >>> On Feb 16, 2016, at 1:16 AM, Andrei Borzenkov <arvidj...@gmail.com> wrote: >>> >>> On Mon, Feb 15, 2016 at 10:11 PM, Eric Snowberg >>> <eric.snowb...@oracle.com> wrote: >>>> Fix the open firmware path property for sun4v SPARC systems. These >>>> platforms do not have a /sas/ within their path. Over time >>>> different OF addressing schemes have been supported. There >>>> is no generic addressing scheme that works across every HBA. >>>> >>>> Signed-off-by: Eric Snowberg <eric.snowb...@oracle.com> >>>> --- >>>> grub-core/osdep/linux/ofpath.c | 192 >>>> +++++++++++++++++++++++++++++++++++++++- >>>> 1 files changed, 190 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/grub-core/osdep/linux/ofpath.c >>>> b/grub-core/osdep/linux/ofpath.c >>>> index a79682a..de51c57 100644 >>>> --- a/grub-core/osdep/linux/ofpath.c >>>> +++ b/grub-core/osdep/linux/ofpath.c >>> ... >>>> @@ -444,6 +525,111 @@ of_path_of_scsi(const char *sys_devname >>>> __attribute__((unused)), const char *dev >>>> } >>>> else >>>> { >>>> +#ifdef __sparc__ >>>> + int vendor = 0, device_id = 0; >>>> + check_hba_identifiers(sysfs_path, &vendor, &device_id); >>>> + >>>> + if (vendor == 0x1000) /* LSI Logic Vendor ID */ >>>> + { >>>> + /* Over time different OF addressing schemes have been >>>> supported */ >>>> + /* There is no generic addressing scheme that works across */ >>>> + /* every HBA */ >>>> + switch (device_id) >>>> + { >>>> + case 0x30: /* Rhea, Jasper 320, LSI53C1020/1030 */ >>>> + case 0x50: /* SAS-1068E */ >>>> + case 0x56: /* SAS-1064E */ >>>> + case 0x58: /* Pandora SAS-1068E */ >>>> + case 0x5d: /* Aspen, Invader, LSI SAS-3108 */ >>>> + case 0x79: /* Niwot, SAS 2108 */ >>> >>> That really does not scale. Can we enumerate device aliases and take >>> diskN and cdromN? So that we do not need to duplicate OBP logic? >>> >> >> Do you have an idea in mind on how to do this differently to make it scale >> better? This patch will default to the old disk@N for unknown HBAs. I >> agree it doesn’t scale that well, but new HBAs for SPARC with OF support >> don't come out that often. >> >> Before this patch, there isn’t a single SAS HBA that is enumerated correctly >> on SPARC. I went back 10 years and believe I have added every HBA with OF >> support. This isn’t duplicating OBP logic. The final part of the device >> path is vendor specific. OBP does not control that part of the path, it >> just uses it. Unfortunately there isn’t a standard. This code only gets run >> during setup/install (not boot) to return the path for OBP to use. >> >> You mentioned cdroms being enumerated with cdromN. I believe that type of >> enumeration stopped with IDE drives. A USB cdrom would be enumerated >> something like this: >> >> /pci@308/pci@1/usb@0/hub@1/storage@1/disk@0 >> >> So the function that runs during boot: check_string_removable does not >> identify the cdrom properly. >> >> I’m open to making any changes to this patch if you have some ideas in mind. >> I tried to base it off of what was already in ofpath.c and I have some >> follow on patches coming the rely on this path being correct. >> > > I mean to read device aliases created by OBP (those displayed by > devalias OBP command). > > disk0 /pci@308/pci@1/usb@0/hub@1/storage@1/disk@0 > ...
Here is example Node 0xf022d638 screen: '/pci@400/pci@1/pci@0/pci@7/pci@0/display@0' mouse: '/pci@400/pci@1/pci@0/pci@8/pci@0/usb@0,2/hub@2/device@4/mouse@1' disk7: '/pci@700/pci@1/pci@0/pci@0/@0/disk@p3' disk6: '/pci@700/pci@1/pci@0/pci@0/@0/disk@p2' disk5: '/pci@700/pci@1/pci@0/pci@0/@0/disk@p1' disk4: '/pci@700/pci@1/pci@0/pci@0/@0/disk@p0' scsi1: '/pci@700/pci@1/pci@0/pci@0/@0' net3: '/pci@600/pci@2/pci@0/pci@3/network@0,1' net2: '/pci@600/pci@2/pci@0/pci@3/network@0' rcdrom: '/pci@400/pci@1/pci@0/pci@8/pci@0/usb@0,2/hub@2/hub@3/storage@2/disk@0' rkeyboard: '/pci@400/pci@1/pci@0/pci@8/pci@0/usb@0,2/hub@2/device@4/keyboard@0' rscreen: '/pci@400/pci@1/pci@0/pci@7/pci@0/display@0:r1280x1024x60' net1: '/pci@400/pci@1/pci@0/pci@2/network@0,1' net0: '/pci@400/pci@1/pci@0/pci@2/network@0' net: '/pci@400/pci@1/pci@0/pci@2/network@0' disk3: '/pci@400/pci@1/pci@0/pci@0/@0/disk@p3' disk2: '/pci@400/pci@1/pci@0/pci@0/@0/disk@p2' disk1: '/pci@400/pci@1/pci@0/pci@0/@0/disk@p1' disk0: '/pci@400/pci@1/pci@0/pci@0/@0/disk@p0' disk: '/pci@400/pci@1/pci@0/pci@0/@0/disk@p0' scsi0: '/pci@400/pci@1/pci@0/pci@0/@0' scsi: '/pci@400/pci@1/pci@0/pci@0/@0' virtual-console: '/virtual-devices@100/console@1' name: 'aliases' _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel