Jump to content

Mobility HD4XXX thread


  • Please log in to reply
8 replies to this topic

#1
c0ke

c0ke

    InsanelyMac Geek

  • Members
  • PipPipPip
  • 116 posts
  • Gender:Male
  • Location:Venezia Bari, Italy
  • Interests:multimedia interaction design.
Hi there.
I open this thread to collect all the informations about the issue with the ati mobility cards that prevents the correct system recognition of the card or the output. I hope that sharing our experience we could come closer to the identification of the problem, trying and trying with some experiments and reporting our results:

As you can see in my signature I have a mobility hd4330 512MB version.
To boot in 10.6 I had to remove both ati4500controller and atiradeonx2000 kexts from S/L/E, with graphicEnabler=y, beacuse I experienced black screens after the apple logo.
But in this way I am only running in VESA mode 1024x768 stretched screen, system profile giving the correct card name but 256 mb vram, that means the card's not correctly identified.
However, I discovered that with both the above kext in S/L/E, with device id inserted in their info.plist, the system runs correctly anyway, but giving no signal to the display (integrated or vga out, I see only backlight).
Saving (in blind mode) the system profile, I can see that the card is now correctly recognized with all 512Mb of vram, and all ati extensions loaded (ATI4500Controller, ATIFramebuffer, ATIRadeonX2000, ATISupport). However no display was found.
This seems to depend by the fact that the card has a lvds output, not supported by the peregrine framebuffer loaded.
I did some experiments loading motmot, caretta and wormy (getting no difference or KP), and iago (getting white screen instead black after apple logo gray screen) instead of peregrine (simply changing their name inside atiframebuffer kext).

I've now disabled the graphicEnabler flag, booting in 32bit mode with the dong's radeonHD framebuffer that gives full resolution support and good performances. But unfortunately I can't get any advantage from os x because of a lack of graphic memory and acceleration(x2000 kext must be removed from S/L/E).

I don't know how it works and wich framebuffer uses, but seems to properly work with the output.
Do you think that there's such a way to take the advantages of these two solution to let the system recognize both the card and the display?

#2
lebidou

lebidou

    InsanelyMac Geek

  • Members
  • PipPipPip
  • 153 posts
  • Gender:Male
  • Location:Fr
hello,

ATM the only solution to get resolution changing in SL for Radeon HD moblity cards is Dong's RadeonHD Framebuffer. It is a framebuffer itself , so it doesn't use any Apple defined framebuffer (Motmot and al).

You are right assuming that's because of the LVDS output. Apple's framebuffers don't handle outputs dynamicaly and thus don't set correct settings for Mobility cards.

Unfortunatly, Acceleration on HD2xxx series and above requires an Apple framebuffer and won't work with RadeonHD. The reason is simple, Acceleration kexts call a Framebuffer function that is not implemented in RadeonHD. This function has to be reverse engineered, which easy to say, harder to do.

I hope I answered your questions, and I'm sorry to bring bad news.
Have a nice day.

#3
c0ke

c0ke

    InsanelyMac Geek

  • Members
  • PipPipPip
  • 116 posts
  • Gender:Male
  • Location:Venezia Bari, Italy
  • Interests:multimedia interaction design.

hello,

ATM the only solution to get resolution changing in SL for Radeon HD moblity cards is Dong's RadeonHD Framebuffer. It is a framebuffer itself , so it doesn't use any Apple defined framebuffer (Motmot and al).

You are right assuming that's because of the LVDS output. Apple's framebuffers don't handle outputs dynamicaly and thus don't set correct settings for Mobility cards.

Unfortunatly, Acceleration on HD2xxx series and above requires an Apple framebuffer and won't work with RadeonHD. The reason is simple, Acceleration kexts call a Framebuffer function that is not implemented in RadeonHD. This function has to be reverse engineered, which easy to say, harder to do.

I hope I answered your questions, and I'm sorry to bring bad news.
Have a nice day.


No bad news, ;) and thank you for replying.
This topic is just a way to clarify more or less where is the point and where to look for a solution.
Now I believe the best way to figure out is trying to work with apple framebuffers, leaving radeonhd apart.

I think we must now understand, if apple has totally broken its lvds technology support, having no interests with this type of cards, if in past something worked with it and how. Looking at this page seems there are a lot of framebuffers (old I think..) supporting lvds output.
In the pcefi source I see that my card is associated with the peregrine framebuffer.
I don't know how to recompile it and so I did some experiments changing some names inside atiframebuffer kext in peregrine (and viceversa), but no luck. Maybe I'll try with all of them by now..
Let's see what happens

#4
lebidou

lebidou

    InsanelyMac Geek

  • Members
  • PipPipPip
  • 153 posts
  • Gender:Male
  • Location:Fr
I have an X1900 Mobility card with LVDS which should be working with Wormy (it has LVDS support.) Except it doesn't since 10.4.8. It's impossible to recompile Apple's framebuffers since they're closed source. That's why Dong started the RadeonHD project, to have an open source driver. The problem is he did it alone, and had a really hard time getting any help from other developers. It took Dong's two plain years to achieve what's done, and there is still a lot to do.

If you want to have native resolution in 64 bits mode, you can use the patch I made for chameleon (see here.) You may experience mouse glitches and surely won't get acceleration, but it's an alternate solution I've been working on since I don't know for how long the old ATINDRV.kext I use (incompatible with your card) will work with newer systems.

In snow leopard, output support (LVDS, DVI, ...) has moved to the ATIxxxxController kexts, ATIFramebuffer being more generic. I don't think you'll get anywhere playing with the ATIFrambuffer Info.plist. The only remaining solution would be to reverse engineer the controller kexts, which would take a lot of time, and result in heavily Apple dependant solution. Or, of course, pursue Dong's effort.

Don't take me wrong, I'm not trying to discourage you or anything. But since you are requiring informations, I'm just telling all know about the subject.

#5
wmarsh

wmarsh

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 900 posts

No bad news, :) and thank you for replying.
This topic is just a way to clarify more or less where is the point and where to look for a solution.
Now I believe the best way to figure out is trying to work with apple framebuffers, leaving radeonhd apart.

I think we must now understand, if apple has totally broken its lvds technology support, having no interests with this type of cards, if in past something worked with it and how. Looking at this page seems there are a lot of framebuffers (old I think..) supporting lvds output.
In the pcefi source I see that my card is associated with the peregrine framebuffer.
I don't know how to recompile it and so I did some experiments changing some names inside atiframebuffer kext in peregrine (and viceversa), but no luck. Maybe I'll try with all of them by now..
Let's see what happens

I've been playing with DSDT patching.

I can assign any Apple framebuffer to my Mobility Radeon HD 4330 by using DSDTSE (http://www.osx86.es/?p=610) and applying the ATI patch (I think its hack #13)

And once you do that, under about this mac, pci cards, it will read whichever framebuffer you assign.

Haven't gotten one that works yet. But I have not tried them all. Based on your link, I think I'll try Iago next.

Do you have any suspicion which ones might support LVDS?

You are correct PC_EFI source associates our card with peregrine, but Chameleon source associates it with MotMot. I don't know why the difference, and neither works.

Also found with 10.6.3, ATIRadeonX2000.kext actually loads. However it give KP if loading during the boot process, and is ineffective if loaded with kextload on a running system.

I think we are close.

#6
c0ke

c0ke

    InsanelyMac Geek

  • Members
  • PipPipPip
  • 116 posts
  • Gender:Male
  • Location:Venezia Bari, Italy
  • Interests:multimedia interaction design.

I've been playing with DSDT patching.

I can assign any Apple framebuffer to my Mobility Radeon HD 4330 by using DSDTSE (http://www.osx86.es/?p=610) and applying the ATI patch (I think its hack #13)

And once you do that, under about this mac, pci cards, it will read whichever framebuffer you assign.

Haven't gotten one that works yet. But I have not tried them all. Based on your link, I think I'll try Iago next.

Do you have any suspicion which ones might support LVDS?

You are correct PC_EFI source associates our card with peregrine, but Chameleon source associates it with MotMot. I don't know why the difference, and neither works.

Also found with 10.6.3, ATIRadeonX2000.kext actually loads. However it give KP if loading during the boot process, and is ineffective if loaded with kextload on a running system.

I think we are close.



I think should be a good way to try every framebuffer. It is not so clear the effect or the capabilities of everyone of them, but we could try and see.
We can divide the list to simplify the work.
I think what lebidou say it's true, I'm not trying to generate illusions on this method, but maybe we could retrieve some differences with the different framebuffer usage.
I'm still with 10.6.2. As said above I tried wormy, caretta and iago (and maybe Hypoprion)without success, but some change take effect with iago, giving white screen instead of black.
We could try the other in the posted list, which nobody seems to know. Maybe we could find apple experiments with different kind of output... who knows.

I'll try to play with the dsdtse...

#7
wmarsh

wmarsh

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 900 posts

I think should be a good way to try every framebuffer. It is not so clear the effect or the capabilities of everyone of them, but we could try and see.
We can divide the list to simplify the work.
I think what lebidou say it's true, I'm not trying to generate illusions on this method, but maybe we could retrieve some differences with the different framebuffer usage.
I'm still with 10.6.2. As said above I tried wormy, caretta and iago (and maybe Hypoprion)without success, but some change take effect with iago, giving white screen instead of black.
We could try the other in the posted list, which nobody seems to know. Maybe we could find apple experiments with different kind of output... who knows.

I'll try to play with the dsdtse...

Well this is a good idea. I've been trying to research and figure what might work, but the brute force approach of trying all of them just might work.

I would suggest we use 10.6.3 as base system. Remember the old SleepEnabler.kext can't be in /Extra as it causes kernel panic in 10.6.3. You can use PC_EFI or Chameleon, but GraphicsEnabler should be "no"

Once you have 10.6.3, you need to boot single user mode (-s) and copy ATIRadeonX2000.kext out of /System/Library/Extensions or it causes kernel panic. Let us also move ATI4500Controller.kext. Here are the commands:

/sbin/fsck -fy
/sbin/mount -uw /
mkdir 10.6.3
cd /System/Library/Extensions
cp -R ./ATIRadeonX2000.kext /10.6.3
rm -R ./ATIRadeonX2000.kext
cp -R ./ATI4500Controller.kext /10.6.3
rm -R ./ATI4500Controller.kext
touch /System/Library/Extensions
shutdown -r now

System should reboot into OS X

You need to add device ID to ATI4500Controller.kext. It should already be in ATIRadeonX2000.kext. To do so:

Drag from /10.6.3 to desktop
Right Click, "show package contents". Double click Contents
Right Click Info.plist, "Open with", Textedit
Look for the IOPCIMatch line. In the following line add device ID (mine is 0x95521002)
Save, Close Textedit and Finder Window, Drag back to /10.6.3
Open Terminal Window

sudo bash (enter password)
cd /10.6.3
chown -R root:wheel ./*
chmod -R 755 ./*

Now we have a folder we can kextload from for testing

Next you need to install DSDTSE (link above)

Run DSDTSE, click on extract DSDT, an editor window opens
Click File, Save .dsl, Save as dsdt_org
Click Compile DSDT, Save, Save
It should compile successfully. No errors. Ignore warnings, etc.

Now we need to insert 1st hack (Method DTGP.dsl)
On left, under DSDT hacks, pick 01
Read the code.
Select the code from Method (DTGP... until before it says example
Click Edit, cut
close the window, go back to your editor window
paste it after the }} closing the definition block
(in mine it starts as line 27, yours may be different)
Click File, Save .dsl, Save as dsdt_1
Click Compile DSDT, Save, Save
Again it should compile successfully. If it did not, try again.

Now we need to insert the important hack
On left, under DSDT hacks, pick 13
Read the Code, Don't cut it yet.
Go back to your editor window
To the right under ACPI search type Device (PCI
Click on Search
Read your code, after Name (_BBN you need to add code
Go back to the hack window, select the code, paste it in
Click File, save .dsl, Save as dsdt_2
Click Compile DSDT, Save, Save
Again it should compile successfully. If it did not, you probably messed up the }, Load dsdt_1 and try again.

Also I had an error here, I had to delete a * in front of PNP0A03

Now we are ready to try modifying for other framebuffers.
Load the dsdt_2.dsl that finally compiled
Search for Device (PCI to find the code you pasted in
In the 3 places clearly marked, change the name of the framebuffer to the one you want to try
Change the VRAM where marked to the correct size
Click Compile DSDT, Save, Save

Each one that compiles successfully you can test as follows:

Copy the dsdt.aml in the Finder Window to /Extra
reboot the computer

If it hangs rebooting, you can undo by rebooting in single user mode (-s) and doing:

/sbin/fsck -fy
/sbin/mount -uw /
cd /Extra
rm ./dsdt.aml
shutdown -r now

If OS X loads, you can see if you get kernel panic with Graphics Drivers by opening Terminal Window and doing:

sudo bash (enter password)
cd /10.6.3
kextload ./ATIRadeonX2000.kext

If it panics, hold down power button and reboot

A better test might be to copy these files to /System/Library/Extensions and try booting with them there.
If that fails, you need to boot single user mode, delete them, then touch /System/Library/Extensions

The full list of framebuffers in ATIFrameBuffer.kext:

Alopias
Alouatta
Baboon
Cardinal
Caretta
Colobus
Douc
Flicker
Galago
Hypoprion
Iago
Kakapo
Lamna
Megalodon
Motmot
Peregrine
Quail
Raven
Shrike
Sphyrna
Triakis
Uakari
Vervet
Wormy
Zonalis

Maybe one or more will work. I have tried Peregrine, Motmot, and Iago myself without success.

#8
lebidou

lebidou

    InsanelyMac Geek

  • Members
  • PipPipPip
  • 153 posts
  • Gender:Male
  • Location:Fr
You do realise that this has already been tried lots of times since 10.4.8 came out in 2007, right ?
Mobility cards are known not to work because Apple is using a slightly modified LVDS connector. From that point, the only way to get it working is a new driver, specifically designed for our cards (say hello to Dong's RadeonHD.)

I take the risk to repeat myself : you won't go anywhere trying different framebuffers.

The kexts that deal with hardware, tune outputs, set crtcs registers, are the ATIxxxxController.kext. If there is something to do with Apple's kexts, it is patching the ATIxxxxController.kext binaries, not playing with your DSDT.

#9
Manh_Truong

Manh_Truong

    InsanelyMac Protégé

  • Just Joined
  • Pip
  • 3 posts
*bump*

I got an old PC ( which can't run OSX ) and a laptop with HD4570 ( urgh ... )

Can I run the laptop with full support ( no VGA out ) and use VPN in the old machine to work ?
// Snow 10.6.4 and latest myHack.

thanks





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy