bringmeyoursours Posted August 13, 2016 Share Posted August 13, 2016 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 3DMark Spoiler Spoiler Heaven Benchmark Spoiler Spoiler Thanks a ton to nando for the help and for the eGPU setup software! 1 Quote Link to comment Share on other sites More sharing options...
locotaco Posted December 8, 2016 Share Posted December 8, 2016 (edited) 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 December 9, 2016 by locotaco It didn't matter... Quote Link to comment Share on other sites More sharing options...
Daniel Hwang Posted January 14, 2017 Share Posted January 14, 2017 HI Thank You I am currently trying to follow your post, but couldn't find "BPlus PE4L V2.1b " Because it is no more selling ... would it work with PE4C 3.0? http://www.hwtools.net/Adapter/PE4C V3.0.html Thanks Quote Link to comment Share on other sites More sharing options...
09williamsad Posted April 10, 2017 Share Posted April 10, 2017 (edited) 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 April 15, 2017 by 09williamsad Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.