Help with removing GPU whitelist, XPS A2010

Discussion in 'BIOS Mods' started by tsalat, Apr 15, 2017.

  1. tsalat

    tsalat MDL Novice

    Apr 15, 2017
    8
    3
    0
    Hi,

    i need some help or advice for modifying a DELL bios of XPS one A2010. The XPS A2010 is an old all-in-one computer released by DELL i guess 8 or 9 years ago so its pretty old but still a very nice piece. I started to modify it a little bit, changed the CPU to Q6600, add some RAM, changed the HDD to an SSD and installed also Windows 10 on it, with everything working. The last thing I would like to change is the GPU. The default GPU inside the XPS is an ATI HD2400 and I would like to swap it for nVidia FX770m. The XPS has a MXM slot on the mobo so the change is possible but apparently the bios has a whitelist for the ATI card (this was discussed back in 2011 on a different forum where one modder confirmed the whitelist, removed it but its not accessible anymore). If I place the FX770m into the XPS I hear around 30beeps (very strange) but afterwards it will boot to windows but with the screen black all the time. I have TeamViewer on the machine and the card is recognized by Windows and so it looks it should work but the screen is black all the time, even while booting.

    So, I decided to look on it myself. Found a tutorial about changing the IDs of a wifi card inside BIOS to allow the use of another card and this method I tried to follow. I extracted al modules from BIOS and searched for the HEX code of the ATI card (the mobo has also a on-board card). Found the DEV, VEN and SUBSYS ids inside one module (ID 1B, Single Link Arch BIOS) – see attached, I also highlighted the on-board GPU (DEV/VEN), the SUBSYS is the same for both GPUs. I have changed the DEV/VEN and SUBSYS of the ATI card, flashed the BIOS but the Vidia card is still not working and moreover the ATI card is still working:confused:. Apparently these changes are not doing anything. However, I found that the SUBSYS string is multiple times inside this extracted module but I have no idea what to change and where. The best solution would be to disable the whitelist check, but where to find it? Or at least swap it from the ATI card to the nVidia one… anyway, Iam lost already, have no idea how to proceed :confused:

    Below some information about it:
    -Manufacturer: DELL
    -Motherboard Model: XPS one A2010
    -Bios revision: 2.0.6
    -Bios Type: AMI BIOS
    -Bios Download Link: dell.com/support/home/us/en/04/Drivers/DriversDetails?driverId=R215335

    ATI card:
    Device Key: Enum\PCI\VEN_1002&DEV_94C9&SUBSYS_02261028&REV_00
    VEN: 02 10
    DEV: C9 94
    SUBSYS: 28 10 26 02

    On-board card:
    VEN 8086 DEV 29C2 SUBSYS 02261028
    VEN: 86 80
    DEV: C2 29
    SUBSYS: 28 10 26 02

    What I would like to add or replace with (nVidia card)
    Device Key: Enum\PCI\VEN_10DE&DEV_065C&SUBSYS_30E7103C&REV_A1

    VEN: DE 10
    DEV: 5C 06
    SUBSYS: 3C 10 E7 30

    Any help would be appreciated, Tomas
     

    Attached Files:

  2. tsalat

    tsalat MDL Novice

    Apr 15, 2017
    8
    3
    0
    #2 tsalat, Apr 25, 2017
    Last edited: Apr 25, 2017
    (OP)
    Guys,

    iam fighting with this already for almost a month and not going to give up until i will know if its or isnt possible [​IMG]. I found a German forum where one user had the modified bios from here but he told me it wasnt working with it anyway...this doesnt mean that it cant work but its at least some information. Iam already quite sure that the FX770m is not HW compatible with the system, because the beeps i hear and even though the system will boot afterwards with a black screen the beeps are not a good sign [​IMG]

    I was reading about this a lot but usually found articles about wlan whitelists but at the end ist should be the same. I dont want to remove the whitelist, for me it would be enough to replace it with the ids of the new card. Anyway, after reading a lot i found a nice amisplitter which will split the 1B module of ami bioses. Unfortunately the splitter didnt found the ACPI table but anyway. The 1B module should be the right one to edit in this case... So i downloaded also IDA pro and imported one of the 1B splitted files, the one which included as the only one the DEV/VEN ids of the ATI card... The DEV/VEN is mentioned through the whole bios just once, in this 1B module.

    So here is the part of the code with the SUBSYS, DEV/VEN....

    Code:
    BIOS_F:86C0                 dec     bp
    BIOS_F:86C1                 inc     bp
    BIOS_F:86C2                 dec     cx
    BIOS_F:86C3                 dec     si
    BIOS_F:86C4                 inc     si
    BIOS_F:86C5                 dec     di
    BIOS_F:86C6                 add     [di], ax
    BIOS_F:86C8                 pushad
    BIOS_F:86CA                 xor     ah, ah
    BIOS_F:86CC                 mov     dx, 8
    BIOS_F:86CF                 call    sub_F2BEA
    BIOS_F:86D4                 inc     bx
    BIOS_F:86D5                 jz      short loc_F8712
    BIOS_F:86D7                 mov     ah, 8Ch ; 'î'
    BIOS_F:86D9                 mov     ebx, 2261028h              - SUBSYS
    BIOS_F:86DF                 mov     dx, 8
    BIOS_F:86E2                 call    sub_F2C05
    BIOS_F:86E7                 mov     dx, 8
    BIOS_F:86EA                 mov     ah, 19h
    BIOS_F:86EC                 call    sub_F2B5D
    BIOS_F:86F1                 mov     dh, al
    BIOS_F:86F3                 mov     dl, 0
    BIOS_F:86F5                 mov     ah, 0
    BIOS_F:86F7                 call    sub_F2BEA
    BIOS_F:86FC                 cmp     ebx, 94C91002h             - DEV/VEN
    BIOS_F:8703                 jnz     short loc_F8712
    BIOS_F:8705                 mov     ah, 4Ch ; 'L'
    BIOS_F:8707                 mov     ebx, 2261028h              - SUBSYS
    BIOS_F:870D                 call    sub_F2C05
    BIOS_F:8712
    BIOS_F:8712 loc_F8712:                              ; CODE XREF: BIOS_F:86D5j
    BIOS_F:8712                                         ; BIOS_F:8703j
    BIOS_F:8712                 popad
    BIOS_F:8714                 retf

    Ok, here we go with the assembler language and my knowledge ends right now. The subsys is mentioned two times and in between there is the DEV/VEN. Question is if both entries of the SUBSYS are referring to the ATI card or not...well, i really hope that someone could give some hint right now and tell me if to change both SUBSYS entries and also DEV/VEN... or just one entry of the SUBSYS....

    Tomas
     
  3. tsalat

    tsalat MDL Novice

    Apr 15, 2017
    8
    3
    0
    Well, did it :)

    In the first place, the XPS A2010 which is was modding has an MXM II slot but no entry about the MXM structure inside system BIOS. The reason why its not there is because they modified the video BIOS of the default ATI card to inject this while loading the vBIOS into the memory. Therefore there wasnt anything mentioned about the MXM interface in the DSDT as well, thats logicaly [​IMG] why it should be there in the first place [​IMG]

    Hence, i had to modify all these to make it work. One user injected the MXM structure inside the system BIOS according to the MXM specification 2.1. Wasnt so hard i believe but you need to place there appropriated callbacks for the BIOS to load these, this is something which i cant explain more to be honest. The MXM structure consists from information like the interfaces to which the card can push the signal (internal LCD and so on), maximum power, maximum cooling capabilities and so on. Right after the MXM structure, EDID for the LCD can be add if the LCD doesnt have EDID pins to identify himself. Well, this was the part which add absolutely new feature to the system BIOS and the new card started to work with 3 major problems:
    • The performance was set to throttling
    • The picture was ok without the drivers but bad, and i mean really like distorted signal, after installing the drivers
    • The fans were all the time at full speed (system and CPU)

    Now, the first two problems are a DSDT issue. Because no MXM structure was present before no was added to the description table. Problem is that the DSDT table has some length. IF you want to inject it back to the SBIOS it has to be the same size or smaller. I was lucky because the XPS has a on-board GPU as well. Well, i deleted it from the DSDT table to make room together with some OS entries. The on-board GPU is in this case never active, even with the default DSDT, and therefore no sense to keep it there. After making room i added the MXM structure according to the MXM specification, you can compare both *.dsl files which are attached to see the changes. The MXM structure has an buffer which is equal to the structure which was injected to the SBIOS. This solved the performance problem. To solve the LCD problem i added the _DDC method to the LCD and created an buffer with the EDID of the LCD. This solved the LCD problem.

    Now, the fans were a bit more tricky. The DSDT doesnt have any Thermalzone and neither embedded controllers inside. Therefore the DSDT cant be the problem. The SBIOS could have some white list but no error at all. After some time i realized that the Fintek microchip which should control the fans is not used for that but instead Intel QST is controlling it. Well, dammit [​IMG] The Intel ME is not a part of the SBIOS but, i was lucky here, i found tools which could manipulate with the QST config. I looked on the status and realized that while changing the GPU the address of the fan changed and therefore the QST was in an emergency mod and set all fans to 100%. Well, dumped the settings, removed the GPU sensor and its done [​IMG]

    i hope that this will help someone [​IMG] Tomas
     

    Attached Files: