Jump to content
EwinRacing Flash Series Gaming Chairs
Sign in to follow this  
bringmeyoursours

15" Lenovo E540 + R9_380@4Gbps-mPCIe2 (PE4L 2.1b) + Win10 [bringmeyousours]

Recommended Posts

Finally! Writing up a detailed guide on how I managed to get the Radeon R9 380 Gaming model to run with the Lenovo E540 ThinkPad. 

 

Items Used

 

Lenovo E540 ThinkPad running Windows 10 64 bit

BPlus PE4L V2.1b (mPCIe cable is hardwired to the PE4C board)

MSI Radeon R9 Gaming (4Gbps)
Thermaltake Smart Series 600 watt PSU

 

Software Necessary

 

Tech Inferno Fan's Setup 1.30 (can't recommend supporting this dude more, this would not have been done had he not been kind in helping out).

 

NEW IASL tools - I cannot stress enough how important this is for this newer hardware, I lost days fiddling with old tools that would not compile even the dumped DSDT table -  located here.


ASL tool - located here

 

Drivers used for the R9 380 were the newest drivers available on AMD's website as of 8/13/16 - located here.


Display Driver Uninstaller from 3DGuru - located here.


Notepad++ - to modify the DSL file used in the DSDT Override - located here.


MSI Afterburner - necessary if the problem I had with the fans on the eGPU not spinning up when windows loads, allows manual control of fan speed - located here.

Step 1 - Install Setup 1.30

 

Obtain the installation files from Tech Inferno Fan, or from the downloads section of this website. Install the program on the Lenovo with supplied installation instructions.

 

Step 2 - Establish a DSDT Override

 

We are doing this to extend the PCI Root Bridge out to make room in memory for the new card (in essence).

 

Extract your IASL tools to a folder on the root of the C:\ drive. I chose C:\IASL


Then extract the ASL tools to another folder, I used C:\ASL

Next, open an administrative command prompt and navigate to your IASL tools. 

 

The first command we will use is to dump all the ACPI tables into binary .DAT files :

acpidump -b

You will notice that the folder with your tools now has a mess of .DAT files, one of which being DSDT.dat (BACK THIS FILE UP), which leads me to the next command, which disassembles the .DAT file into plaintext for editing :

iasl DSDT.dat

At this point you will need to open Notepad++ and open the disassembled file called "DSDT.dsl", hit ctrl+f, and type "DWordMemory" in. Scroll to the last instance, and add the following after the line " ,, _Y24, AddressRangeMemory, TypeStatic)" :

QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
   0x0000000000000000, // Granularity
   0x0000000C20000000, // Range Minimum,  set it to 48.5GB
   0x0000000E0FFFFFFF, // Range Maximum,  set it to 56.25GB
   0x0000000000000000, // Translation Offset
   0x00000001F0000000, // Length calculated by Range Max - Range Min.
   ,, , AddressRangeMemory, TypeStatic)

Next, you will save the file, and go back to your command prompt, and we will compile the newly modified DSDT table using the command :

iasl DSDT.dsl

Copy the newly created DSDT.aml from the IASL folder to the ASL folder, now in command prompt, navigate to C:\ASL and use the following commands to override the DSDT table and enable test signing on the operating system :

asl /loadtable DSDT.aml
bcdedit -set TESTSIGNING ON

Now, reboot the system, open device manager, click the view tab and switch the view to "Resources by Connection", and check to see if you have a new Large Memory entry in the list.

 

If it is there, the DSDT Override was successful, if not, recheck the previous steps. At this point you may need to run the Device Driver Uninstaller tool, and uninstall the "PCI Express Root Complex" in device manager under the "System Devices"
 

Step 3 - Attach eGPU, Perform PCI Compaction to avoid Code 12/43 error.

 

Power off the system, disconnect the WiFi adapter, attach the mPCIe lead to the mPCIe slot where the WiFi adapter once was.

 

Place eGPU inside of the PE4C, attach leads from PSU, flip the switch on the PSU to on.

 

Now boot the system and select Setup 1.30 before windows loads by default, select the Chainload with MBR option.

 

It will kick back to give you the option to boot to Windows or Setup 1.30 again, select Setup 1.30, then select Setup 1.30 with a menu.

 

Your R9 should be detected automatically, but if it is not, unplug the mPCIe lead and plug it back in, and press F5.

 

When it is detected, select PCIe Ports, Select Gen2, and highlight the ATIAMD card at the bottom. Press F3, this saves the Gen2 setting on the port to the startup configuration.

 

Afterwards, select the PCI Compaction menu item, set the Endpoint to be 56.25GB (36-bit), then select iGPU and eGPU as the scope, and force the iGPU to be 32 bit.

 

When compaction is finished, select Chainload, then test run. 

 

Step 4 - Verifying Drivers and Communication for the eGPU


You will select to boot into Windows 10 now, with eGPU attached and powered on. Navigate to device manager, Uninstall the drivers for the iGPU (I didn't have to do this as I didn't have them installed in the first place, but I found that there is a bit of a conflict when trying to reinstall the iGPU drivers with the DSDT Override in place), and install the drivers for the R9. This (in theory) should succeed and you should have a bouncing baby eGPU of your own! If there is an error 12, it is likely the compaction or DSDT Override has failed in some way.

 

 If there is an error 43, I solved that issue by deleting the PCI Express Root Complex device and restarting. 

 

There are a few caveats that I haven't entirely looked into, such as not being able to do a soft reboot without the system booting to a black screen, requiring a hard shutdown and power on to fix.

 

Once you've verified that the drivers are installed with no error codes or systematic problems with the existing iGPU (usually driver related in my experience), it is safe to reboot, boot into Setup 1.30 again, and select the automated start option to expedite your boot. It would be wise to test that option out. Thankfully this system doesn't have strict whitelisting in place, making this a little bit easier. If you find that the fans on the eGPU fail to spin up upon getting to the windows desktop, install the MSI Afterburner tool to manually control the fan speed (Thanks nando!)


Benchmarks
 

GPUZ

Spoiler

f3cc6b6564.gif

 

3DMark

Spoiler

f3d26b16a1.png

Spoiler

f3d21c65ab.png

 

Heaven Benchmark

Spoiler

f3de0c6e99.png

Spoiler

f3de267694.png



Thanks a ton to nando for the help and for the eGPU setup software!

 

 

  • Thumbs Up 1

Share this post


Link to post
Share on other sites

I'm about to start my eGPU setup on my E540 also. Just tried to start to DSDT override before I have any of the components or setup 1.30 to see if I can get through it. On running the acpidump.dat file for the first time it gave me an error 

Quote

     * iASL Warning: There were 7 external control methods found during
     * disassembly, but only 0 were resolved (7 unresolved). Additional
     * ACPI tables may be required to properly disassemble the code. This
     * resulting disassembler output file may not compile because the
     * disassembler did not know how many arguments to assign to the
     * unresolved methods. Note: SSDTs can be dynamically loaded at
     * runtime and may or may not be available via the host OS.
     *
     * To specify the tables needed to resolve external control method
     * references, the -e option can be used to specify the filenames.
     * Example iASL invocations:
     *     iasl -e ssdt1.aml ssdt2.aml ssdt3.aml -d dsdt.aml
     *     iasl -e dsdt.aml ssdt2.aml -d ssdt1.aml
     *     iasl -e ssdt*.aml -d dsdt.aml
     *
     * In addition, the -fe option can be used to specify a file containing
     * control method external declarations with the associated method
     * argument counts. Each line of the file must be of the form:
     *     External (<method pathname>, MethodObj, <argument count>)
     * Invocation:
     *     iasl -fe refs.txt -d dsdt.aml
     *
     * The following methods were unresolved and many not compile properly
     * because the disassembler had to guess at the number of arguments
     * required for each:
     */
    External (_PR_.CPU0._PSS, IntObj)
    External (_SB_.IAOE.GAOS, UnknownObj)
    External (_SB_.IAOE.GSWR, UnknownObj)
    External (_SB_.PCCD, UnknownObj)
    External (_SB_.PCCD.PENB, UnknownObj)
    External (_SB_.PCI0.SAT1.PRIM.GTME, UnknownObj)
    External (_SB_.PCI0.SAT1.PRT2, UnknownObj)
    External (_SB_.PCI0.SAT1.SCND.GTME, UnknownObj)
    External (_SB_.PCI0.SAT1.SCND.MSTR, UnknownObj)
    External (_SB_.PCI0.VID_.AINT, MethodObj)    // Warning: Unknown method, guessing 2 arguments
    External (_SB_.PCI0.VID_.DRDY, IntObj)
    External (_SB_.PCI0.VID_.GLIS, MethodObj)    // Warning: Unknown method, guessing 1 arguments
    External (_SB_.PCI0.VID_.GSCI, MethodObj)    // Warning: Unknown method, guessing 0 arguments
    External (_SB_.PCI0.VID_.GSSE, MethodObj)    // Warning: Unknown method, guessing 1 arguments
    External (_SB_.PCI0.VID_.STAT, UnknownObj)
    External (_SB_.PCI0.VID_.TCHE, UnknownObj)
    External (CADL, UnknownObj)
    External (CAL2, UnknownObj)
    External (CAL3, UnknownObj)
    External (CAL4, UnknownObj)
    External (CAL5, UnknownObj)
    External (CAL6, UnknownObj)
    External (CAL7, UnknownObj)
    External (CAL8, UnknownObj)
    External (CLID, UnknownObj)
    External (CPDL, UnknownObj)
    External (CPL2, UnknownObj)
    External (CPL3, UnknownObj)
    External (CPL4, UnknownObj)
    External (CPL5, UnknownObj)
    External (CPL6, UnknownObj)
    External (CPL7, UnknownObj)
    External (CPL8, UnknownObj)
    External (DDL2, UnknownObj)
    External (DDL3, UnknownObj)
    External (DDL4, UnknownObj)
    External (DDL5, UnknownObj)
    External (DDL6, UnknownObj)
    External (DDL7, UnknownObj)
    External (DDL8, UnknownObj)
    External (DIDL, UnknownObj)
    External (GDCK, MethodObj)    // Warning: Unknown method, guessing 1 arguments
    External (GHDS, MethodObj)    // Warning: Unknown method, guessing 1 arguments
    External (GNOT, MethodObj)    // Warning: Unknown method, guessing 2 arguments
    External (NADL, UnknownObj)
    External (NDID, UnknownObj)
    External (NDL2, UnknownObj)
    External (NDL3, UnknownObj)
    External (NDL4, UnknownObj)
    External (NDL5, UnknownObj)
    External (NDL6, UnknownObj)
    External (NDL7, UnknownObj)
    External (NDL8, UnknownObj)
    External (PDC0, UnknownObj)
    External (PDC1, UnknownObj)
    External (PDC2, UnknownObj)
    External (PDC3, UnknownObj)
    External (PDC4, UnknownObj)
    External (PDC5, UnknownObj)
    External (PDC6, UnknownObj)
    External (PDC7, UnknownObj)

Did you get this same error? If not do you have any ideas how I can avoid this in the future. I don't have much experience with this type of stuff.

 

Also, this is a very helpful guide. Thanks a bunch

 

JK it recompiled fine and the DSDT override was successful. 

Edited by locotaco
It didn't matter...

Share this post


Link to post
Share on other sites

Using a HD 7850, the e540 recognizes it with no errors but does not detect the external display.

Did you have to do anything to get the external display recognized?

Edited by 09williamsad

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.