This is my guide to get an eGPU setup working on a Lenovo ThinkPad T530 laptop with Windows 10. The adapter I used was an EXP GDC V8 (ExpressCard type) with an EVGA GTX 750Ti graphics card. You can see my full parts list here. At the time of writing I couldn’t find any examples of a T530 working with an eGPU so I had to go it alone. There was information on the web, but nothing I could just follow to the letter and have it work for me. I had to piece things together from multiple sources, forum posts and videos. I spent many hours of trial and error to get it working. I write this guide so hopefully you won’t have to.

For those returning to this post, you can jump straight to creating a DSDT substitution file here. I imagine the steps in this guide will work for other similar ThinkPads or maybe even other brands of laptop, but as I can’t test this I can’t say for sure.

Intro

What is an eGPU?

For those who don’t know what an eGPU system is, or how it works then let me explain. GPU stands for Graphics Processing Unit, also referred to as a video or graphics card. The “e” stands for external. In a nutshell, it’s attaching a desktop video card to a device that doesn’t have a dedicated slot for it such as a laptop by means of another physical port – ExpressCard, mPCIe, M.2 or Thunderbolt. This is only possible with a port that can communicate over PCI-Express (PCIe).

What’s the point of an eGPU?

You would do this for improved graphical performance that couldn’t be achieved through a more conventional upgrade of your system e.g., processor and/or RAM. Laptops can have an integrated graphics chips(iGPU) that exist on the CPU itself; some have a separate dedicated graphics chip (dGPU) or some can even have both. An iGPU is very basic. They use some of the systems own RAM to operate and are not designed for intensive tasks or playing modern games very well at all. dGPUs have there own RAM which is separate from the systems and are more favourable for gaming. That being said, even expensive high-end laptop dGPUs are still out-performed by lower-grade desktop graphics cards due to physical limitations inside of a laptop. With an eGPU you can offset the physical limitations. Although, it does have its downsides depending on a number of factors: what connector type you use, CPU and motherboard. Still, the costs of an eGPU can be very reasonable when compared to the cost of buying a complete desktop system for gaming. If you invest in an eGPU system and later decide to build a desktop you can always reuse the graphics card (usually the most expensive component of a build). Another benefit is the potential portability of an eGPU. The setup can have a very small footprint. There are even enclosures you can buy so you can easily transport your eGPU along with your laptop.

There can be compromises that need to be made with an eGPU system depending on the implementation so for some it may make more sense to go with a traditional desktop. For others this may just be something of interest to try as a project and not a practical solution.

What hardware is needed?

This is the hardware required for an eGPU system.

  • Desktop graphics card
  • Adapter or enclosure – this physically connects your graphics card to your laptop
  • Power supply (could be a power brick or ATX power supply)
  • A laptop with any of these ports: ExpressCard, mPCIe, M.2 or Thunderbolt 1,2 or 3
  • Full-HD capable monitor (optional, but can be almost a necessity for some setups)

For my setup I also needed software to make the operating system recognize the card (I’ll explain this more later). For some setups it can be as easy as plugging in a few cables. To power the adapter/enclosure and the graphics card you can use a typical desktop PSU (Power Supply Unit) also referred to as an ATX power supply; or you can use a power brick provided the power draw of your system is low enough as they generally can’t offer as much power as an ATX power supply.

The age of your processor will have an effect on eGPU performance. From what I have read the requirements are pretty low - at least an Intel Core 2 Duo or the equivalent AMD processor - so an old processor could still be of use with an eGPU system. Though, the newer the processor the better really. My laptop had an Intel Core i5 3320M (3rd generation Ivy Bridge architecture) when I wrote this article.

What kind of adapter/enclosure do I need?

There are numerous adapters or enclosures on the market for connecting a graphics card to a laptop and each can be available in a variety of different connector types. In my case I was only looking for an adapter that connected via ExpressCard (as I didn’t want to open up my laptop to connect with mPCIe) so my options were very limited.

My introduction to an eGPU and the possible hardware is only an overview. If you want a more detailed introduction, then I’d suggest you read this excellent post on /r/eGPU.

You can find a handy list of “Build Guides” of various working eGPUs setups over at egpu.io.

My eGPU setup

This section is what I bought and how I got it all working.

Parts list

This is the hardware I used for my eGPU:

Item Cost
EVGA GTX 750Ti graphics card £90 (used)
EXP GDC Beast v8 [ExpressCard version] adapter £40 (new, in 2017)
12v, 8A (96 watts) DC power brick (model: FSP096-AHA) ~£23 (new)
Lenovo ThinkPad T530 (with ExpressCard port) Free (already owned)
Nando4’s DIY eGPU Setup version 1.30 software £9 (in 2017)

A note on power supply

The EVGA GTX 750Ti can pull in about 60 watts of power according to the specifications and the PCIe slot on the adapter is rated to supply 75 watts of power. Therefore, no additional 6-pin PCIe power cable is required for the graphics card. If you wanted to use a more powerful graphics card you would need the 6-pin PCIe power cable which is available here for about £4. The cable connects to the 6-pin (power out) port on the narrow-side of the V8 adapter. Be careful not to confuse this with the 8-pin (power in) port on the long-side of the adapter as this is the port you connect your power supply to if it has a 6-pin connector type. The power adapter I listed is only rated at 96 watts so you may also need a power supply with a higher wattage too if you use a different graphics card. The Dell Optiplex D220P is a power supply that is recommended often within the eGPU community as it’s cheap, relatively small and offers a good amount of power (220 watts).

A note about external displays

I didn’t buy a monitor for my setup as it wasn’t required (though I highly recommend it). A setup without an external display using only the laptops LCD screen is only possible if you have an NVidia-based graphics card and an Intel iGPU that supports Optimus. This will allow you to output the video to your laptops internal display. However, this carries a hefty performance penalty of around 20-30% from what I have read online and if you factor in bandwidth restrictions when using a single PCIe lane with ExpressCard then this is just not feasible.

Software

NOTES: Nando4’s software is now version 1.35 but that won’t matter as it’s the same software but with added features and bug fixes. The versions of IASL and WDK are important. If you are having trouble getting your setup working make sure you use the same version IASL and WDK used in this guide.

What’s a DSDT file and why do I need it for an eGPU?

When I started looking into setting up an eGPU I thought the process would be very simple – a plug n’ play type of deal. Well, that wasn’t the case…At least not for the laptop I had anyway. When I plugged it all in and turned it on nothing happened. I took a look in Device Manager and I could see the graphics card but when looking at it’s properties it said error 12 and this message: This device cannot find enough free resources that it can use. Okay, why can’t it assign the resources? I did a bit of digging and found out it was due to the DSDT table being confined to a 32-bit address space. You might be thinking what the hell is a DSDT table? (I never heard of it before either). DSDT is the main table within ACPI. ACPI determines how devices communicate with each other, power usage of devices and the configuration of plug n’ play devices on your system. The problem is a desktop GPU requires a lot of address space as it happens, more than what is usually left over in a 32-bit address space – which is the size of my DSDT table on my laptop (and probably many others). I don’t know for sure why a 32-bit space is used but to take a guess I would say that laptop manufacturers didn’t anticipate the addition of others devices on the system. Therefore they didn’t feel the need to use a bigger address space. Now, how do we resolve this problem? We replace the DSDT table with one that has a bigger address space. The method I use here is non-invasive, in other words we are not modifying the original DSDT. Instead we temporarily replace it with another one that can accommodate more devices. When the system is rebooted it goes back to using the original DSDT so if you run into issues it’s easily reversible. This is called a “DSDT substitution”.

How to create a DSDT substitution file

  • Disable Windows 10 from automatically downloading drivers: run Sysdm.cpl and click on the “Hardware” tab in the window. Click on “Device Installation Settings” and you want to choose “No” and save the changes

  • Run DDU (Display Driver Uninstaller) to delete any NVidia drivers already installed on your system

  • Extract the iasl-win-20150619.zip file to C:\. Make sure the extracted folder is called iasl-win-20150619

  • Install wdksetup.msi and use the default settings

  • Install Notepad++ and use the defaults

  • Create a new folder on C:\ called DSDT

  • Open a Command Prompt as Administrator and run the following commands in order:

SET IASL="C:\iasl-win-20150619\"
SET ASL="C:\Program Files (x86)\Windows Kits\10\Tools\x64\ACPIVerify\"
CD C:\DSDT

Do not close the Command Prompt. If you do don’t worry just open it again as an Administrator and run the commands above again.

  • Run this command in the Command Prompt
%IASL%acpidump.exe -b

Now you have these files: dsdt.dat, facp.dat, facs.dat, xsdt.dat. We are only interested in the dsdt.dat file.

  • Now run this command (as an administrator):
%IASL%iasl.exe dsdt.dat

The dsdt.dat is now decompiled into an editable dsdt.dsl file. Do not close the command prompt you will need it later

  • Copy this chunk of code:
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)
  • Open dsdt.dsl in Notepad++ or any text editor

  • Search for DWordMemory and after the last entry you want to carefully paste the chunk of code you copied (have a look at the picture it shows you what it should look like)

  • Still in dsdt.dsl search for this code:
Name (_IRC, 0x00)  // _IRC: Inrush Current

You will replace the above code with this code:

Method (_IRC, 0, NotSerialized) { Return(0x00) }
  • Still in dsdl.dsl at the top of the file in the DefinitionBlock change this:
dsdt.aml

To this:

new.aml

Here is a screenshot of what it should look like:

  • Now save the dsdt.dsl file and close the text editor

  • Go back to the Command Prompt again and run this command:

%IASL%iasl.exe -oa dsdt.dsl

This will compile your dsdt.dsl file that you modified and will output new.aml. The command should complete without any errors, warnings are fine and so is everything else just not any errors.

  • Back into the Command Prompt again and run this command:
%ASL%asl.exe /u new.aml

This takes the new.aml file and outputs a new.ASL file.

  • Open new.ASL in a text editor and copy this chunk of code:
          Name(_CRS, Buffer(0x1ee)
          {
	0x88, 0x0d, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
	0x00, 0x00, 0x00, 0x01, 0x47, 0x01, 0xf8, 0x0c, 0xf8, 0x0c, 0x01, 0x08,
	0x88, 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x0c,
	0x00, 0x00, 0xf8, 0x0c, 0x88, 0x0d, 0x00, 0x01, 0x0c, 0x03, 0x00, 0x00,
	0x00, 0x0d, 0xff, 0xff, 0x00, 0x00, 0x00, 0xf3, 0x87, 0x17, 0x00, 0x00,
	0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0xff, 0xff,
	0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x87, 0x17,
	0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00,
	0xff, 0x3f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
	0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
	0x0c, 0x00, 0xff, 0x7f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
	0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x80, 0x0c, 0x00, 0xff, 0xbf, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
	0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xff, 0x3f, 0x0d, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
	0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0d, 0x00, 0xff, 0x7f,
	0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
	0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0d, 0x00,
	0xff, 0xbf, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
	0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
	0x0d, 0x00, 0xff, 0xff, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
	0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x0e, 0x00, 0xff, 0x3f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x40, 0x0e, 0x00, 0xff, 0x7f, 0x0e, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00, 0x0c, 0x03,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xff, 0xbf, 0x0e, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17, 0x00, 0x00,
	0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0e, 0x00, 0xff, 0xff,
	0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x87, 0x17,
	0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
	0xff, 0xff, 0xbf, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xfe,
	0x87, 0x17, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0xd4, 0xfe, 0xff, 0xbf, 0xd4, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
	0x00, 0x00, 0x8a, 0x2b, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x00,
	0xff, 0xff, 0xff, 0x0f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00,
	0x79, 0x00
            })

Note: This code will vary if you have a different model laptop. This code is what we have been working towards so far in this guide through decompiling, modifying and compiling our DSDT. It’s best to save this code for safe keeping (just give it the .txt extension when you save.)

  • We want to go back to the Command Prompt and run this command:
%ASL%asl.exe /tab=DSDT

This extracts our ‘raw’ DSDT in its .ASL form (the command creates the DSDT.ASL file). The DSDT.ASL file is the one actually used by the system without any modification. new.aml is the file we modified to get that chunk of code which we now need to add to DSDT.AML.

You may be thinking why not just use the modified new.aml file instead of creating a new one? Well, through the changes made to new.aml it may have introduced errors which will ruin everything so it’s best to generate a new DSDT file from scratch and only change as few parts as possible to maximize an error free file and your sanity.

  • Open DSDT.ASL in a text editor

  • Search for the code:

Name(_CRS, Buffer(0x1c0)

You will see a big chunk of code like the one you copied. You are going to replace it with what you copied. Be careful not to accidentally remove a curly bracket like one of these: }

  • Next still in the DSDT.ASL file search for this:
ATMC()

You will need to replace all instances of that with this instead:

\_SB_.PCI0.LPC_.EC__.ATMC()
  • Save and close DSDT.ASL

  • Open the Command Prompt and run this command:

%ASL%asl.exe DSDT.ASL

This compiles the DSDT.ASL into a DSDT.AML file. The DSDT.AML file is what we will now use with the DIY eGPU Setup 1.30 software.

Nando4’s software setup

If you haven’t already you’ll need to go and buy Nando4’s DIY eGPU Setup 1.3x for the next part of this guide.

  • The zip file you receive, unzip it and run the executable which should copy a folder called eGPU to your C:\ drive

  • In the eGPU folder run the file called setup-disk-image.bat and follow the instructions in the window

  • Now run the eGPU-Setup-mount.bat file. It will mount a drive named DIYEGPUIMG

  • Navigate to DIYEGPUIMG and open the config folder and open the startup.bat file with a text editor

  • At the bottom of the startup.bat file add the following code:

call vidwait 60
call vidinit -d %eGPU%
call pci
pt MEM writefromfile 1 0xDAFE8000 DSDT.AML
:end
call chainload mbr
  • Save the startup.bat file and close the text editor

  • Copy the DSDT.AML file from the C:\DSDT folder into the V:\config folder

NOTES: V:\ is the assigned drive letter when you run the eGPU-Setup-mount.bat file. The actual drive letter may vary depending on your system.

  • Reboot your computer. Select DIY eGPU Setup 1.30 from the boot menu

  • From the menu select option 2: DIY eGPU Setup 1.30 : automated startup using startup.bat. This will force the system to use the 36-bit DSDT and allocate the GPU into it

  • When you log back into Windows open Device Manager and on the menu at the top of the window select View > Resources by type. If your DSDT substitution was successful you should see a Large Memory object

  • Success! All you have to do now is install the NVidia driver from the website here (or if you have a different brand of graphics card just have a search for the latest driver from their website) and reboot your machine again

NOTES: The DSDT substitution is only applied until you next reboot your machine, so every time you boot you need to load the DSDT file with DIY eGPU Setup 1.3x to be able to use your graphics card.

Benchmarks

I haven’t had the time to do any benchmarks yet, but I will be in the near future. When I do I will update this post to include them.