{"id":96,"date":"2013-02-28T17:49:46","date_gmt":"2013-02-28T05:49:46","guid":{"rendered":"http:\/\/collingwood.me.uk\/blog\/?p=96"},"modified":"2013-02-28T17:49:46","modified_gmt":"2013-02-28T05:49:46","slug":"sapphire-hd6670-on-os-x-10-7-5-enabling-the-hdmi-port","status":"publish","type":"post","link":"https:\/\/collingwood.me.uk\/blog\/index.php\/sapphire-hd6670-on-os-x-10-7-5-enabling-the-hdmi-port\/","title":{"rendered":"Sapphire HD6670 on OS X 10.7.5 – Enabling the HDMI port"},"content":{"rendered":"
One of the problems using the Apple drivers drivers is that they are produced for a very small subset of cards that Apple support. My particualr card has three ports, HDMI, DVI and VGA. While it’s possible to get this particular Sapphire HD6670 card mostly supported by setting it’s personality to Pithecia in the boot plist, there will be no output from the HDMI port, as the Pithecia personality is for a card with DisplayPort, DVI and VGA.<\/p>\n
So….some hacking is required……..<\/p>\n
1. Dump the personality out of the kext.<\/strong><\/span><\/p>\n To get a list of the supported personalities, you will need to dump them out of the kext. Download ati-personality.pl (Google it), and run it against \/System\/Library\/Extensions\/ATI6000Controller.kext\/Contents\/MacOS\/ATI6000Controller – the bit I’m interested in is as follows:<\/p>\n The three lines of hex detail the configuration of each port. Taking the first line, it can be broken down as follows::<\/p>\n Connector\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 00\u00a0 04\u00a0 00\u00a0 00 2. Dump the card BIOS<\/span><\/strong><\/p>\n You will need a dos boot USB drive (Google it), and atiflash.exe (Google it). boot off the dos drive, and run<\/p>\n 3. Get the card details out of the BIOS<\/strong><\/span><\/p>\n Boot back into OS X, and run redsock_bios_decoder agains the BIOS (Google it). The output of mine looks like this:<\/p>\n Run radion_bios_decode against the BIOS. The output of mine looks like this:<\/p>\n We now have all of the information we need.<\/p>\n 4. The Connector<\/span><\/strong><\/p>\n <\/strong>OK, so both BIOS decodes tell us that connector 0 is the HDMI connector. Looking at the Pithecia dump, we can see this is set to 00 04 00 00<\/p>\n But what does this mean?<\/p>\n Well, the connector type is defined as follows:<\/p>\n LVDS \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 02 00 00 00 So we can see that it’s set to Display Port. We want HDMI, so were going to use 00 08 00 00<\/p>\n 5. The ATY and Control Flags<\/span><\/strong><\/p>\n Again, looking at the Pithecia dump, we see that the control flags for connector 0 are set to 04 03 00 00.<\/p>\n What does this mean?<\/p>\n The ATY and control flags are defined as follows:<\/p>\n LVDS \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 40 00 00 00 or 00 01 00 00 Again, we can see that it’s set to Display Port. We want HDMI, so were going to use 04 02 00 00 as this is the option that enable HDMI audio<\/p>\n 6. The Features<\/span><\/strong><\/p>\n Again, looking at the Pithecia dump, we see that the features for connector 0 are set to 00 01.<\/p>\n What does this mean?<\/p>\n The features are defined as follows:<\/p>\n FIRST NUMBER<\/strong><\/p>\n FEATURE_USE_INTERNAL \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 01 SECOND NUMBER<\/strong><\/p>\n LVDS \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 09 As none of the options for the first number are relevant, we’ll use 00 for that, and )) for the second, as we’re setting it for HDMI, so we will use 00 00<\/p>\n 7. Unknown.<\/strong><\/span><\/p>\n It’s unknown. Who cares? leave it at 00 00<\/p>\n 8. Transmitter.<\/strong><\/span><\/p>\n Now we look at the decodes, and see this for connector 0:<\/p>\n Look at the bold text.<\/p>\n So we’ll use 12<\/p>\n 9. Encoder<\/strong><\/p>\n Again, we look at the decodes, and see this for connector 0:<\/p>\n Look at the bold text.<\/p>\n So we’ll use 04<\/p>\n 10. Hotplug ID.<\/strong><\/p>\n This must be a unique value for each connector. Leave it as it, 02<\/p>\n 11. Sense ID.<\/strong><\/p>\n Again, we look at the decodes, and see this for connector 0:<\/p>\n Look at the bold text.<\/p>\n So we’ll use 05<\/p>\n 12. Putting it all together<\/strong><\/span><\/p>\n So what we have is this:<\/p>\n Connector\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 00\u00a0 08\u00a0 00\u00a0 00 to give us:<\/p>\n 00\u00a0 08\u00a0 00\u00a0 00\u00a0 04\u00a0 02\u00a0 00\u00a0 00\u00a0 00\u00a0 01\u00a0 00\u00a0 00\u00a0 02\u00a0 04\u00a0 02\u00a0 05<\/p>\n 13. So how do I get this working exactly?<\/span><\/strong><\/p>\n Download HexEdit (Google it).<\/p>\n Backup \/System\/Library\/Extensions\/ATI6000Controller.kext<\/p>\n Open \/System\/Library\/Extensions\/ATI6000Controller.kext\/Contents\/MacOS\/ATI6000Controller with HexEdit<\/p>\n replace all instances of:<\/p>\n 00\u00a0 04\u00a0 00\u00a0 00\u00a0 04\u00a0 03\u00a0 00\u00a0 00\u00a0 00\u00a0 01\u00a0 00\u00a0 00\u00a0 21\u00a0 03\u00a0 02\u00a0 04<\/p>\n with:<\/p>\n 00\u00a0 08\u00a0 00\u00a0 00\u00a0 04\u00a0 02\u00a0 00\u00a0 00\u00a0 00\u00a0 01\u00a0 00\u00a0 00\u00a0 02\u00a0 04\u00a0 02\u00a0 05<\/p>\n Save your edited ATI6000Controller in a location that your are able to, as you won’t be able to save it in \/System\/Library\/Extensions\/ATI6000Controller.kext\/Contents\/MacOS\/<\/p>\n Open a terminal, and copy your saved ATI6000Controller to \/System\/Library\/Extensions\/ATI6000Controller.kext\/Contents\/MacOS\/ using sudo<\/p>\n touch \/System\/Library\/Extensions<\/p>\n Reboot.<\/p>\n","protected":false},"excerpt":{"rendered":" One of the problems using the Apple drivers drivers is that they are produced for a very small subset of cards that Apple support. My particualr card has three ports, HDMI, DVI and VGA. While it’s possible to get this … Continue reading Kext \/System\/Library\/Extensions\/ATI6000Controller.kext\/Contents\/MacOS\/ATI6000Controller\r\nPersonality: Pithecia\r\nConnectorInfo count in decimal: 3\r\nDisk offset in decimal 181984\r\n0000000\u00a0\u00a0\u00a0 00\u00a0 04\u00a0 00\u00a0 00\u00a0 04\u00a0 03\u00a0 00\u00a0 00\u00a0 00\u00a0 01\u00a0 00\u00a0 00\u00a0 21\u00a0 03\u00a0 02\u00a0 04\r\n0000010\u00a0\u00a0\u00a0 04\u00a0 00\u00a0 00\u00a0 00\u00a0 14\u00a0 02\u00a0 00\u00a0 00\u00a0 00\u00a0 01\u00a0 00\u00a0 00\u00a0 00\u00a0 00\u00a0 04\u00a0 03\r\n0000020\u00a0\u00a0\u00a0 10\u00a0 00\u00a0 00\u00a0 00\u00a0 10\u00a0 00\u00a0 00\u00a0 00\u00a0 00\u00a0 01\u00a0 00\u00a0 00\u00a0 00\u00a0 00\u00a0 00\u00a0 01\r\n0000030<\/pre>\n
\nATY, Control Flags\u00a0\u00a0 \u00a004\u00a0 03\u00a0 00\u00a0 00
\nFeatures\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 00\u00a0 01
\nUnknown\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 00\u00a0 00
\nTransmitter\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 21
\nEncoder\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 03
\nHotplug ID\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 02
\nSense ID\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 04<\/p>\natiflash -s o atirom.rom 20000<\/pre>\n
198X14A5.S23:\r\n\r\nAMD HD6770 2G\r\n\r\nSubsystem Vendor ID: 174b\r\n Subsystem ID: e198\r\nObject Header Structure Size: 203\r\nConnector Object Table Offset: 34\r\nRouter Object Table Offset: 0\r\nEncoder Object Table Offset: 9d\r\nDisplay Path Table Offset: 12\r\nConnector Object Id [12] which is [HDMI_TYPE_A]\r\n encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4)] linkb: false\r\nConnector Object Id [4] which is [DVI_D]\r\n encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x10 [duallink 0x0] enc 0x0)] linkb: false\r\nConnector Object Id [5] which is [VGA]\r\n encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false<\/pre>\n
ATOM BIOS Rom: \r\n\u00a0\u00a0 \u00a0SubsystemVendorID: 0x174b SubsystemID: 0xe198\r\n\u00a0\u00a0 \u00a0IOBaseAddress: 0x0000\r\n\u00a0\u00a0 \u00a0Filename: 198X14A5.S23\r\n\u00a0\u00a0 \u00a0BIOS Bootup Message: \r\nAMD HD6770 2G\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\r\nPCI ID: 1002:6758\r\nConnector at index 0\r\n\u00a0\u00a0 \u00a0Type [@offset 44274]: HDMI-A (11)\r\n\u00a0\u00a0 \u00a0Encoder [@offset 44278]: INTERNAL_UNIPHY2 (0x21)\r\n\u00a0\u00a0 \u00a0i2cid [@offset 44348]: 0x94, OSX senseid: 0x5\r\nConnector at index 1\r\n\u00a0\u00a0 \u00a0Type [@offset 44284]: DVI-D (3)\r\n\u00a0\u00a0 \u00a0Encoder [@offset 44288]: INTERNAL_UNIPHY (0x1e)\r\n\u00a0\u00a0 \u00a0i2cid [@offset 44375]: 0x92, OSX senseid: 0x3\r\nConnector at index 2\r\n\u00a0\u00a0 \u00a0Type [@offset 44294]: VGA (1)\r\n\u00a0\u00a0 \u00a0Encoder [@offset 44298]: INTERNAL_KLDSCP_DAC1 (0x15)\r\n\u00a0\u00a0 \u00a0i2cid [@offset 44402]: 0x90, OSX senseid: 0x1<\/pre>\n
\nDVI_DUAL \u00a0\u00a0 04 00 00 00
\nVGA \u00a0 \u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 10 00 00 00
\nSVIDEO \u00a0 \u00a0\u00a0\u00a0\u00a0 80 00 00 00
\nDVI \u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 00 02 00 00
\nDP \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 00 04 00 00
\nHDMI \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 00 08 00 00<\/p>\n
\nDVI_DUAL \u00a0\u00a0 16 00 00 00 or 14 00 00 00 or 14 02 00 00
\nVGA \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 10 00 00 00
\nS-Video \u00a0 \u00a0 \u00a0\u00a0 02 00 00 00
\nDVI-? \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 14 00 00 00 or 14 02 00 00 or 04 02 00 00 or 16 00 00 00
\nDisplayPort \u00a0 00 01 00 00 or 04 01 00 00 or 04 03 00 00 or 06 04 00 00 or 00 04 00 00
\nHDMI \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 00 02 00 00 or 04 02 00 00<\/p>\n
\nFEATURE_USE_RGB_ON_YUV \u00a0 \u00a0 \u00a0 \u00a0\u00a0 04
\nFEATURE_USE_BACKLIGHT \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0 08
\nFEATURE_BACKLIGHT_INVERTED \u00a0\u00a0 10
\nFEATURE_USE_CLAMSHELL \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 20<\/p>\n
\nDVI_DUAL \u00a0\u00a0 00
\nVGA \u00a0 \u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 00
\nSVIDEO \u00a0 \u00a0\u00a0\u00a0\u00a0 04
\nDVI \u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 00
\nDP \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 00
\nHDMI \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 00<\/p>\nencoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12<\/strong> [duallink 0x2] enc 0x4)] linkb: false<\/pre>\n
encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4<\/strong>)] linkb: false<\/pre>\n
i2cid [@offset 44348]: 0x94, OSX senseid: 0x5<\/strong><\/pre>\n
\nATY, Control Flags\u00a0\u00a0 \u00a004\u00a0 02\u00a0 00\u00a0 00
\nFeatures\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 00\u00a0 01
\nUnknown\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 00\u00a0 00
\nTransmitter\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 02
\nEncoder\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 04
\nHotplug ID\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 02
\nSense ID\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 05<\/p>\n