麦创网

发表于 15/3/31 20:54:05 |显示全部楼层

ATI Radeon HD 7850修改FB完美驱动Mac OSX
修改FB完美驱动HD7850,不在显示HD 7xxx

主板:H77N-WIFI
CPU:I5 3450
显示卡:蓝宝石HD7850 2G版(四接口DP、HDMI、DVI-D、DVI-I)
DSDT内建显卡ID为6818或S/L/E下AMD7000Controller.kext和AMDRadeonX4000.kext的info加入0x68191002  HDMI可以正常输出,但系统信息显示HD 7xxx ,HDMI不能输出音频,而且不能多屏输出。肯定是FB不正确所至,故此决定修改FB。
第一步修改FB:
复制S/L/E下AMD7000Controller.kext到桌面。
在windows下用GPU-Z另存显卡的VBIOS,名称aaa.rom,
在MAC下将aaa.rom和redsock_bios_decoder复制到桌面,打开终端输入
  1. cd ~/desktop/
  2. ./redsock_bios_decoder < aaa.rom > redsock.txt
复制代码
得到redsock.txt,接口数据如下:
21P0400.S03:
C40304 Pitcairn PRO A1 GDDR5 64Mx32 2GB
Subsystem Vendor ID: 174b
      Subsystem ID: e221
Object Header Structure Size: 355
Connector Object Table Offset: 48
Router Object Table Offset: 0
Encoder Object Table Offset: fd
Display Path Table Offset: 12
Connector Object Id [19] which is[DISPLAY_PORT]
         encoderobj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12[duallink 0x2] enc 0x4)] linkb: false
Connector Object Id [12] which is[HDMI_TYPE_A]
         encoderobj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x22[duallink 0x2] enc 0x5)] linkb: true
Connector Object Id [4] which is [DVI_D]
         encoderobj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x11[duallink 0x1] enc 0x2)] linkb: false
Connector Object Id [2] which is [DVI_I]
         encoderobj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x10[duallink 0x0] enc 0x0)] linkb: false
Connector Object Id [2] which is [DVI_I]
         encoderobj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)]linkb: false
然后复制redsock_bios_decoder到桌面,终端输入
  1. ./radeon_bios_decode< aaa.rom > connector.txt
复制代码
得到connector.txt,接口数据如下:
ATOM BIOS Rom:
         SubsystemVendorID:0x174b SubsystemID: 0xe221
         IOBaseAddress:0x0000
         Filename:221P0400.S03
         BIOSBootup Message:
C40304 Pitcairn PRO A1 GDDR5 64Mx32 2GB
PCI ID: 1002:6819
Connector at index 0
         Type[@offset 45370]: DisplayPort (10)
         Encoder[@offset 45374]: INTERNAL_UNIPHY2 (0x21)
         i2cid[@offset 45480]: 0x90, OSX senseid: 0x1
Connector at index 1
         Type[@offset 45380]: HDMI-A (11)
         Encoder[@offset 45384]: INTERNAL_UNIPHY2 (0x21)
         i2cid[@offset 45507]: 0x92, OSX senseid: 0x3
Connector at index 2
         Type[@offset 45390]: DVI-D (3)
         Encoder[@offset 45394]: INTERNAL_UNIPHY1 (0x20)
         i2cid[@offset 45534]: 0x94, OSX senseid: 0x5
Connector at index 3
         Type[@offset 45400]: DVI-I (2)
         Encoder[@offset 45404]: INTERNAL_UNIPHY (0x1e)
         i2cid[@offset 45571]: 0x95, OSX senseid: 0x6
Connector at index 4
         Type[@offset45410]: DVI-I (2)
         Encoder[@offset 45414]: INTERNAL_KLDSCP_DAC1 (0x15)
         i2cid[@offset 45571]: 0x95, OSX senseid: 0x6
得出:
接口    txmit    enc    senseid
DP         12        04      01
HDMI   22        05      03
DVI-D   11        02      05
DVI-I    10        00      06
DVI-I    00        10      06
查到Aji的原始值:
00040000040300000001010112040501
00040000040300000001020122050402
04000000140200000001030000000306
00080000040200000001040011020104

  接口类型       接口标志位  显示特性  对齐字符   txmt    encd 显示顺序  senseID
|00 04 00 00 | 04 03 00 00  |  00 01    |    01 01    |     12  |   04     |    05      |   01

接口类型:
0200  LVDS
0400  DVI-I
1000  VGA
8000  S-Video
0002  DVI
0004  Displayport
0008  HDMI

于是得出
00040000040300000001010112040401  DP
00040000040300000001020112040301  DP
04000000140200000001030011020205  DVI-D
00080000040200000001040022050103  HDMI (01为优先显示)
显卡本身是DP、HDMI、DVI-D、DVI-I四个接口,为什么修改为两个相同的DP接口而不是两个DVI呢?解释是原始值前部分不能更改,只能修改后面对应部份,这个是试验过很多次又重启过很多次得出的结论,Aji原始值是两个DP接口,所以改为一样的数值就可以正常显示了,理论上HD7850虽然有四接口但只能三屏输出。
用HexEdit打开桌面的ATI7000Controller.kext/Contents/macOS/AMD7000Controller
查找原版排成一行:
00040000040300000001010112040501000400000403000000010201220504020400000014020000000103000000030600080000040200000001040011020104
替换成修改好的一行然后保存:
00040000040300000001010112040401000400000403000000010201120403010400000014020000000103001102020500080000040200000001040022050103
将桌面修改好的ATI7000Controller.kext替换到S/L/E关修复权限。
至此FB修改完成。


第二步DSDT加入代码并开启HDMI和DP音频:
查找PEG0,在下面加入:
  1. Method (_DSM, 4, NotSerialized)

  2.                     {
  3.                         Store (Package (0x0C)
  4.                             {
  5.                                 "device-id",
  6.                                 Buffer (0x04)
  7.                                 {
  8.                                      0x18, 0x68, 0x00, 0x00
  9.                                 },
  10.                                 "@0,name",
  11.                                 Buffer (0x08)
  12.                                 {
  13.                                     "ATY,Aji"
  14.                                 },
  15.                                 "@1,name",
  16.                                 Buffer (0x08)
  17.                                 {
  18.                                     "ATY,Aji"
  19.                                 },
  20.                                 "@2,name",
  21.                                 Buffer (0x08)
  22.                                 {
  23.                                     "ATY,Aji"
  24.                                 },
  25.                                 "model",
  26.                                 Buffer (0x13)
  27.                                 {
  28.                                     "AMD Radeon HD 7850"
  29.                                 },
  30.                                 "hda-gfx",
  31.                                 Buffer (0x0A)
  32.                                 {
  33.                                     "onboard-1"
  34.                                 }
  35.                             }, Local0)
  36.                         DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  37.                         Return (Local0)
  38.                     }
  39.                 }
  40.                 Device (HDAU)
  41.                 {
  42.                     Name (_ADR, One)
  43.                     Method (_DSM, 4, NotSerialized)
  44.                     {
  45.                         Store (Package (0x02)
  46.                             {
  47.                                 "hda-gfx",
  48.                                 Buffer (0x0A)
  49.                                 {
  50.                                     "onboard-1"
  51.                                 }
  52.                             }, Local0)
  53.                         DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  54.                         Return (Local0)
  55.                     }
  56.                 }
  57.             }
复制代码
DSDT内建Aji三个显示输出接口,内建四接口会黑屏。
注意:如要重装系统请将DSDT的三个Aji接口数据删掉,否则黑屏,因新系统未改FB值。
至此显卡完美驱动,双屏显示成功(因未有设备,理论上三屏都可以),HDMI和DP音频输出, 系统信息显示HD7850
工具和参考信息附件奉上。
3.png

4.png

5.png
6.png

7.png

HD7850.zip (2.81 MB, 下载次数: 1, 售价: 2 金钱)
附件下载:
游客,如果您要查看本帖隐藏内容请回复

打赏楼主

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

 

发表于 15/4/3 17:16:02 |显示全部楼层
前排支持一下、
 

发表于 15/4/8 23:17:25 |显示全部楼层
多谢楼主分享
 

发表于 15/7/29 16:23:25 |显示全部楼层
{:7_249:}{:7_153:}{:7_153:}{:7_153:}{:7_153:}
 

发表于 15/7/29 23:55:09 |显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶
 

发表于 15/9/19 23:22:10 来自手机 |显示全部楼层
看帖恢复室内的
 

发表于 15/9/23 13:44:11 |显示全部楼层
grrrrrrrrg
 

发表于 15/11/24 00:12:45 |显示全部楼层
继续支持,多谢楼主
 

发表于 15/12/15 23:16:47 |显示全部楼层
7850修改FB完美驱动
 

发表于 16/1/7 15:09:57 |显示全部楼层
感谢分享。。。。。。。
 

发表于 16/3/22 18:09:42 |显示全部楼层
试一试看看好不好用
 

发表于 16/5/3 03:05:31 |显示全部楼层
感谢反响
 

发表于 16/6/11 19:01:47 |显示全部楼层
:'(终于找到了
 

发表于 16/12/18 11:16:04 |显示全部楼层
后排支持一下!
 

发表于 17/1/24 19:42:32 |显示全部楼层
好贴,支持楼主!
 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

麦创网 ( 苏ICP备13053101号-1 )

@麦创网 禁止任何未经允许的修改,传播或使用。

Powered by Discuz!

©2012 @ iMac.vip. 用户言论不代表本站立场。

返回顶部