Jump to content

[Guide] Dell XPS 15 L502X (Early 2011) Snow Leopard Install (possibly L702x too)


wen1
 Share

3,030 posts in this topic

Recommended Posts

Well after a lot of do/don't/do/don't moments at the keyboard I've reinstalled 8.1 RTM in MBR mode so that Mint and Lion can continue to play nicely with each other. That said I've found a few interesting utilities (such as gptgpen, gdisk et al) that convert MBR partitions to GPT without any data loss; though I'd expect I'd need to reinstall Win & Mint as they are not "natively" installed with UEFI.

 

Other than that 8.1 seems pretty light and fast; a return to minimalism I hope (a la Cinnamon and Lion) unlike some of the more recent bloatware (Mavericks, Unity) but let's see how the registry mutates in the coming weeks :)

Link to comment
Share on other sites

Ive actually successfully used gptgen to convert mbr to uefi, but after this process the very moment of booting into Windows due to having Dells software installed it locked up the system immediately. I thought I can't be bother to hunt down the actual root of the issue (even though I knew what it was) so I've restored the True Image of my HDD that I had backed up prior to using gptgen.

 

Say, did it froze when using Fn+F2 and QS when you installed in UEFI first?

Link to comment
Share on other sites

@Blaatschaap is right - I use Grub2 on Linux so it speaks UEFI natively. The problem was actually Windows, or at least the Dell variant of it, because QuickSet *did* freeze on this. I suspect installing a vanilla UEFI 8.1 should work fine, but I'll leave this for another day.

Link to comment
Share on other sites

Nah, it will be a waste of time, or so it seems. The issue is about GNVS and PNVS GPIO regions for memory, the addresses in uefi drift somewhere, whilst being reserved and fixed with legacy boot protocol, so everything that is attempted read our written to these regions locks up the system.

Link to comment
Share on other sites

The QS functions as they are are pretty pointless. The "Mobility Center" button doesn't require anything, I've never actually used the Support Center" button. The software that comes with QuickSet is what's worth it .. the backlight control and battery control utilities, to be exact. Also the Wi-Fi toggle button (Windows 8 has it's own toggle switches now though, but still).

Link to comment
Share on other sites

Just out of interest, has anyone managed to successfully install Win UEFI into an existing Win partition just by converting MBR to GPT and installing in place without having to re-partition? Every time I try to install Win8.1 in UEFI mode it successfully finds all partitions (DellUtility, Recovery, Windows, Linux, OSX etc) but flatly refuses to install in any partition without reformatting.

 

@TW - on a related note, I suspect that if you convert MBR to GPT (and consequently lose boot capability on your win drive) but boot from Clover/Chameleon USB and point it to your Win drive it should load bootmgr or possibly even bootmgr.efi. Not exactly sure until I try it out again but I'm investigating if Win8UEFI will inherit any Clover-based optimisation such as FSB modding and DSDT patches under ACPI. If that's the case then we have an added reason why we should find a bullet-proof way to boot UEFI.

Link to comment
Share on other sites

Just out of interest, has anyone managed to successfully install Win UEFI into an existing Win partition just by converting MBR to GPT and installing in place without having to re-partition? Every time I try to install Win8.1 in UEFI mode it successfully finds all partitions (DellUtility, Recovery, Windows, Linux, OSX etc) but flatly refuses to install in any partition without reformatting.

 

@TW - on a related note, I suspect that if you convert MBR to GPT (and consequently lose boot capability on your win drive) but boot from Clover/Chameleon USB and point it to your Win drive it should load bootmgr or possibly even bootmgr.efi. Not exactly sure until I try it out again but I'm investigating if Win8UEFI will inherit any Clover-based optimisation such as FSB modding and DSDT patches under ACPI. If that's the case then we have an added reason why we should find a bullet-proof way to boot UEFI.

There wasn't a need to install Windows 8 UEFI when you convert from MBR to GPT, all that is required to boot Windows in UEFI are boot manager files on the System Reserved (essentially, ESP) partition after you push them from the original  x64DVD media. Your case is due to having OSX partition on the drive. See some posts back from blaatschaap about MBR issue and how to prevent Windows from bitching about it. 

 

If you convert MBR to GPT the bootmanager (the standard bcd legacy one) will be gone, since you are required to remove the System Reserved partition in the process, so Chemeleon won't do anything as it has no idea how to boot UEFI. Clover will detect bootmgr.efi and happily add a boot entry in GUI for it. Windows won't inherit anything from Clover no matter what is the boot mode, Legacy (there is a loophole for this Tiano firmware afterall that looks promissing) or UEFI - as soon as the bootmgr.efi is started no boot arguments are passed to it, EmuVariable is uninstalled and ACPIPatches are not applied. 

  else if ((Entry->LoaderType == OSTYPE_WIN) ||  (Entry->LoaderType == OSTYPE_WINEFI)) {
    
    if (gEmuVariableControl != NULL) {
      gEmuVariableControl->UninstallEmulation(gEmuVariableControl);
    }
    
    PatchACPI_OtherOS(L"Windows", FALSE);
    //PauseForKey(L"continue");
      
  }
Link to comment
Share on other sites

Ah - I've re-read @blaatschaap post again (properly). That means we're removing the MBR partition *entry*, not the actual partition per se. So as long as we have a backup partition table somewhere (eg: GPT) that references all partitions Win won't b**ch about OSX/Linux being around.

 

Hmm, so does this also mean we can selectively boot the same Win installation in Bios or UEFI mode depending if bootmgr or bootmgr.efi is loaded? This surely opens up a lot of experimentation possibilities... 

Link to comment
Share on other sites

That might work, but at this point you can't really do legacy boot as Tiano doesn't use this protocol at all, they are using something proprietary instead.

So the only way for you right now to call for legacy boot is to Exit clover which will jump to the next boot entry set in your Boot Order.

 

Not meant as a daily driver by the way!

Link to comment
Share on other sites

HD0: Primary Hard Drive has Win Recovery BCD. So when I boot via CloverUSB using your patched Clover the sequence is as follows:

 

UEFI -> Clover -> Exit -> Dell Logo Screen -> HD0: WinBCD (MBR)

 

So even if I had the USB in the drive, upon choosing the Exit option in Clover I get the above screenshot, then when pressing Enter the laptop reboots showing the Dell Logo and then goes straight to the HD even if I've set the BIOS to look at the USB port first. Hope this helps.

 

 

Also, back to the GPT/MBR discussion, when doing a gptgen and rebooting, the HD0 still has a 'Operation System not found' error even if I copied all the Win UEFI bootmgr/bootfmwgr efis to the recovery partition. However I've just realised that under MBR the 'active' or 'boot' flags would need to be set ahead of booting; what is the equivalent gpt tool/command to set this?

Link to comment
Share on other sites

UEFI -> Clover -> Exit -> Dell Logo Screen -> HD0: WinBCD (MBR)

So even if I had the USB in the drive, upon choosing the Exit option in Clover I get the above screenshot, then when pressing Enter the laptop reboots showing the Dell Logo and then goes straight to the HD even if I've set the BIOS to look at the USB port first. 

 

Also, back to the GPT/MBR discussion, when doing a gptgen and rebooting, the HD0 still has a 'Operation System not found' error even if I copied all the Win UEFI bootmgr/bootfmwgr efis to the recovery partition. However I've just realised that under MBR the 'active' or 'boot' flags would need to be set ahead of booting; what is the equivalent gpt tool/command to set this?

The thing is, it doesn't reboot, the Dell logo is already rendered and is just redrawn when BDS initiates. So essentially, if you had Clover on secondary HD (DVD-caddy) after exiting, it would proceed to boot the primary HD with your Legacy OSes, is that correct? Cause this is the legacy workaround currently in mind for Tiano. And it works the way I just described for me to boot HD0 with Windows 8 Legacy on it.

diskpart
list disk (assuming your disk is 0)
select disk 0
list partition
select partition 1
delete partition
create partition EFI size=100 offset=1
format quick fs=fat32 label="System"
assign letter=E
exit
bcdboot c:\windows /s e: /f UEFI (assuming your main windows partition is C:)
Link to comment
Share on other sites

Yes that is correct. Ingenious. Looking forward to seeing the finished product as it will indeed open up a variety of experimentation.

 

Thanks for the diskpart process. My current partition 1 (as formatted by Dell) is called DellUtility, and I believe is just a series of post-BIOS tests. According to that script I'll be deleting this partition and create the EFI partition instead, whilst also setting the BCD to point to c:\windows (in my case it's actually e:\windows as c: is DellUtility and d: is Recovery, again both Dell factory partitions).

Link to comment
Share on other sites

Just adding my two cents. I'd definitely avoid any legacy booting altogether (I have legacy boot completely disabled in unlocked 'BIOS') and use UEFI for everything. As for my post about "fixing" the MBR partition table to only have the 0xEE partition, it is specifically aimed at this kind of setup (that is, where you don't need any legacy booting). Of course, linux has no problem booting in legacy mode with gpt partition scheme, but other operating systems aren't so lenient.

 

PS. About the scalability and/or effectiveness of this... I have a quintuple boot set up on my XPS 15 now ;-) custom built ChromiumOS, OS X, Windows, Arch, Ubuntu all in perfect working order.

Link to comment
Share on other sites

Fair point blaatschaap, but what about where you need to migrate an existing MBR setup with Win8/Mint/Lion on a single hard drive without losing any of the existing data?

 

I'm concerned if I try to delete partition 1 to create an ESP just to boot WinUEFI I'll ruin my existing setup. With your method, when you delete the existing MBR partitions to create just one GPT partition, do you still have those partitions working under UEFI?

Link to comment
Share on other sites

In the meantime I'm still struggling to understand why it fails (freezes) when writing 0x0B (exactly thins!) into WCSE...

I've even made a debug device .. the first loop parses all of the stock values, going to the second loop method DBG3 stalls the system as soon a you specify 0x0B to be written int WCSE.

 

        OperationRegion (PNVS, SystemMemory, 0xBAE0C018, 0x100E)
        Field (PNVS, AnyAcc, NoLock, Preserve)
        {
            WCMD,   8, 
            TPID,   8, 
            WDID,   32, 
            DI00,   32768
        }
 
        Field (PNVS, AnyAcc, NoLock, Preserve)
        {
                    AccessAs (ByteAcc, 0x00), 
                    Offset (0x06), 
            WCCL,   16, 
            WCSE,   16, 
            WCA1,   32, 
            WCA2,   32, 
            WCA3,   32, 
            WCA4,   32, 
            WCR1,   32, 
            WCR2,   32, 
            WCR3,   32, 
            WCR4,   32
        }

 

 

 

DefinitionBlock ("SSDT-5.aml", "SSDT", 2, "DELL ", "PollDevc", 0x00001000)
{
    External (PHXI)
    External (WCA1)
    External (P8XH, MethodObj)    // 2 Arguments
    External (WFI2, IntObj)
    External (WFI1, IntObj)
    External (WCSE, IntObj)
    External (WCCL, IntObj)
    External (PSMX)
    External (QCKS)
    External (TPID)
    External (WCMD)
    External (WIFS)
    External (OVRS)
    External (\_SB_.PCI0, DeviceObj)
 
    Scope (\_SB.PCI0)
    {
        Device (PLLD)
        {
            Name (_HID, EisaId ("PLL0000"))
            Method (DBG1, 0, NotSerialized)
            {
                Return (Package (0x05)
                {
                    OVRS, 
                    WIFS, 
                    WCMD, 
                    TPID, 
                    QCKS
                })
            }
 
            Name (DBGA, Buffer (0x16) {})
            CreateDWordField (DBGA, Zero, IDX0)
            CreateDWordField (DBGA, 0x02, IDX1)
            CreateDWordField (DBGA, 0x04, IDX2)
            CreateDWordField (DBGA, 0x06, IDX3)
            Method (DBG2, 0, NotSerialized)
            {
                Acquire (PSMX, 0xFFFF)
                Store (WCCL, IDX0)
                Store (WCSE, IDX1)
                Store (WFI1, IDX2)
                Store (WFI2, IDX3)
                Release (PSMX)
                Return (DBGA)
            }
 
            Method (DBG3, 0, NotSerialized)
            {
                P8XH (Zero, 0x8C)
                Store (0xF2, WCA1)
                Acquire (PSMX, 0xFFFF)
                Store (0x0B, WCSE)
                Store (0x11, WCCL)
                Store (0xE0, WCMD)
                Store (0x57, TPID)
                Store (Zero, PHXI)
                Release (PSMX)
            }
        }
    }
}

You can safely write anything but 0x0B to it and it will work, but Wi-Fi won't get disabled. 

 

Register QCKS is always 0x00, so not only _Q8C, but _Q9F is also being called when Fn+F2 is pressed.

 

                    Method (_Q9F, 0, NotSerialized)
                    {
                        P8XH (Zero, 0x9F)
                        Store (Zero, Local0)
                        Store (Zero, Local1)
                        Store (Zero, Local2)
                        Store (Zero, Local3)
                        If (LEqual (QCKS, Zero))
                        {
                            Store (0xF2, WCA1)
                            FOWM (0x11, 0x0B)
                        }
 
                        Store (WFI1, Local0)
                        Store (WFI2, Local1)
                        Store (0x0100, Local2)
                        Store (One, Local3)
                        If (WIFS)
                        {
                            Store (0x06, ^^^^AMW0.INF0)
                            Store (Zero, ^^^^AMW0.INF1)
                            Store (0xE008, ^^^^AMW0.INF2)
                            Store (Local0, ^^^^AMW0.INF3)
                            Store (Local1, ^^^^AMW0.INF4)
                            Store (Local2, ^^^^AMW0.INF5)
                            Store (Local3, ^^^^AMW0.INF6)
                            If (LEqual (DMFG, Zero))
                            {
                                Notify (AMW0, 0xD0)
                            }
                        }
                    }
 
 
                    Method (_Q8C, 0, NotSerialized)
                    {
                        P8XH (Zero, 0x8C)
                        Store (Zero, Local0)
                        Store (Zero, Local1)
                        Store (Zero, Local2)
                        Store (Zero, Local3)
                        Store (0xF2, WCA1)
                        FOWM (0x11, 0x0B)
                        Store (WFI1, Local0)
                        Store (WFI2, Local1)
                        Store (0x0100, Local2)
                        Store (One, Local3)
                        If (WIFS)
                        {
                            Store (0x06, ^^^^AMW0.INF0)
                            Store (Zero, ^^^^AMW0.INF1)
                            Store (0xE008, ^^^^AMW0.INF2)
                            Store (Local0, ^^^^AMW0.INF3)
                            Store (Local1, ^^^^AMW0.INF4)
                            Store (Local2, ^^^^AMW0.INF5)
                            Store (Local3, ^^^^AMW0.INF6)
                            If (LEqual (DMFG, Zero))
                            {
                                Notify (AMW0, 0xD0)
                            }
                        }
                    }

 

I assumed these two being called at the same time cause the system to freeze, but no.. i've wiped the FOWM method to be blank (as in {}), and made the writes to the register external and unique, but it still causes the system to freeze.. After all the time spent - still no dice.

Link to comment
Share on other sites

I finally made the fan behave like it should have when changing thresholds in Thermal settings in BIOS..

It requires kozlek's FakeSMC+ACPISensors plugin with polling capabilities, which come in rev 798

Here's the ACPI table I've put together for monitoring and polling purposes:  https://github.com/Dolnor/Vostro-3450-Fan-Override

 

Please note, after manual mode has been set it will remain active during a soft reset. So if you reboot out of OSX your Fan won't work. It is advised to shut down the machine and then boot another OS if you so desire.

 

ACPISensor plugin has to be reconfigured in the following way:

		<key>ACPI Customizable Monitoring Plugin</key>
		<dict>
			<key>IOClass</key>
			<string>ACPISensors</string>
			<key>IOMatchCategory</key>
			<string>FakeSMCPlugin</string>
			<key>IONameMatch</key>
			<array>
				<string>MON0000</string>
			</array>
			<key>IOProbeScore</key>
			<integer>1000</integer>
			<key>IOProviderClass</key>
			<string>IOACPIPlatformDevice</string>
		</dict>
		<key>ACPI Debugging Plugin</key>
		<dict>
			<key>IOClass</key>
			<string>ACPIPoller</string>
			<key>IOMatchCategory</key>
			<string>FakeSMCPlugin</string>
			<key>IONameMatch</key>
			<array>
				<string>PLL0000</string>
			</array>
			<key>IOProbeScore</key>
			<integer>1000</integer>
			<key>IOProviderClass</key>
			<string>IOACPIPlatformDevice</string>
			<key>Platform Profile</key>
			<dict>
				<key>Default</key>
				<dict>
					<key>LoggingEnabled</key>
					<false/>
					<key>Methods</key>
					<array>
						<string>TAVG</string>
						<string>FCTL</string>
					</array>
					<key>PollingInterval</key>
					<integer>5000</integer>
					<key>PollingTimeout</key>
					<integer>0</integer>
				</dict>
			</dict>
		</dict>

 

 

Link to comment
Share on other sites

Fair point blaatschaap, but what about where you need to migrate an existing MBR setup with Win8/Mint/Lion on a single hard drive without losing any of the existing data?

 

I'm concerned if I try to delete partition 1 to create an ESP just to boot WinUEFI I'll ruin my existing setup. With your method, when you delete the existing MBR partitions to create just one GPT partition, do you still have those partitions working under UEFI?

When doing these things, I like to make full backups of the whole drive (from a linux live cd with dd - in case I {censored} up and need to roll back completely), as well as backups of individual partitions (with dd too), and note the exact number of blocks they take up on the drive. then, after repartitioning exactly how I like (re-using the noted sizes in blocks, potentially leaving space inbetween two consecutive ones if I want to grow any of them for example) and reloading the partition table, I dd the individual partitions' bits exactly back into their new place. Of course, windows won't like that it will have changed from MBR to GPT or vice versa, not much to be done about that.

 

PS. take care to align blocks to physical sector sizes (the easiest way to do this is to align every partition at 1MB offsets).

Link to comment
Share on other sites

 Share

×
×
  • Create New...