Jump to content

Mobility HD4XXX thread


c0ke
 Share

9 posts in this topic

Recommended Posts

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • 5 months later...
 Share

×
×
  • Create New...