[ipxe-devel] UEFI SCT patch

Alexandre Rames arames at solarflare.com
Tue Sep 18 15:30:30 UTC 2012

See inlined answers.

On 18/09/12 12:37, Daniel Li wrote:
> Hi Alexandre ,
> Thanks for your greate helpful reply,could you help me answer the 
> following questions?
> I think the answers to your first three points should interest you, in 
> particular the 3rd.
> Alexandre
> On 15/09/12 16:46, Daniel Li wrote:
>> Hi Alexandre,
>> Thanks for your helpful reply,After review your attach file,I am very 
>> very exicted,and then has some questions,could you help to answer again?
>> 1.I can't found the file sfc9000.c in the ipxe project,what is the 
>> use of this document?Is a new driver and could you tell me the driver 
>> support machine,if you can send the file to me will best?
> sfc9000 and similar files are code files for our NIC, equivalent to 
> other NIC specific files in src/drivers/net. You can totally ignore that.
> *daniel reply:I still can't detect network device Although i built 
> special file like make -C src bin-x86_64-efi/82545em.efidrv,so i want 
> to know what your have fixed ipxe code?did you fix the file efi_pci.c 
> code?*
My patch does not touch this file.
>> 2.You said you can successfully PXE boot On a real UEFI machine,did 
>> you used the ipxe project?Did you run under uefi enviroment?could you 
>> tell me the machine and your made script?which command has been 
>> run?what method do you use to create image?as i know,if you run 
>> "chain" or "sanboot" command under uefi shell,you should create a 
>> uefi image format?
> I used the iPXE based UEFI driver for my NIC. The PXE utility is part 
> of the host machine's software, accessible through the boot manager 
> (F1 menu on boot on my machine).
> So it seems this differs from the way you are trying to pxe boot. Have 
> you checked if your machine provides such a utility via the boot 
> manager? Note that if it does you need to make sure the driver is 
> loaded before starting it.
> * daniel reply:You said you use "**The PXE utility is part of the host 
> machine's software",I think the pxe utility is supported by legacy 
> bios?Why did you still need built a ipxe based uefi?Did you netwok 
> boot via ipxe based uefi enviroment?Could you share your step to 
> me?example how config pxe server or how config pxe client.*
I used the host machine's UEFI based PXE utility, that uses the UEFI 
driver I built for my NIC.
The only change to the pxe server from a normal setup is to provide a 
UEFI file that the client can boot (see also answer below).
I don't have to configure anything on the client.
>> 3.Your attach show that the *.efi which your built can detected the 
>> network device,but after my bin-x86_64-efi/82579lm.efidrv can't 
>> detect network device,as i know,the network device of my Thinkpad 
>> T420 machine is intel.
> I detailed in my first email a procedure which I think can be used to 
> spot which uefi driver to use with your card.
> I mentioned 82579lm.efidrv because you listed a device with "computer 
> vendor is 8086,device id is 1502".
> I can't see a matching device in the output of 'pci' you attached, so 
> 82579lm.efidrv is probably not what you need.
> From the output of your 'pci' command attached, I found (following the 
> procedure in my first email):
> ipxe/src/drivers/net $ grep -RHIin "8086" . | grep -i "100f"
> ./intel.c:844:    PCI_ROM ( 0x8086, 0x100f, "82545em", "82545EM 
> (Copper)", 0 ),
> *So you probably need to build this one:**
> **$ make -C src bin-x86_64-efi/**82545em.efidrv*
> *And then do check from your uefi that the driver is loaded and is 
> managing a device.**
> **See my first email and (in your uefi shell) 'drivers -?'**  and 
> 'devices -?'**. (*The 'drivers' command has a column listing the 
> number of devices managed by the drivers.)
> *
>  daniel reply:I still can't detected network device although i built 
> the file like " $ make -C src bin-x86_64-efi/82545em.efidrv ",could 
> you help to built a general built like " $ make -C src 
> bin-x86_64-efi/ipxe.efidrv " and then test on your machine and send 
> the log to me?I guess it succeed too.*
Building a driver with
$ make -C ../../src bin-x86_64-efi/ipxe.efidrv DEBUG=efi_pci
and loading the it works fine. See attached screenshots.
>> 4.As i know ,the return error code EFI_UNSUPPORTED was showed when 
>> call efi_create->openprotocol?(), because the controller handle is 
>> not in the pci hand list.
> I don't really understand what you mean by . Anyway if your device is 
> not managed by your driver it seems normal that the procedure stops at 
> one point. I'd be concerned about that only if it persists after your 
> driver successfully manages your device.
> * daniel reply:I think you are right,"I'd be concerned about that only 
> if it persists after your driver successfully manages your device."?Do 
> you know how i can debug it.
> *
You'll have to work it out! Use debug/print statements and follow the code.
>> 5.PCI_vm_windows7_x64_under_uefishell.txt was created when i run 
>> command "pci" under uefi shell.
> See answer to 3).
>> 6.snponly_boot_failed_under_uefishell.jpg when I run under command:
>> fs0:snponly.efi
>>       ipxe:chain http://boot.ipxe.org/demo/boot.php
> I guess you need to load the correct driver before trying to start 
> snponly.efi
>> *daniel reply:If i used the snponly.efi under uefi enviroment,i can 
>> download the image,but i can't boot into the image ,because the image 
>> is not uefi format?Did you remote boot **succeed via **pxe network 
>> boot under uefi?*
I am starting to wonder now: if you manage to download the image is your 
driver working?!
Have you tried to change the configuration of your PXE server to provide 
a simple uefi application? For example a UEFI shell or a UEFI helloworld 
(see edk2 MdeModulePkg/Application... wrap the print "hello" in a loop 
to make sure you have time to see it on the screen.)
>> 5.Could you help to review two attach documents and point out my 
>> mistakes?
>> Thanks for your great greate support.
> As pointed before try in order:
> - building the correct driver
> - load it from the uefi shell and CHECK that it manages your device.
> - then try pxe booting or other snp utilities.
>> ------------------
>> Best Regards,
>> Daniel Li
> Alexandre
>> ------------------ Original ------------------
>> *From: * "Alexandre Rames"<arames at solarflare.com>;
>> *Date: * Fri, Sep 14, 2012 05:04 PM
>> *To: * "Daniel Li"<354225989 at qq.com>;
>> *Cc: * "ipxe-devel"<ipxe-devel at lists.ipxe.org>;
>> *Subject: * Re: [ipxe-devel] UEFI SCT patch
>> For info I attached a screenshot of the driver loading. It was 
>> compiled with
>> DEBUG=efi_init,efi_snp,efi_pci,efi_driver_health,netdevice,sfc9000
>> On 14/09/12 09:59, Alexandre Rames wrote:
>>> Hello Daniel,
>>> On 13/09/12 14:48, Daniel Li wrote:
>>>> Hi Alexandre,
>>>> Thanks for your quickly reply.Did you built a *.efi and detected 
>>>> device under uefi enviroment?Did you network boot succeed?
>>> Yes. I can detect my pci device (UEFI 'pci' command), and load the 
>>> driver. On a real UEFI machine I can successfully PXE boot.
>>> I am not sure if that makes a difference with your command I see in 
>>> the screenshot, but I use a command like
>>> fs0:\> load <driver name>.efidrv
>>> to load the driver. Not a simple invocation of a *.efi file.
>>> From what I mentioned in my previous email yours may be:
>>> ipxe/src $ ls bin-x86_64-efi/*.efidrv
>>> bin-x86_64-efi/82579lm.efidrv
>>> Check the output of 'pci' in your UEFI shell (see previous email).
>>>> I have debug this issue more than one week,but i can't find the 
>>>> root cause,my deubg information like following figure.
>>>> The call flow is 
>>>> efipci_supported()->efipci_create()->OpenProtocol(),unfortunately,OpenProtocol 
>>>> return EFI_UNSUPPORTED error code and the log is "EFIPCI device 
>>>> 0x3dbf5398 is not a PCI device",I think ipxe can't enum the pci 
>>>> device.Could you tell me the right step or ut pass machine. I get 
>>>> the faile result after boot ipxe via uefi shell on Thinkpad T420 
>>>> and VMare 8.0,it's network device is intel.
>>> If the steps I described previously don't work you may try to better 
>>> undestrand why EFI_UNSUPPORTED is returned. Check the parameters 
>>> provided to OpenProtocol; maybe list the protocols available on your 
>>> handle.
>>>> BTW,Could you tell me whether ipxe is supported in uefi 
>>>> enviroment,if not,could you tell me your plan.
>>> I don't really understand the question here. You can compile a UEFI 
>>> driver for you card if it is supported in iPXE.
>>>> ------------------
>>>> ------------------
>>>> Best Regards,
>>>> Daniel Li
>>> Alexandre
>>>> ------------------ Original ------------------
>>>> *From: * "Alexandre Rames"<arames at solarflare.com>;
>>>> *Date: * Thu, Sep 13, 2012 08:39 PM
>>>> *To: * "Daniel Li"<354225989 at qq.com>;
>>>> *Cc: * "ipxe-devel"<ipxe-devel at lists.ipxe.org>;
>>>> *Subject: * Re: [ipxe-devel] UEFI SCT patch
>>>> My patch will potentially fix some errors reported by SCT 
>>>> <http://www.uefi.org/specs/>. It probably won't fix your problem.
>>>> I have little experience with UEFI or iPXE, but here are a few 
>>>> suggestions:
>>>> The commands you listed don't work for me, and I could not find 
>>>> matching vendor / device id for the first 3 devices you mention:
>>>> $ cd <ipxe_repo>/src/
>>>> $ grep -RHIin 8086 drivers/net/ | grep -i 2000
>>>> $ grep -RHIin 8086 drivers/net/ | grep -i 2001
>>>> $ grep -RHIin 8086 drivers/net/ | grep -i 2625
>>>> I could build a efi-driver for the last device your mention:
>>>> Commands:
>>>> $ cd <ipxe_repo>/src/
>>>> $ grep -RHIin 8086 drivers/net/ | grep -i 1502
>>>> gives me:
>>>> ./intel.c:926:    PCI_ROM ( 0x8086, 0x1502, "82579lm", "82579LM", 0 )
>>>> So I could build your UEFI driver with the command:
>>>> $ make bin-x86_64-efi/82579lm.efidrv -j6
>>>> (replace efidrv with efirom to build a rom)
>>>> I am wondering if your other devices are supported. Maybe the way I 
>>>> am looking for devices is not appropriate though.
>>>> Here is an example procedure to load the driver built previously 
>>>> (very verbose).
>>>> cd to the filesystem
>>>> > fs0:
>>>> Check that your device exist. Here look for your device 0x8086, 0x1502
>>>> > pci
>>>> Check what drivers are loaded. Write down the index of the last 
>>>> driver loaded.
>>>> > drivers
>>>> List devices. Write down the index of the last device
>>>> > devices
>>>> Load your driver manually (this is the file compiled previously)
>>>> > load driver\82579lm.efidrv
>>>> Now check if your driver is loaded
>>>> > drivers
>>>> and if your device is present.
>>>> > devices
>>>> If that does not work maybe try to enable debug in some iPXE files.
>>>> For example:
>>>> make bin-x86_64-efi/82579lm.efidrv -j6 DEBUG=intel,efi_snp,efi_init
>>>> Enabling debug in files related to your device may give you some 
>>>> useful info.
>>>> Hope this helps,
>>>> Alexandre
>>>> On 13/09/12 12:54, Daniel Li wrote:
>>>>> Hi Alexandre,
>>>>> Could you tell me which issue was be fixed by your patch?
>>>>> I have some issue like following about ipxe with uefi,I think you 
>>>>> are good well with uefi.
>>>>> Our product will import ipxe,but efi file can't found network 
>>>>> device,I built efi file according to the below steps.
>>>>> 1.I have undef PXE_STACK and PXE_MENU in src\config\general.h.
>>>>> 2.Built EFI version as vendor/product specific:
>>>>> $ make bin-x86-64/10222000.efi bin-x86-64/10222001.efi 
>>>>> bin-x86-64/10222625.efi.(computer vendor is 1022 ,device id is 2001).
>>>>> $make bin-x86-64-efi/80861502(computer vendor is 8086,device id is 
>>>>> 1502).
>>>>> 3.insert usb drive and enter uefi shell.
>>>>> 4.fs0:
>>>>> 5.run above efi file.
>>>>> 6.All commands are Show the tip "No more network devices".
>>>>> ------------------
>>>>> Best Regards,
>>>>> Daniel Li
>>>>> ------------------ Original ------------------
>>>>> *From: * "Alexandre Rames"<arames at solarflare.com>;
>>>>> *Date: * Thu, Sep 13, 2012 06:15 PM
>>>>> *To: * "ipxe-devel"<ipxe-devel at lists.ipxe.org>;
>>>>> *Subject: * [ipxe-devel] UEFI SCT patch
>>>>> Hello,
>>>>> I recently started working on our UEFI driver, and some of my changes
>>>>> may be useful for iPXE upstream.
>>>>> So here is a first patch dealing with NIC independent code. Can 
>>>>> you have
>>>>> a look and let me know if it needs some modifications.
>>>>> It includes:
>>>>>   - changes to be more UEFI compliant and pass SCT tests (most 
>>>>> changes
>>>>> in efi_snp.c)
>>>>>   - initial support for the driver health protocol
>>>>>   - initial support for the firmware management protocol
>>>>> You'll probably want to verify the additional checks for UEFI 
>>>>> versions:
>>>>>   - I added the DRIVER_EFI_SUPPORTED_VERSION protocol, as required by
>>>>> the UEFI spec.
>>>>> " Provides information about the version of the EFI specification 
>>>>> that a
>>>>> driver is following. This
>>>>> protocol is required for EFI drivers that are on PCI and other 
>>>>> plug in
>>>>> cards. "
>>>>> - In efi_init.c I added a check for a minimal version of UEFI 
>>>>> required
>>>>> to use the driver. I am not sure you want to keep that.
>>>>> Alexandre

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ipxe.org/pipermail/ipxe-devel/attachments/20120918/ee8603ab/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: load_drv.png
Type: image/png
Size: 12692 bytes
Desc: not available
URL: <http://lists.ipxe.org/pipermail/ipxe-devel/attachments/20120918/ee8603ab/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: drivers.png
Type: image/png
Size: 14702 bytes
Desc: not available
URL: <http://lists.ipxe.org/pipermail/ipxe-devel/attachments/20120918/ee8603ab/attachment-0001.png>

More information about the ipxe-devel mailing list