crazybirdy 发表于 2011-3-16 07:12:11

发图庆祝ATI Mobility HD 4330 终于开QE/CI 及ATIFramebuffer修改解说

本帖最后由 crazybirdy 于 2013-6-7 09:50 编辑

更新:免改ATIFramebuffer了,直接用boot或dsdt或ATY_Init.kext识别驱动显卡即可。{:5_294:}

   分辨率高于1366x768的,貌似未成功。可自行修改dsdt加入DualLink试试。
   Lion最新驱动方式,
   免改ATIFramebuffer了,直接用boot或dsdt或ATY_Init.kext识别驱动显卡即可。

新方法:免改ATIFramebuffer,VGA可用,DVD退出,PPT不可拨,国际象棋可用。
旧方法:要改ATIFramebuffer,VGA可用,DVD可用,PPT可播放,国际象棋可用(10.6.7 update kext)。

在Snow雪豹的驱动,
可以用 10.6.7 update 的kext + 10.6.8~Lion的kext一起使用,即可开启QE,国际象棋不死机。

新方法 安装:
一、雪豹开启QE安装使用的kext
  Lion(10.6.8 update 或 Lion 的kext )
    原始ATI4600Controller.kext (加入ID)
    原始ATIFramebuffer.kext
    原始ATISupport.kext
  Snow(10.6.7 update 的kext)
    原始ATIRadeonX2000.kext(确认有ID)
    原始ATIRadeonX2000GA.plugin
    原始ATIRadeonX2000GLDriver.bundle
    原始ATIRadeonX2000VADriver.bundle

  ATI的10.6.7.update的ATIRadeonX2000.kext +10.6.8及10.7.0的kext下载
    http://dl.dbank.com/c0u9bxsunp

二、只要将4330的ID ( 0x95521002 ) 加入到ATI4600Controller.kext的Info.plist。
  (复制/S/L/E/ATI4600Controller.kext到桌面)ATI4600Controller.kext/Contents/Info.plist
    <key>IOPCIMatch</key>
    <string>0x95521002 0x94881002</string>

  须确认ATIRadeonX2000.kext/Contents/Info.plist有原生ID的支持。
    <key>IOPCIMatch</key>
    <string>0x95521002 0x95531002 0x94801002</string>

  自己手动修改显示名称ATI4600Controller.kext/Contents/MacOS/ATI4600Controller(修改两处)
  

三、显卡识别(三选一 即可)采用Lion及10.6.8没有的Peregrine,会自动采用ATYRadeonFramebuffer。

 1. 采用直接安装修改过的变色龙boot pkg安装包即可。(修改内容过于复杂,不说明了)
  <key>GraphicsEnabler</key>
  <string>Yes</string>
  适用笔记本ATI 4xxx系列移动版显卡,支持FaceTime, iCloud, 10.8修改版 wowpc.iso使用方法
  
  

 2. 采用dsdt 识别驱动,请看Lion区的4330m说明帖。

 3. 安装ATY_Init.kext。安装EE或SLE皆可。
  4330m为0x10029552
  
  以下皆为0x10029553
  
  
  
  
  以下为0x10029480
  

四、直接使用Kext Wizard安装kext,及修复权限、重建cache、mkext等,即可重新开机开启QE/CI。
  还无法驱动的,将myfix复制到/usr/sbin/myfix后,终端执行 myfix 键入密码选磁盘修复即可。
  
  
完全不用改kext的ATIFramebuffer,以下内文可以完全忽略不看了
旧方法:适用笔记本ATI 4xxx系列移动版显卡,支持FaceTime, iCloud, 10.8修改版 
  

原以为无解的 ATI 4330m 显卡,终于开启QE/CI了 {:5_274:}

{:5_298:}使用方法请参照下面...有点复杂..不过一定可行..其他开不了的ATI显卡
(Dong 的 RadeonHD.kext 有支持的话),可以试试看,应该可通用这个方法

全部使用10.6.3 retail update 10.6.7 的ATI kext (5F下载) (本文以我的4330为例)。
比较复杂,看得懂的人,可以顺利开QE/CI,看不懂的人,我也没办法了!

已知成功及Q/A看5楼,千万不要问我,你的显卡行不行驱动,因为我也不知道。

参考mucha  http://www.insanelymac.com/forum/index.php?showtopic=252061

内文
一、提取显卡rom及接口资料
二、使用redsock_bios_decoder取显卡接口资料
三、修改ATIFramebuffer的framebuffer参数
四、将4330的ID加入到ATI4600Controller.kext的Info.plist
五、安装Mac版变色龙并替换4330专用的r748版Kabyl boot
六、内置显示器考虑是否再加入EDID试试看
附注一、personality的结构说明




一、提取显卡rom,并提取rom的接口资料。
 1.在XP用GPU-Z或EVEREST.Ultimate.v5.0取显卡rom,存为1002_9552.rom。
  rom被锁的,可在Mac使用Dong的VBIOS.zip(32位)取显卡rom。sudo bash
<键入密码>
chown -R root:wheel RadeonPCI.kext
chmod -R 755 RadeonPCI.kext
kextload RadeonPCI.kext
./RadeonDump -d
exit2.在Mac用radeon_bios_decode.0.2.zip(有问题看5楼Q1)提取rom的接口资料。
  在终端执行$   ./radeon_bios_decode < 1002_9552.rom > connector.txt
  得到connector.txt 内容如下(略过部分资料)

  ATOM BIOS Rom:
  .
  PCI ID: 1002:9552
  Connector at index 0
   Type : LVDS (7)
   Encoder : INTERNAL_UNIPHY2 (0x21)
   i2cid: 0x96, OSX senseid: 0x7
  Connector at index 1
   Type : VGA (1)
   Encoder : INTERNAL_KLDSCP_DAC1 (0x15)
   i2cid: 0x90, OSX senseid: 0x1
  Connector at index 2
   Type : HDMI-A (11)
    Encoder : INTERNAL_UNIPHY (0x1e)
   i2cid: 0x91, OSX senseid: 0x2

  计算式 HotPlugID + SenseLine = (i2cid & 0xf) +1
  HotPlugID = index 0 =Port 0 =00 =LVDS    :  SenseLine = (96 & 0xf)+1 = 07
  HotPlugID = index 1 =Port 1 =01 =VGA     :  SenseLine = (90 & 0xf)+1 = 01
  HotPlugID = index 2 =Port 2 =02 =HDMI-A: SenseLine = (91 & 0xf)+1 = 02


二、使用redsock_bios_decoder取显卡接口资料(原始Dong的RadeonHD.kext,字数问题,请参考7F。)
 1.終端$  ./redsock_bios_decoder < 1002_9552.rom > redsock.txt
  得到redsock.txt文件。

  Subsystem Vendor ID: 1002
         Subsystem ID: 9552
  ..
  Connector Object Id which is
          encoder obj id which is 0x12 enc 0x4)]
  Connector Object Id which is
          encoder obj id which is 0x00 enc 0x10?)]
  Connector Object Id which is
          encoder obj id which is 0x10 enc 0x0)]

 2.参考,附注一、personality的结构说明,得到以下videocard routing 数值:
  LVDS  Transmitter = 0x12  Encoder = 0x04
  VGA   Transmitter = 0x00  Encoder = 0x10
  HDMI  Transmitter = 0x10  Encoder = 0x00
  其中,VGA找不到Transmitter,可以直接试用0x00, 0x10两种,找不到Encoder的,可以直接试用0x00。
  用7F的RadeonHD.kext取得的Encoder比较准确,如无法驱动,LVDS改用0x00, 0x01尝试看看吧。

 3.经过,附注一、personality的结构说明,推算得到正确的personalities :
  配合前面的Transmitter,Encoder,HotPlugID及SenseLine列入推算。
  02 00 00 00 40 00 00 00 09 01 00 00 12 04 00 07  LVDS
  10 00 00 00 10 00 00 00 00 01 00 00 00 10 01 01  VGA
  00 08 00 00 00 02 00 00 00 01 00 00 10 00 02 02  HDMI

  我使用Shrike参数,在内显LVDS和外接VGA都可以开启QE/CI相关特效。


三、在Mac用HexEdit软件修改ATIFramebuffer的framebuffer参数,以Shrike为例。
  (复制/S/L/E/ATIFramebuffer.kext到桌面)ATIFramebuffer.kext/Contents/MacOS/ATIFramebuffer
  10.6.8 及 10.7.x 已变更位置。请修改ATI4600Controller.kext。其他显卡修改ATIxx00Controller.kext。
 1.调整Acer 4810TZG参数为一排数字
  02 00 00 00 40 00 00 00 09 01 00 00 12 04 00 07  LVDS
  10 00 00 00 10 00 00 00 00 01 00 00 00 10 01 01  VGA
  00 08 00 00 00 02 00 00 00 01 00 00 10 00 02 02  HDMI(无第三接口的,请随意引用,并设置port 02 )
  改为一排数字
02 00 00 00 40 00 00 00 09 01 00 00 12 04 00 07 10 00 00 00 10 00 00 00 00 01 00 00 00 10 01 01 00 08 00 00 00 02 00 00 00 01 00 00 10 00 02 02
 2.调整原始Shrike参数为一排数字(参考附件Birds_FB.rtf)
  02 00 00 00 40 00 00 00 09 01 00 00 02 01 00 03
  02 00 00 00 00 01 00 00 09 01 00 00 20 01 02 02
  00 04 00 00 04 03 00 00 00 01 00 00 10 00 01 01
  改为一排数字
02 00 00 00 40 00 00 00 09 01 00 00 02 01 00 03 02 00 00 00 00 01 00 00 09 01 00 00 20 01 02 02 00 04 00 00 04 03 00 00 00 01 00 00 10 00 01 01
 3.利用HexEdit软件(附件)替换Shrike参数(一排数字)为Acer 4810TZG的参数(一排数字),共两处,第一个是
  x86_64用 ,第二个是i386用。
  

  10.6.8 及 10.7.x 已变更位置。请修改ATI4600Controller.kext。其他显卡修改ATIxx00Controller.kext。
  旧版如下
  Radeon HD 3XXX以前,请选用Sharks的framebuffer参数。
  Radeon HD 4XXX,请选用Birds的framebuffer参数。
  Radeon HD 5XXX ,请选用Monkeys的framebuffer参数。
  可直接取用Birds_FB、Monkeys_FB及Sharks_FB的字串替换。

四、将4330的ID ( 0x95521002 ) 加入到ATI4600Controller.kext的Info.plist。
  (复制/S/L/E/ATI4600Controller.kext到桌面)ATI4600Controller.kext/Contents/Info.plist
            <key>IOPCIMatch</key>
            <string>0x95521002 0x94881002</string>
  直接使用 Kext Wizard 安装kext,及修复权限、重建cache、mkext等。其他ATI必备kext请看 5 楼。
  
  全部ATI的10.6.7.update的kext驱动下载 ATI.kexts.10.6.7(2011.3.3).zip
  http://dl.dbank.com/c0ltnq79ub

  全部使用update的10.6.7的ATI的kexts如下
  修改ATI4600Controller.kext
  修改ATIFramebuffer.kext
  原始ATIRadeonX2000.kext
  原始ATIRadeonX2000GA.plugin
  原始ATIRadeonX2000GLDriver.bundle
  原始ATIRadeonX2000VADriver.bundle
  原始ATISupport.kext

  须确认ATIRadeonX2000.kext/Contents/Info.plist有加入ID的支持。
  <key>IOPCIMatch</key>
  <string>0x95521002 0x95531002 0x94801002</string>

五、安装Mac版变色龙Rev 780 (安装方法不在本文讨论),附件安装4330 (0x10029552) 专用的pkg boot即可,
  直接在/Extra/com.apple.Boot.plist内容加入下面设置即可。
      <key>GraphicsEnabler</key>
      <string>Yes</string>
 想自行编译trunk boot的,请自行按以下步骤编译即可 。
 1.想自行编译trunk boot的,可在Mac下载源码。( 2 选 1 )
  a. 780版之前(版本一)
    终端$    svn co -r 780 http://forge.voodooprojects.org/svn/chameleon/trunk/
  b. 最新版(版本二)
    终端$    svn co http://forge.voodooprojects.org/svn/chameleon/trunk/
 2.安装/Mac OS X Install DVD/Optional Installs.localized/Xcode.mpkg
    ( Rev 881版 起,才可在 Lion 用 Xcode 4.2 Lion专用版 编译boot )
 3.修改加入trunk/i386/libsaio/ati.c 如下,有两种不同版本(只会遇到一种)

  版本一:
      第一段
      { 0x10029552,  "ATI Mobility Radeon HD 4330"}  ,
      第二段
      { 0x10029552,  "Shrike"}  ,
  版本二:
{ 0x9552, 0x00000000, CHIP_FAMILY_RV710, "ATI Mobility Radeon HD 4330", kShrike },

  终端执行$   cd trunk        进入trunk文件夹(内有Makefile)
  终端trunk$   make    编译得到trunk/sym/i386/boot引导开机文件。  
  替换Mac硬盘 / 的boot即可。


 
顺利的话,重新开机后,就可以开启显卡QE/CI特效了。

  无法开QE的话,要boot及ATIFramebuffer同时逐一测试各个相同framebuffer参数了。

六、内置显示器,有黑屏或花屏的,可考虑是否再加入EDID试试看,我有加入EDID,但是有加或
  没加,貌似都没影响。

附注一、personality的结构说明(仅部份翻译)

A- personality结构:

原文用Shrike当作framebuffer来说明,默认有3个personalities,每个connector分别为: port0, port1, port2.

02 00 00 00 40 00 00 00 09 01 00 00 02 01 00 03
02 00 00 00 00 01 00 00 09 01 00 00 20 01 02 02
00 04 00 00 04 03 00 00 00 01 00 00 10 00 01 01

第一个port 0为例 :

02 00 00 00 40 00 00 00 09 01 00 00 02 01 00 03

分为8组:

02 00 00 00 - 40 00 00 00 - 09 01 - 00 00 - 02 - 01 - 00 - 03

然后将byte位元互换

1- ConnectorType : 02 00 00 00 > 0x00000002 +++
2- ATY,ControlFlags : 40 00 00 00 > 0x00000040 - - -
3- Features : 09 01 > 0x0109 - - -
4- ?? : 00 00 > 0x0000 - - -
5- Transmitter : 02 > 0x02 +++
6- Encoder : 01 > 0x01 +++
7- HotplugID : 00 > 0x00 - - -
8- SenseID : 03 > 0x03 +++

- - - > Value easy to guess (almost constant for the same connector type)
+++ > Value to search, incorrect value == not working personality

以上8组于下面详细说明 (部份为猜测的)

1- ConnectorType;

/* 4 byte ,由radeondump取得 */
#define CONNECTORTYPE_LVDS 0x00000002
#define CONNECTORTYPE_DVI 0x00000004
#define CONNECTORTYPE_VGA 0x00000010
#define CONNECTORTYPE_S-V 0x00000080
#define CONNECTORTYPE_DP 0x00000400
#define CONNECTORTYPE_HDMI 0x00000800

2- ATY,ControlFlags;

/* 4 byte 与 ioreg 的值相同: ATY,ControlFlags. 各连接器的hardcoded
可以一个一个试到可用为止
0x0002 : LVDS > ControlFlag : 0x0040 / 0x0100
0x0004 : DVI-? > ControlFlag : 0x0016 - 0x0014 / 0x214
0x0010 : VGA > ControlFlag : 0x0010
0x0080 : S-Video > ControlFlag : 0x0002
0x0200 : DVI-? > ControlFlag : 0x0014 / 0x0214 - 0x0204
0x0400 : DisplayPort > ControlFlag : 0x0100 - 0x0104 - 0x0304 / 0x0604 - 0x0400
0x0800 : HDMI > ControlFlag : 0x0200
0x1000 : DVI-? > ControlFlag : 0x0016
*/

3-Features;

/* Features byte 0 , 例如 LVDS screen 几乎都是 0x09 = 0x01 + 0x08 > Internal + Backlight */
#define FEATURE_USE_INTERNAL 0x01
#define FEATURE_USE_RGB_ON_YUV 0x04
#define FEATURE_USE_BACKLIGHT 0x08
#define FEATURE_BACKLIGHT_INVERTED 0x10
#define FEATURE_USE_CLAMSHELL 0x20

/* 1 byte, 各连接器的hardcoded
0x0002 : LVDS > Features : 0x09
0x0004 : DVI-? > Features : 0x00
0x0010 : VGA > Features : 0x00
0x0080 : S-Video > Features : 0x04
0x0200 : DVI-? > Features : 0x00
0x0400 : DisplayPort > Features : 0x00
0x0800 : HDMI > Features : 0x00
0x1000 : DVI-? > Features : 0x00
*/

/* Features byte 1 , no idea ???*/

4- Unkown 未知;

5- Transmitter;

/* 用Dong RadeonHD的debug参数开机,由dmesg取得 */
/* Transmitter Bits 0-3 (TransmitterID) */
#define UNIPHY 0x00
#define UNIPHY_1 0x01
#define UNIPHY_2 0x02

/* Transmitter Bits 4-7 (LinkID) */
#define DUAL_LINK 0x00 // LINK_A + LINK_B
#define LINK_A 0x10
#define LINK_B 0x20

/* Transmitter byte */
#define UNIPHY_A 0x10 // = UNIPHY:LINK_A
#define UNIPHY_B 0x20 // = UNIPHY:LINK_B
#define UNIPHY_AB 0x00 // = UNIPHY:DUAL_LINK
#define UNIPHY_C 0x11 // = UNIPHY_1:LINK_A
#define UNIPHY_D 0x21 // = UNIPHY_1:LINK_B
#define UNIPHY_CD 0x01 // = UNIPHY_1:DUAL_LINK
#define UNIPHY_E 0x12 // = UNIPHY_2:LINK_A
#define UNIPHY_F 0x22 // = UNIPHY_2:LINK_B
#define UNIPHY_EF 0x02 // = UNIPHY_2:DUAL_LINK
#define DACA 0x00
#define DACB 0x10

6- Encoder;

/* 同上面的dmesg取得 for R8XX architecture,共有06组Digital Encoder: DIG_1 > DIG_6*/
/* Encoder Bits 0-3 (DIG_ID : Digital) */
#define DIG_1 0x00 // = DIG_A
#define DIG_2 0x01 // = DIG_B
#define DIG_3 0x02 // = DIG_C Only for Radeon HD 5XXX Series and above
#define DIG_4 0x03 // = DIG_D Only for Radeon HD 5XXX Series and above
#define DIG_5 0x04 // = DIG_E Only for Radeon HD 5XXX Series and above
#define DIG_6 0x05 // = DIG_F Only for Radeon HD 5XXX Series and above

/* Encoder Bits 4-7 (DAC_ID : Analog) */
#define DAC 0x10

7- HotplugID;

/* 4 bits 每个 port 唯一的 id,经测试出 port0 = 0 , port1 = 1 , port2 = 2  */

8- SenseID;

/* SenseLine = (i2cid & 0xf) +1 , 由radeondump取得i2cid */
Bits 0-3: Sense Line
Bit 4: Use hw i2c flag

因字数问题,原文实作请看五楼

提取 Encoder & Transmitter ID 的值:

/*
* DIG Encoder/Transmitter Setup
*
* DCE 3.0/3.1 (RV6XX, Radeon HD 3XXX Series and older)
* - 2 DIG transmitter blocks. UNIPHY (links A and B ) and LVTMA.
* Supports up to 3 digital outputs
* - 2 DIG encoder blocks.
* DIG1 can drive UNIPHY link A or link B
* DIG2 can drive UNIPHY link B or LVTMA
*
* DCE 3.2 (RV7XX, Radeon HD 4XXX Series)
* - 3 DIG transmitter blocks. UNIPHY0/1/2 (links A and B ).
* Supports up to 5 digital outputs
* - 2 DIG encoder blocks.
* DIG1/2 can drive UNIPHY0/1/2 link A or link B
*
* DCE 4.0 (RV8XX, Radeon HD 5XXX Series)
* - 3 DIG transmitter blocks UNPHY0/1/2 (links A and B ).
* Supports up to 6 digital outputs
* - 6 DIG encoder blocks.
* - DIG to PHY mapping is hardcoded
* DIG1 drives UNIPHY0 link A, A+B
* DIG2 drives UNIPHY0 link B
* DIG3 drives UNIPHY1 link A, A+B
* DIG4 drives UNIPHY1 link B
* DIG5 drives UNIPHY2 link A, A+B
* DIG6 drives UNIPHY2 link B
*
* Routing
* crtc -> dig encoder -> UNIPHY/LVTMA (1 or 2 links)
* 例如:
* crtc0 -> dig2 -> LVTMA links A+B -> TMDS/HDMI
* crtc1 -> dig1 -> UNIPHY0 link B -> DP
* crtc0 -> dig1 -> UNIPHY2 link A -> LVDS
* crtc1 -> dig2 -> UNIPHY1 link B+A -> TMDS/HDMI
*/
已改

以下皆为0x10029553





上图看真相.....Shift+Alt+3 截图

zidaneno5 发表于 2011-3-16 07:24:22

本帖最后由 zidaneno5 于 2011-3-16 07:38 编辑

不错哦~~~~,我把how to 贴过来 呵呵

pengbangbo 发表于 2011-3-16 08:17:21

本帖最后由 pengbangbo 于 2011-3-16 08:19 编辑

使用framebuffer:Peregrine
{:5_279:}还是不明白啊…………还有就是显卡显示的不是4600了?

ヤo逸軒oο 发表于 2011-3-16 08:29:11

楼主是内置显示器?还是外接VGA?

crazybirdy 发表于 2011-3-16 08:31:43

本帖最后由 crazybirdy 于 2012-8-9 11:11 编辑

f以下实作

B- 提取 ConnectorType, ATY,ControlFlags,Features, HotplugId 及 SenseLineId 的值:

工具 :
1- 显卡rom (用 everest 存为 1002_9480.rom ) ,
2- radeondump
开启终端建入 ./radeondump < 1002_9480.rom > connector.txt
得到以下资讯 :

connector.txt 原文案例
--------------------------------
Desktop Mucha$ ./radeondump < 1002_9480.rom
ATOM BIOS Rom:
SubsystemVendorID: 0x103c SubsystemID: 0x3629
IOBaseAddress: 0x7000
Filename: br33507.001
BIOS Bootup Message:
HP_Quanta_Jones_Cujo_M96M_DDR3 M96 DDR3 128bit 550e/667m

Connector at index 0 type: LVDS (7)
Connector's i2cid: 96
Connector at index 1 type: VGA (1)
Connector's i2cid: 95
Connector at index 2 type: HDMI-A (11)
Connector's i2cid: 90

计算式SenseLine = (i2cid & 0xf) +1
LVDS    : SenseLine = (96&0xf)+1 = 7
VGA     :  SenseLine = (95&0xf)+1 = 6
HDMI-A: SenseLine = (90&0xf)+1 = 1

代表意义:

port0 > LVDS=0x00000002 - ControlFlag=0x0040 - Features = 0x09-----HotplugId=0x00 - i2cid=96 > SenseLine = 0x07

port1 > VGA =0x00000010 - ControlFlag=0x0010 - Features = 0x00 -----HotplugId=0x01 - i2cid=95 > SenseLine = 0x06

port2 > HDMI=0x00000800 - ControlFlag=0x0200 - Features = 0x00 -----HotplugId=0x02 - i2cid=90 > SenseLine = 0x01

C- 提取 Encoder & Transmitter ID 的值:

参考网站相关资讯 : "http://www.botchco.com/agd5f/?p=51"
及一些 linux drivers 的 Encoder-Transmitter Routing 规范
"http://lxr.free-electrons.com/source/drivers/gpu/drm/radeon/radeon_encoders.c"

/*
* DIG Encoder/Transmitter Setup
*
* DCE 3.0/3.1 (RV6XX, Radeon HD 3XXX Series and older)
* - 2 DIG transmitter blocks. UNIPHY (links A and B ) and LVTMA.
* Supports up to 3 digital outputs
* - 2 DIG encoder blocks.
* DIG1 can drive UNIPHY link A or link B
* DIG2 can drive UNIPHY link B or LVTMA
*
* DCE 3.2 (RV7XX, Radeon HD 4XXX Series)
* - 3 DIG transmitter blocks. UNIPHY0/1/2 (links A and B ).
* Supports up to 5 digital outputs
* - 2 DIG encoder blocks.
* DIG1/2 can drive UNIPHY0/1/2 link A or link B
*
* DCE 4.0 (RV8XX, Radeon HD 5XXX Series)
* - 3 DIG transmitter blocks UNPHY0/1/2 (links A and B ).
* Supports up to 6 digital outputs
* - 6 DIG encoder blocks.
* - DIG to PHY mapping is hardcoded
* DIG1 drives UNIPHY0 link A, A+B
* DIG2 drives UNIPHY0 link B
* DIG3 drives UNIPHY1 link A, A+B
* DIG4 drives UNIPHY1 link B
* DIG5 drives UNIPHY2 link A, A+B
* DIG6 drives UNIPHY2 link B
*
* Routing
* crtc -> dig encoder -> UNIPHY/LVTMA (1 or 2 links)
* 例如:
* crtc0 -> dig2 -> LVTMA links A+B -> TMDS/HDMI
* crtc1 -> dig1 -> UNIPHY0 link B -> DP
* crtc0 -> dig1 -> UNIPHY2 link A -> LVDS
* crtc1 -> dig2 -> UNIPHY1 link B+A -> TMDS/HDMI
*/

Encoder.txt 原文案例
--------------------------------
......
DAC_LoadDetection Successful
rhdAtomBIOSScratchDACSenseResults
BIOSScratch_0: 0x40002
rhdAtomBIOSScratchDACSenseResults sensed RHD_SENSED_VGA
AtomOutputvalueDACA: Sensed Output: VGA
......
RHDAtomOutputAllocFree
Mapping DIG1 encoder to KLDSKP_UNIPHYE
Crtc: found native mode from Monitor:
Modeline "1366x768" 72 1366 1414 1446 1486 768 771 775 806
Connector "PANEL" uses Monitor "LVDS Panel":
RHDMonitorInit
Connector "VGA 1": Failed to retrieve Monitor information.
RHDValidateScaledToMode
rhdModeValidateCrtc
DxModeValid: ATOM CRTC 1
rhdAtomOutputModeValid
Listing modesetting layout:
ATOM CRTC 1: tied to Atom PLL 1 and LUT A:
Outputs: AtomOutputduleDemandUniphyE (PANEL)
ATOM CRTC 2: tied to Atom PLL 2 and LUT B:
Outputs: AtomOutputvalueDACA (VGA 1)
Unused Outputs: AtomOutputUniphyB 未接
RHDModesPoolCreate

参考,上面说明得到videocard routing 数值:
CRTC0>DIG1>UNIPHYE>LVDS  Encoder= 0x00 Transmitter = 0x12
CRTC1>DAC >   DACA  >VGA   Encoder= 0x10 Transmitter = 0x00
CRTC1>DIG2>UNIPHYB>HDMI  Encoder= 0x01 Transmitter = 0x20 (未接HDMI)

最后得到Shrike personalities 如下 :

02 00 00 00 40 00 00 00 09 01 00 00 12 00 00 07  LVDS
10 00 00 00 10 00 00 00 00 01 00 00 00 10 01 06  VGA
00 08 00 00 00 02 00 00 00 01 00 00 20 01 02 01  HDMI


已知成功如下:欢迎成功的提供一下资讯交流

4330m(0x95521002)
   我的Acer 4810TZG(Peregrine) port 0
   pengbangbo的Dell 1440(Peregrine) port 1
   zxzhaohui的Dell 1464(Peregrine) port 2
   zidaneno5的Dell 1440
   EricGuo的HP 4311 FB下载(Peregrine) port 1
   Bobxyo的Dell 1464(Peregrine)
   weiqiong2的Dell 1564 i3
   紫叶O风铃的Dell 1088(Peregrine) port 1
   qshnwb的HP ProBook 4411s
   bigslowfat的Dell 1564-138(i5-430)做了个对应的windows变色龙wowpc.iso
   hakuta007的HP 4411s
   ヤo逸轩oo的DELL 1440 (T6600)
   himicgo的HP 4411s
   绝情奶牛 的Dell 1564 i3-330
   yzckq的HP 4411s wb249pa
   542751025 的 Dell 1564
   国外wmarshK的Dell 1545及c0ke的Dell 1545(Peregrine) port 1
4530m(0x95531002)
   xiaokuqxinxin的Dell studio 1457(Peregrine) port 1
   macchan的DELL 1450
   bhhc的4530m
4570m(0x95531002)
   梵天
   sonicboy520的ThinkPad SL410k
   洗洗睡 的Thinkpad E40 05785kc(Peregrine) port 2
   tingpu的Thinkpad SL410 284255C含修改安装教程(Peregrine) port 2
   fyner的asus F81s下载ATIFramebuffer.kext
   124g
   国外kizwan的Dell Studio 1557
   国外hjs89的Acer 5738ZG(Peregrine) port 0
4650m(0x94801002)
   国外mucha的HP Pavilion dv6-1240ek(Shrike) port 0
   国外Dime333用module_system的boot(Shrike)
5145m(0x95531002)
   azhwei的Toshiba L600-05s与384楼贴图(Peregrine) port 0
   wfnpdc的Toshiba L537(Peregrine) port 1
545vm(0x95531002)
   catkids的ThinkPad E40
   haohaozoulu的ThinkPad E40 0578A64

1楼补充说明

分辨率高于1366x768的,貌似未成功,Transmitter要用DUAL_LINK试试看。或自行修改dsdt加入DualLink
如1440x900,1600x900,1920x1080等
#define UNIPHY_AB 0x00 // = UNIPHY:DUAL_LINK
#define UNIPHY_CD 0x01 // = UNIPHY_1:DUAL_LINK
#define UNIPHY_EF 0x02 // = UNIPHY_2:DUAL_LINK

全部ATI的10.6.7.update的kext驱动下载 ATI.kexts.10.6.7(2011.3.3).zip
  http://dl.dbank.com/c0ltnq79ub

全部使用update的10.6.6(10.6.7也可)的ATI的kexts如下(应该可用10.6.5以下系统,没试过)
  修改ATI4600Controller.kext
  修改ATIFramebuffer.kext
  原始ATIRadeonX2000.kext
  原始ATIRadeonX2000GA.plugin
  原始ATIRadeonX2000GLDriver.bundle
  原始ATIRadeonX2000VADriver.bundle
  原始ATISupport.kext

  须确认ATIRadeonX2000.kext/Contents/Info.plist有加入ID的支持。
            <key>IOPCIMatch</key>
            <string>0x94001002 0x94011002 0x94021002 0x94031002 0x95811002 0x95831002 0x95881002 0x94c81002 0x94c91002 0x95001002 0x95011002 0x95051002 0x95071002 0x95041002 0x95061002 0x95981002 0x94881002 0x95991002 0x95911002 0x95931002 0x94401002 0x94421002 0x944A1002 0x945A1002 0x94901002 0x949E1002 0x94801002 0x95401002 0x95411002 0x954E1002 0x954F1002 0x95521002 0x95531002 0x94a01002</string>

其他ATI显卡请自行判断使用ATIRadeonX1000/2000/3000.kext及ATI1x00/2x00/3x00/4x00/5000Controller.kext。

kext安装有问题的,重装kext试试看
删了/S/L/E/ATI显卡kext,重新再用 Kext Helper b7 将上面7个修改过的ATI的kext安装入S/L/E,再用 Kext Utility 重建权限、cache、mkext试试看。

修改注意Q/A:

Q1.radeon_bios_decode.0.2.zip或radeondump.0.2.zip如何使用?
A1.解开zip后,将文件radeon_bios_decode或radeondump及1002_9552.rom放在桌面,开启终端键入
  终端$   cd Desktop/
  终端$   ./radeondump < 1002_9552.rom > connector.txt
  或
  终端$   ./radeon_bios_decode < 1002_9552.rom > connector.txt
  在桌面出现connector.txt文件。
radeondump的connector.txt文件
ATOM BIOS Rom:
        SubsystemVendorID: 0x1002 SubsystemID: 0x9552
        IOBaseAddress: 0x4000
        Filename: BR32868.002
        BIOS Bootup Message:
BR32868.002 M92 DDR3 64bit 450e/600m                                       

Connector at index 0 type: LVDS (7)
Connector's i2cid: 96
Connector at index 1 type: VGA (1)
Connector's i2cid: 90
Connector at index 2 type: HDMI-A (11)
Connector's i2cid: 91
radeon_bios_decode的connector.txt文件
ATOM BIOS Rom:
        SubsystemVendorID: 0x1002 SubsystemID: 0x9552
        IOBaseAddress: 0x4000
        Filename: BR32868.002
        BIOS Bootup Message:
BR32868.002 M92 DDR3 64bit 450e/600m                                       

PCI ID: 1002:9552
Connector at index 0
        Type [@offset 45934]: LVDS (7)
        Encoder [@offset 45938]: INTERNAL_UNIPHY2 (0x21)
        i2cid [@offset 45996]: 0x96, OSX senseid: 0x7
Connector at index 1
        Type [@offset 45944]: VGA (1)
        Encoder [@offset 45948]: INTERNAL_KLDSCP_DAC1 (0x15)
        i2cid [@offset 46019]: 0x90, OSX senseid: 0x1
Connector at index 2
        Type [@offset 45954]: HDMI-A (11)
        Encoder [@offset 45958]: INTERNAL_UNIPHY (0x1e)
        i2cid [@offset 46042]: 0x91, OSX senseid: 0x2
其中
  DAC1 可能是 DACA 0x00
  UNIPHY2 可能是以下三种之一
        #define UNIPHY_E     0x12 // = UNIPHY_2:LINK_A
        #define UNIPHY_F      0x22 // = UNIPHY_2:LINK_B
        #define UNIPHY_EF    0x02 // = UNIPHY_2:DUAL_LINK
  UNIPHY 可能是以下三种之一
        #define UNIPHY_A     0x10 // = UNIPHY:LINK_A
        #define UNIPHY_B     0x20 // = UNIPHY:LINK_B
        #define UNIPHY_AB   0x00 // = UNIPHY:DUAL_LINK
  或

  终端$   ./redsock_bios_decoder < 1002_9552.rom > redsock.txt
  在桌面出现redsock.txt文件。
redsock_bios_decoder的redsock.txt文件
Subsystem Vendor ID: 1002
       Subsystem ID: 9552
..
Connector Object Id which is
        encoder obj id which is enc 0x4)] linkb: false
Connector Object Id which is
        encoder obj id which is linkb: false
Connector Object Id which is
        encoder obj id which is enc 0x0)] linkb: false

Q2.安装Dong的RadeonHD.kext,发生花屏卡住,无画面?
A2.使用arch=i386进入32位模式。
  安装RadeonHD.kext时,/Extra/com.apple.Boot.plist内容要修改如下
  <key>GraphicsEnabler</key>
  <string>No</string>
A2-1.用别台+VNC viewer进去Mac看看,Mac要先设定VNC屏幕共享。
A2-2.或在帐户=>登录项=>加入 终端,开机进入时自动启动后,进行盲打。
  登录项,最好只有加入 终端。
  终端$   sudo -s    键入密码取得root权限,
  终端#   dmesg > Encoder.txt    得到文件/Users/使用者名称/Encoder.txt。
  
A2-3.(本段取消,已可用新的radeon_bios_decode的connector.txt替代猜测)
  或用Ubuntu的Linux Live CD(免安装)启动时按 F6 后,按 ESC 加入 radeon.modeset=0
  到Boot Options引导选项,进入Linux提取/var/log/Xorg.0.log文件查阅显卡详细资讯。
  
  下载Ubuntu http://www.ubuntu.com/desktop/get-ubuntu/download
A2-4.(本段取消,已可用新的radeon_bios_decode的connector.txt替代猜测)
  或用Ubuntu的Linux Live CD(免安装)一般正常进入Linux后,开启 应用程序=>附件=>
  终端 后,使用 dmesg | egrep "drm" > ~/Desktop/Encoder.txt 取得Transmitter,暂时
  没有找Encoder的方法,先自行猜测Encoder使用吧。Unbutu的Encoder.txt如下
   Loading RV710 Microcode
   Radeon Display Connectors
   Connector 0:
     LVDS
     DDC: 0x7f68 0x7f68 ........
     Encoders:
       LCD1: INTERNAL_UNIPHY2
   Connector 1:
     VGA
     DDC: 0x7e40 0x7e40 ........
     Encoders:
       CRT1: INTERNAL_KLDSCP_DAC1 (该是DACA)
   Connector 2:
     HDMI-A
     HPD1
     DDC: 0x7e50 0x7e50 ........
     Encoders:
       DFP1: INTERNAL_UNIPHY
  -------------------------------------------------------
  UNIPHY2 可能是以下三种之一
        #define UNIPHY_E     0x12 // = UNIPHY_2:LINK_A
        #define UNIPHY_F      0x22 // = UNIPHY_2:LINK_B
        #define UNIPHY_EF    0x02 // = UNIPHY_2:DUAL_LINK
  UNIPHY 可能是以下三种之一
        #define UNIPHY_A     0x10 // = UNIPHY:LINK_A
        #define UNIPHY_B     0x20 // = UNIPHY:LINK_B
        #define UNIPHY_AB   0x00 // = UNIPHY:DUAL_LINK
  将文件存入XP硬盘
  

Q3.启动到appleintelcpupowermanagement ... timed out,就会卡!
A3.把NullCPUPowerManagement.kext或Disabler.kext删掉,可进系统。(zxzhaohui)
  必要的话也要删掉/S/L/E/AppleIntelCPUPowerManagement.kext和
  AppleIntelCPUPowerManagementClient.kext。

Q4.有两个10.6.6, 它们的kext是不一样的!(节外生枝)
A4.千万要注意 (5楼上面下载10.6.6或10.6.7的kexts)
  (可用)一个是10.6.x 升级上来到10.6.6, 现在的修改数据都是据此而来的,
  (不可)一个是MBP 2011随机盘的10.6.6, 它的驱动和Lion有相近的格式, 数据和教程里的不
  一样。(估计要自行找数据替换)

Q5.Photoshop色彩只有显示绿色通道?(pengbangbo)
A5.换成CMYK 就可以正常显示颜色,RGB 就只显示绿色。(macchan 720楼)


pengbangbo 发表于 2011-3-16 08:32:16

本帖最后由 pengbangbo 于 2011-3-16 08:36 编辑

{:6_330:}我没看到怎么找到FrameBuffer的啊……

crazybirdy 发表于 2011-3-16 08:40:09

本帖最后由 crazybirdy 于 2012-4-23 08:12 编辑

二、安装Dong的RadeonHD.kext取显卡接口资料(mucha只用10/20/2009版)
  終端$   ./redsock_bios_decoder < 1002_9552.rom > redsock.txt
  在桌面出現redsock.txt文件。

Subsystem Vendor ID: 1002
       Subsystem ID: 9552
..
Connector Object Id which is
        encoder obj id which is 0x12 enc 0x4)]
Connector Object Id which is
        encoder obj id which is 0x00 enc 0x10?)]
Connector Object Id which is
        encoder obj id which is 0x10 enc 0x0)]
这步骤很容易花屏无画面,可用5楼Q2解决。或直接用5楼Q1的connector.txt的Encoder猜测吧
 1.编辑RadeonHD.kext/Contents/Info.plist
  修改为
      <key>debugMode</key>
      <true/>
      <key>verboseLevel</key>
      <integer>2</integer>
 2.删除/S/L/E/ATI4600Controller.kext及ATIFramebuffer.kext
  (记得备份,最后还要用到)。
 3.用 Kext Wizard 将RadeonHD.kext安装入S/L/E,並重建权限、cache、mkext即可。
 4.重新启动Mac,也可外接VGA、DVI 或 HDMI。
 5.进入Mac后,开启终端执行$  sudo dmesg > ~/Desktop/Encoder.txt 键入密码,得到文
  件Encoder.txt内容如下。
一些没用资料先略过

Connector {.."LVDS LCD1"..{ RHD_OUTPUT_UNIPHYE,..} }
Connector {.."VGA\^H CRT1"..{ RHD_OUTPUT_DACA,.. } }
Connector {.."HDMI_TYPE_A DFP1"..{ RHD_OUTPUT_UNIPHYA,..} }
.
Sensing DACA on Output AtomOutputDACA
.
Calling DAC_LoadDetection
.
DAC_LoadDetection Successful
.
Mapping DIG1 encoder to KLDSKP_UNIPHYE
.
Crtc: found native mode from Monitor:
.
Connector "PANEL" uses Monitor "LVDS Panel":
.
ATOM CRTC 1: tied to Atom PLL 1 and LUT A:
Outputs: AtomOutputUniphyE (PANEL)
ATOM CRTC 2: unused
Unused Outputs: AtomOutputDACA, AtomOutputUniphyA

  6.参考,附注一、personality的结构说明,得到以下videocard routing 数值:
  CRTC0>DIG1>UNIPHYE>LVDS  Encoder = 0x00  Transmitter = 0x12
  CRTC1>DAC >  DACA   >VGA  Encoder = 0x10  Transmitter = 0x00
  CRTC1>DIG2>UNIPHYA>HDMI  Encoder = 0x01  Transmitter = 0x10
  (没有HDMI可以测试)
  没找不到Encoder的,先参考原作者数值(附注一说明),运气好可开QE。
 7.经过,附注一、personality的结构说明,推算得到正确的personalities :
  配合前面的Transmitter,Encoder,HotPlugID及SenseLine列入推算。
  02 00 00 00 40 00 00 00 09 01 00 00 12 00 00 07  LVDS
  10 00 00 00 10 00 00 00 00 01 00 00 00 10 01 01  VGA
  00 08 00 00 00 02 00 00 00 01 00 00 10 01 02 02  HDMI

  移除RadeonHD.kext
  我使用Shrike参数,在内显LVDS和外接VGA都可以开启QE/CI相关特效。

三、在Mac用HexEdit软件修改ATIFramebuffer的framebuffer参数,以Shrike为例。
  (复制/S/L/E/ATIFramebuffer.kext到桌面)ATIFramebuffer.kext/Contents/MacOS/ATIFramebuffer
 1.调整Acer 4810TZG参数为一排数字
  02 00 00 00 40 00 00 00 09 01 00 00 12 00 00 07  LVDS
  10 00 00 00 10 00 00 00 00 01 00 00 00 10 01 01  VGA
  00 08 00 00 00 02 00 00 00 01 00 00 10 01 02 02  HDMI(无第三接口的,请随意引用,并设置port 02)
  改为一排数字
02 00 00 00 40 00 00 00 09 01 00 00 12 00 00 07 10 00 00 00 10 00 00 00 00 01 00 00 00 10 01 01 00 08 00 00 00 02 00 00 00 01 00 00 10 01 02 02
 2.调整原始Shrike参数为一排数字(参考附件Birds_FB.rtf)
  02 00 00 00 40 00 00 00 09 01 00 00 02 01 00 03
  02 00 00 00 00 01 00 00 09 01 00 00 20 01 02 02
  00 04 00 00 04 03 00 00 00 01 00 00 10 00 01 01
  改为一排数字
02 00 00 00 40 00 00 00 09 01 00 00 02 01 00 03 02 00 00 00 00 01 00 00 09 01 00 00 20 01 02 02 00 04 00 00 04 03 00 00 00 01 00 00 10 00 01 01
 3.利用HexEdit软件(附件)替换Shrike参数(一排数字)为Acer 4810TZG的参数(一排数字),共两处,第一个是
  x86_64用 ,第二个是i386用。


  10.6.8 及 10.7.x 已变更位置。请修改ATI4600Controller.kext。其他显卡修改ATIxx00Controller.kext。
  旧版如下
  Radeon HD 3XXX以前,请选用Sharks的framebuffer参数。
  Radeon HD 4XXX,请选用Birds的framebuffer参数。
  Radeon HD 5XXX ,请选用Monkeys的framebuffer参数。
  可直接取用Birds_FB、Monkeys_FB及Sharks_FB的字串替换。

idream 发表于 2011-3-16 09:18:54

这么猛啊

节外生枝 发表于 2011-3-16 10:10:48

楼主请提供下 dong的vbios.zip
老外网站下不了
最近一直在调试 3450M
现在使用官方驱动, 已经可以切换不同的分辨率了
但是 X2000 还没有和framebuffer 连接起来
看来也需要调整一下ati.c了
另外Kabyl boot  我一直使用不了
出现的就是 Ati card posted 然后就卡住了
楼主知道原因么?

tmacyunn 发表于 2011-3-16 12:20:53

不错啊,看来A卡有希望了。

mikecdh 发表于 2011-3-16 12:34:29

A卡4系捷报传来~

yike08 发表于 2011-3-16 13:06:09

楼主能写个中文教程不 英盲很蛋疼

aten 发表于 2011-3-16 14:21:16

支持!请问HD 3470有没希望?

zxzhaohui 发表于 2011-3-16 14:21:52

楼主能否把修改过的文件包括需要用到的kexts共享一下哦?
我的显卡跟你的一模一样,HD mobility 4330 512M (0x95521002)

crazybirdy 发表于 2011-3-16 14:38:14

回复 9# 节外生枝

显卡rom要自己抓,RadeonHD.kext文件上传了。

zidaneno5 发表于 2011-3-16 14:49:35

我来贴个115~
http://u.115.com/file/f8d47bd337

crazybirdy 发表于 2011-3-16 14:51:05

回复 16# zidaneno5

用一下你的115上内文  {:5_288:}

crazybirdy 发表于 2011-3-16 15:30:30

回复 9# 节外生枝

Ati card posted 然后就卡住了
   
可能是Kabyl 没有你的显卡专用代码..要自己修改了吧

zidaneno5 发表于 2011-3-16 15:45:30

回复 17# crazybirdy

正所谓我不入地狱谁入地狱,呵呵~再给你贴个115 http://u.115.com/file/f8b0e3caf5

pengbangbo 发表于 2011-3-16 15:57:28

{:5_267:}全用10.6.6的Kexts?不用10.7的了?
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 发图庆祝ATI Mobility HD 4330 终于开QE/CI 及ATIFramebuffer修改解说