Jump to content

[Guide] Mac OS X 10.9 Mavericks on HP Pavilion dv6700 Series


SARodrigues
 Share

1 post in this topic

Recommended Posts

Preface: While lurking the hackintosh forums, I've noticed quite a few posts about Mountain Lion on the old dv6700 but none about Mavericks. I'm not sure if that's simply because no one cares about these old laptops anymore since they're old and weak, or if all dv6700 space heaters went belly up. Anyway, as a thank you to the community here is a guide on how to successfully install and configure Mavericks in a HP Pavilion dv6700 Series, more exactly a dv6830es.

YcfP1HJ.png


DV6830es System Specifications:
CPU: Core 2 Duo T5500 1.83Ghz
RAM: Samsung 4GB DDR2
Graphics: Nvidia GeForce 8400M GS 256MB
HDD: Seagate Thin 500GB SSHD
Audio: Realtek High Definition Audio (ALC268)
Ethernet: Realtek RTL8101E/RTL8102E PCI-E
WiFi: Atheros AR5B97 (9287)
Card Reader: Ricoh 5-in-1
Bluetooth: HP (internal)
Camera: HP/Foxlink (internal)
Biometrics: Authentec (internal)
Misc: IR HP Remote Control

Note 1: Bluetooth, Camera and Fingerprint Sensor (Biometrics) did not came with this specific laptop. However, they're OEM and bundled with other dv6700 models.
Note 2: The Atheros WiFi card is not stock nor OEM, it was also a later adition thanks to a modded BIOS (no WiFi whitelist/blacklist). Either way, stock dv6700 will probably have either the Broadcom BCM94311MCAG or BCM94312MCG. The former should work out of the box while the latter will probably require a IONetworkingFamily plugin. Both Broadcom cards were previously tested with Mountain Lion. This laptop came with the latter rev GP3.


Working: Most hardware including (but not limited to) proper shutdown, sleep, auto-sleep, closing lid to sleep, speedstep (both cpu and gpu), graphics with QE/CI, SD cards, IR Remote Control, Ethernet, Wifi, Bluetooth, Battery Information, Brightness Control (via BIOS, not OS X), App Store, etc.

Not working: Restart, NumLock led and audio after sleep. However, audio can be re-activated by re-loading AppleHDA.kext.
Not tested: External monitors and HDMI (both video and audio). Fingerprint reader (it's detected though). Non-SD memory cards. DVD Burning.


Tools you need (for now):
myHack (3.3.1 used in this guide): http://myhack.sojugarden.com/guide/
Chameleon Bootloader (v2.2svn r2269 used in this guide): http://www.insanelymac.com/forum/files/file/59-chameleon-22-svn/
Kext Utility (2.5.1 used in this guide): http://www.osx86.net/files/file/3640-kext-utility-for-mavericks/
MaciASL (1.3 used in this guide): http://sourceforge.net/projects/maciasl/
Chameleon Wizard (4.2.3 used in this guide): http://www.osx86.net/files/file/3584-chameleon-wizard/


Kexts you need (for now):
FakeSMC.kext (w/Haswell CPU Sensor used): http://www.insanelymac.com/forum/files/file/107-fakesmc-w-haswell-cpu-sensor-for-1089/
VoodooPS2Controller.kext (2013-1205 used): https://code.google.com/p/os-x-voodoo-ps2-controller/downloads/list


--------------------

Preparing USB Installer

Using an existing OS X system, download OS X Mavericks from the App Store.

Still within OS X, prepare the USB drive using the myHack method. Open Disk Utility and create a Mac OS Extended (Journaled) partition. Make sure the Partition Map Scheme (Options) is set to Master Boot Record.

Run myHack and create a OS X 10.9 installer following myHack’s guide.
Click “No” when prompted “Would you like to patch installer for MBR support?”
Choose “Use Generic One” when prompted “Do you want to use the generic Extra that comes with myHack or specify your own?”

When myHack finishes its job, do not remove the flash drive yet. Open the flash drive’s /System/Library/Extensions and copy all NVDA* kexts to another location, either another flash drive or a folder at the root of the USB; you’ll need them later to setup the graphics. For now, delete them from the USB /System/Library/Extensions/. This will get you to the installation screen.


--------------------

Installing OS X Mavericks

Restart your laptop and boot from the USB (either change the boot order in the BIOS or press F9 during the BIOS post to select the drive/flash disk). No flags should be needed. It’ll take a bit to get to the installer screen, be patient.

When the message “To pair a Bluetooth Keyboard, turn it on and wait for your computer to connect to it.” appears, don’t panic. Pressing random spots of your keyboard with the palm of your hand should get you past that message. The bigger the number of keys you press, the better.

In the “Install OS X” screen, go to Utilities > Disk Utility. Partition your hard drive as you see fit. The OS X partition should be formatted as Mac OS Extended (Journaled) and the Partition Map Scheme (Options) should be set as GUID Partition Table. If you’ll be dual-booting, it’s a good idea to create your needed partitions here as to avoid misalignment in partitions due to a mixed GPT/MBR hard drive; it’ll save you some headaches later on.

1F0lakg.png

Example: I’ll be triple-booting OS X, Windows and Linux, so I created a 350.2GB HFS+ partition for OSX, a 122.2GBFAT partition for Windows, and another FAT partition in the remaining 27.23GB for Linux.

Once you are done with the partitioning, you can close Disk Utility and proceed with the OS X installation. Near the end of the installation, myHack will pop up with some questions.
Choose “Use Generic One” when prompted “Do you want to use the generic Extra that comes with myHack or specify your own?”
Click “No” when prompted if you want to remove ApplePolicyControl.kext, AppleTyMCEDriver.kext and AppleUpstreamUserClient.kext.

Upon the installer’s Restart, boot from the Flash Drive again (you don’t have a boot loader installed yet) but this time select your new OS X partition in the boot loader’s menu. Finish the installation. When you’re done, do NOT reboot yet.


--------------------

Post Install Essentials

Note: If you’re using a USB mouse, the USB port near the power jack may not work very weel for now. In that case, use one of the other two USB ports, they should be working properly.

Install the Chameleon boot loader
Install FakeSMC.kext and VoodooPS2Controller.kext
Using Chameleon Wizard, create a “MacBookPro (5.1) - Core 2 Duo” SMBios. Save it to /Extra.
Using Chameleon Wizard, set /Extra/org.chameleon.Boot.plist flags to match the ones on the following image.

EJ6azNl.png


Alternatively, you can edit it with TextEdit to match the following code:



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Kernel Flags</key>
	<string>-f</string>
	<key>Legacy Logo</key>
	<string>Yes</string>
	<key>RestartFix</key>
	<string>No</string>
	<key>Timeout</key>
	<string>5</string>
</dict>
</plist>

At this point you can remove the folder Extensions from /Extra, it will not be needed. Delete also myHack.kext from /System/Library/Extensions/ . Run Kext Utility and let it do its job. When it finishes, you can remove myHack’s USB installer and shutdown/restart the system. It should be able to boot by itself by now!


General DSDT Fixing and Patching

Note: You can use any ASL/DSDT editor you want, personally I like MaciASL. As usual, you should start with a clean DSDT extracted using either Windows or Linux. You can use AIDA64 to extract DSDT’s with Windows. As a last resort you can use MaciASL to extract the DSDT from OS X, but it is NOT recommended.

Add this DTGP method under the _WAK method:



Method (DTGP, 5, NotSerialized)
{
	If (LEqual (Arg0, Buffer (0x10)
	{
		/* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, 
		/* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
	}))
		{
		If (LEqual (Arg1, One))
		{
			If (LEqual (Arg2, Zero))
			{
				Store (Buffer (One)
				{
					0x03
				}, Arg4)
				Return (One)
			}

			If (LEqual (Arg2, One))
			{
				Return (One)
			}
		}
	}

	Store (Buffer (One)
	{
		0x00
	}, Arg4)
	Return (Zero)
}

--------------------

Under “\_SB.PCI0”, change USB1, USB3, USB4, USB5 devices’ names to UHC1, UHC3, UHC4, UHC5 respectively.

As an example, this:

Device (USB1)
{
	Name (_ADR, 0x001D0000)
	Method (_S3D, 0, NotSerialized)
	{
		Return (0x02)
	}

	Method (_S4D, 0, NotSerialized)
	{
		Return (0x02)
	}
}

Needs to turn into this:

Device (UHC1)
{
	Name (_ADR, 0x001D0000)
	Method (_S3D, 0, NotSerialized)
	{
		Return (0x02)
	}

	Method (_S4D, 0, NotSerialized)
	{
		Return (0x02)
	}
}

Now add the missing Device UHC2 just below UHC1:

Device (UHC2)
{
	Name (_ADR, 0x001D0001)
	Method (_S3D, 0, NotSerialized)
	{
		Return (0x02)
	}

	Method (_S4D, 0, NotSerialized)
	{
		Return (0x02)
	}
}

--------------------

Under "\_SB.PCI0.LPCB”, Device RTC remove IRQNoFlags from _CRS. Also, change the fourth parameter of IO to 0x02.

So, this:

Device (RTC)
{
	Name (_HID, EisaId ("PNP0B00"))
	Name (_CRS, ResourceTemplate ()
	{
		IO (Decode16,
			0x0070,             // Range Minimum
			0x0070,             // Range Maximum
			0x01,                 // Alignment
			0x08,                 // Length
		)
		IRQNoFlags ()
			{8}
	})
}

Turns into this:

Device (RTC)
{
	Name (_HID, EisaId ("PNP0B00"))
	Name (_CRS, ResourceTemplate ()
	{
		IO (Decode16,
			0x0070,             // Range Minimum
			0x0070,             // Range Maximum
			0x01,                 // Alignment
			0x02,                 // Length - Changed to 0x02
		)
	})
}

--------------------

Still under “\_SB.PCI0.LPCB” Remove IRQNoFlags also from Devices IPIC and TMR. Don’t touch the IO in these two.

--------------------

Still under “\_SB.PCI0.LPCB”, HPET Device, add IRQNoFlags to BUF0 Name.

So this:

Name (BUF0, ResourceTemplate ()
{
	Memory32Fixed (ReadOnly,
		0xFED00000,         // Address Base
		0x00000400,         // Address Length
	_Y14)
})

Turns into this:

Name (BUF0, ResourceTemplate ()
{
	Memory32Fixed (ReadOnly,
		0xFED00000,         // Address Base
		0x00000400,         // Address Length
	_Y14)
	IRQNoFlags ()
		{0}
	IRQNoFlags ()
		{8}
})

Ethernet

We’ll inject the Ethernet card info via DSDT. Add the following _DSM Method to “\_SB.PCI0.RP06.PXPX” Device:



Method (_DSM, 4, NotSerialized)
{
	Store (Package (0x0C)
	{
		"built-in", 
		Buffer (One)
		{
			0x01
		}, 
		"location", 
		Buffer (0x02)
		{
			"1"
		}, 
		"network-type", 
		Buffer (0x09)
		{
			"ethernet"
		}, 
		"revision-id", 
		Buffer (0x04)
		{
			0x05, 0x00, 0x00, 0x00
		}, 
		"model", 
		Buffer (0x2A)
		{
			"Realtek RTL8101E Fast Ethernet Controller"
		}, 
		"name", 
		Buffer (0x2A)
		{
			"Realtek RTL8101E Fast Ethernet Controller"
		}
	}, Local0)
	DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
	Return (Local0)
}

As an example, my full PXSX device now looks like this:

Device (PXSX)
{
	Name (_ADR, Zero)
	Method (_STA, 0, NotSerialized)
	{
		If (PDSX)
		{
			Return (0x0F)
		}
		Else
		{
			Return (Zero)
		}
	}

	Name (_PRW, Package (0x02)
	{
		0x09, 
		0x04
	})
	Method (_PSW, 1, NotSerialized)
	{
		Store (Arg0, WOL5)
	}

	// Ethernet Injection
	Method (_DSM, 4, NotSerialized)
	{
		Store (Package (0x0C)
		{
                                "built-in", 
                                Buffer (One)
                                {
                                     0x01
                                }, 
                                "location", 
                                Buffer (0x02)
                                {
                                    "1"
                                }, 
                                "network-type", 
                                Buffer (0x09)
                                {
                                    "ethernet"
                                }, 
                                "revision-id", 
                                Buffer (0x04)
                                {
                                     0x05, 0x00, 0x00, 0x00
                                }, 
                                "model", 
                                Buffer (0x2A)
                                {
                                    "Realtek RTL8101E Fast Ethernet Controller"
                                },
                                "name",
                                Buffer (0x2A)
                                {
                                    "Realtek RTL8101E Fast Ethernet Controller"    
                                } 
                                /*"name", 
                                Buffer (0x09)
                                {
                                    "ethernet"
                                }*/
		}, Local0)
		DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
		Return (Local0)
	}
}

Now install the provided IONetworkingFamily.kext.
After a reboot, the Ethernet Card should be up and running.


--------------------

Wifi

Now to get the WiFi working. For this Atheros card the DSDT injection alone does the job. Add the following _PRW Name and _DSM Method to the “\_SB.PCI0.RP01.PXSX” device:
 

Name (_PRW, Package (0x02)
{
	0x09, 
	0x04
})

Method (_DSM, 4, NotSerialized)
{
	Store (Package (0x0E)
	{
		"name", 
		"pci168c,30", 
		"device-id", 
		Unicode ("0"), 
		"IOName", 
		"pci168c,30", 
		"revision-id", 
		Buffer (0x04)
		{
			0x01, 0x00, 0x00, 0x00
		}, 
		"subsystem-id", 
		Buffer (0x04)
		{
			0x9F, 0x00, 0x00, 0x00
		}, 
		"subsystem-vendor-id", 
		Buffer (0x04)
		{
			0x6B, 0x10, 0x00, 0x00
		}, 
		"vendor-id", 
		Buffer (0x04)
		{
			0x8C, 0x16, 0x00, 0x00
		}
	}, Local0)
	DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
	Return (Local0)
}

At this point we already have both Ethernet and Wifi, so we’ll reset the network interfaces for good measure. Open a terminal and type:

sudo rm /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist

--------------------

Audio

We’ll inject Audio via DSDT now. This replaces the common HDAEnabler.kext. Add the following _DSM Method to the “\_SB.PCI0.HDEF” device:
 

Method (_DSM, 4, NotSerialized)
{
	Store (Package (0x08)
	{
		"built-in",
		Buffer (One)
		{
			0x01
		},
		"hda-gfx",
		Buffer (0x0A)
		{
			"onboard-1"
		},
		"layout-id", 
		Buffer (0x04)
		{
			0x0C, 0x00, 0x00, 0x00
		}, 
		"PinConfigurations", 
			Buffer (Zero) {}
		}, Local0)
	DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
	Return (Local0)
}

As an example, my full HDEF device now looks like this:

Device (HDEF)
{
	Name (_ADR, 0x001B0000)
	OperationRegion (HDAR, PCI_Config, 0x4C, 0x10)
	Field (HDAR, WordAcc, NoLock, Preserve)
	{
		DCKA,   1, 
			Offset (0x01), 
		DCKM,   1, 
			,   6, 
		DCKS,   1, 
			Offset (0x08), 
			,   15, 
		PMES,   1
	}
	// Inject sound chip config
	Method (_DSM, 4, NotSerialized)
	{
		Store (Package (0x08)
		{
			"built-in",
			Buffer (One)
			{
				0x01
			},
			"hda-gfx",
			Buffer (0x0A)
			{
				"onboard-1"
			},
			"layout-id", 
			Buffer (0x04)
			{
				0x0C, 0x00, 0x00, 0x00
			}, 
			"PinConfigurations", 
			Buffer (Zero) {}
		}, Local0)
		DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
		Return (Local0)
	}
}

Finally install the provided AppleHDA.kext.
After a reboot, the audio should be working.

--------------------

Card Reader

Install VoodooSDHC.kext. That's it, no DSDT edits.


Graphics

This is one of the main reasons I decided to make this guide. When I first tried to install Mavericks on this laptop, I could not reach the installation screen. I’d get the Apple logo with the spinning gray wheel, then the screen would flicker, then another gray screen (without the logo) with the spinning gray wheel again. It would not move from there. No boot flags where helping and booting with -v didn’t yield any useful messages.

The problem was eventually traced to the graphics, hence why removing the NV* kexts allowed us to do the installation and boot the system. Although I was already injecting graphics info via DSDT, turns out my NVCAP (commonly found around the forums) was wrong. Temporarily, removing all “@1” from the DSDT allowed me to get to the desktop. Eventually I dumped the VBIOS using AIDA64 and extracted this laptop’s NVCAP from it.

That being said, it’s time to fix the graphics it with proper DSDT injection and get QE/CI. Again, if this fails to you, NVCAP may be the issue. Try removing all “@1” from the DSDT injection (and never boot with GraphicsEnabler=Yes).


--------------------

Add this _DSM Method to the VGA Device under “\_SB.PCI0.PEGP”:


Method (_DSM, 4, NotSerialized)
{
	Store (Package (0x1C)
	{
		"@0,built-in", 
		Buffer (One)
		{
			0x01
		}, 
		"@0,compatible", 
		Buffer (0x0B)
		{
			"NVDA,NVMac"
		}, 
		"@0,device_type", 
		Buffer (0x08)
		{
			"display"
		}, 
		"@0,name", 
		Buffer (0x0F)
		{
			"NVDA,Display-A"
		}, 
		"@1,compatible", 
		Buffer (0x0B)
		{
			"NVDA,NVMac"
		}, 
		"@1,device_type", 
		Buffer (0x08)
		{
			"display"
		}, 
		"@1,name", 
		Buffer (0x0F)
		{
			"NVDA,Display-B"
		}, 
		"NVCAP", 
		Buffer (0x18)
		{
			// Extracted from VGA BIOS
			/* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
			/* 0008 */    0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
			/* 0010 */    0x00, 0x00, 0x00, 0x00
		}, 
		"NVPM", 
		Buffer (0x20)
		{
			/* 0000 */    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
			/* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
			/* 0010 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
			/* 0018 */    0x00, 0x00, 0x00, 0x00
		}, 
		"VRAM,totalsize", 
		Buffer (0x04)
		{
			0x00, 0x00, 0x00, 0x10
		}, 
		"device_type", 
		Buffer (0x0D)
		{
			"NVDA,Parent"
		}, 
		"model", 
		Buffer (0x18)
		{
			"Nvidia GeForce 8400M GS"
		}, 
		"rom-revision", 
		Buffer (0x26)
		{
			"nVidia GeForce 8400M GS OpenGL Engine"
		}, 
		"reg", 
		Buffer (0x78)
		{
			/* 0000 */    0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
			/* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
			/* 0010 */    0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x02, 
			/* 0018 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
			/* 0020 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
			/* 0028 */    0x14, 0x00, 0x01, 0x42, 0x00, 0x00, 0x00, 0x00, 
			/* 0030 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
			/* 0038 */    0x00, 0x00, 0x00, 0x10, 0x1C, 0x00, 0x01, 0x02, 
			/* 0040 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
			/* 0048 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 
			/* 0050 */    0x24, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 
			/* 0058 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
			/* 0060 */    0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x02, 
			/* 0068 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
			/* 0070 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
		}
	}, Local0)
	DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
	Return (Local0)
}

Before installing the previously removed NV* kexts, it’s better to test if the injection is working. Shutdown the laptop and boot again. Click the Apple logo, “About This Mac“, then “More Info…” If it shows up “Graphics Nvidia GeForce 8400M GS 256 MB” then we’re good to go. Install the NV* kexts you saved (and deleted) from myHack’s USB. (In case you forgot to save them, I've attached them to this post). Shutdown, boot again.

We should now have proper graphics with QE/CI enabled! To fix the purple colors, go to System Preferences, Displays, Color tab, choose Generic RGB Profile.


--------------------

Battery Information

This one is a bit messy and long. Follow this tutorial here: http://www.insanelymac.com/forum/topic/264597-hp-dvx-acpi-3x4x-battery-driver-106107/

Kexts.zip

NVDA.zip

  • Like 2
Link to comment
Share on other sites

 Share

×
×
  • Create New...