Drivers for Promise PDC42819 RAID Controller on MSI K9A2 Platinum Motherboard
I have an MSI K9A2 Platinum motherboard which comes with an Promise T3 FastTrack PDC42819 RAID controller that for the life of me I can't get Linux to detect. I have two 500GB hdds that are detected during boot, just not seen by Linux. Does anyone know the correct driver to use, or if that particular controller is supported at this time?
|
Welcome
1st, welcome to LQ. I hope you both get & give good answers here. Before I start on what I found about your problem, I'd like to make 2 suggestions about what to post: 1. Post links to mfr.'s h/w info. -- it will save prospective helpers time & thus make it easier (read more likely) to try to help. 2. You are expected to try to solve your problem yourself before you post, Google, Google Linux, & searching LQ are good ways to this. If you then posted your searches, your helpers would get up to speed on your problem (& therefore be more likely to try to help) much quicker, not to mention know that you did already try to figure it out on your own. Links
Good News It sounds like there is a Linux driver. Bad News It sounds like there is a Linux driver; & that means you are probably dealing w/ "fake RAID", see the Wikipedia RAID article or search LQ for "fake RAID". Good News Most "fake RAID" chips can be used as plain multi-disk controllers for Linux software RAID, which is considered very good. |
...
Search Google? Yea gee...didn't think of that. I ended up where you pointed to shortly after posting the question. Unfortunately the source to the t3sas driver (which is needed for that particular controller) will not compile against the 2.6.24.2 kernel. As far as this place is concerned, I was more or less hoping for quick response somewhat to the degree of "use X module found [here]".
On that note I have to say that I feel rather sorry for those new to Linux coming here for answers. If the philosophy here is to research the problem yourself, then why come here at all? With enough searching/studying, the solution is bound to present itself... To be helpful to others with the same question I will add the following: For people with the new MSI K9A2 Platinum (V1) motherboard with the Promise T3 RAID controller / FastTrack PDC42819 you will need visit www.promise.com, go to the driver download section and select FastTrack SAS. To get the source you'll need to select "Other" as the operating system. The actual module you need is called t3sas. Please note that as I mention above, it will not compile (by itself anyway) using the 2.6.24.2 kernel at the time of this post (2/18/2008). If you use an earlier kernel version, then there's a good chance you'll have better luck compiling the module. |
Quote:
Colin |
Great news! I have the promise driver t3sas.ko compiled on the 2.6.24 kernel. There were a few errors that had to be corrected due to changes from the 2.6.18 to 2.6.24 versions.
I started by getting the driver compiled on a supported kernel 2.6.15 just so I could see what the output of a successful compile looks like and ensure that I could fdisk my RAID partition. I then got it working on 2.6.22 (ubuntu 7.10). So I took baby steps in getting to 2.6.24. I used a ubuntu LiveCD (6.06LTS). Using the live cd I downloaded the kernel source and build-essential packages (also ncurses for menuconfig). I used a flash drive to hold the sources and driver build. I made mrproper, copied the config for the live cd from the /boot dir, made menuconfig and saved the config (i.e. no changes but rewrites the .config file.) build the kernel for 30 secs or so then Ctrl-c'd. With a good kernel source dir setup I was ready to compile the kernel module and debug. (dont forget to link via ln the /usr/src/kernel-source.2.6.24.x to /usr/src/linux. The changes amounted to the following: 1. Change an include of /linux/ioctl32.h to /linux.ioctl.h 2. a struct dereference for ->sg_page is now via sg_page(sg) 3. In interrupt define flag SA_SHIRQ is now IRQF_SHARED I will post a diff file soon enough. The promise driver on a supported kernel produces a MEGA amount of warnings even for a supported kernel version. After realizing that in 2.6.15, I felt like I might have a change at this! I am now installing using the ubuntu alternate install. During the install, after the network is initialized, I go to another VT and copy my driver over to the modules dir where the install uses to detect the RAID controller. Then VT back and continue the install and partd. Then before rebooting I have to VT back and regenerate the initrd. I found a really good post on another site on how to do this. When I finally get my system installed I will post the details. |
Got it! Successful kubuntu installation with latest kernel 2.6.24-11 64bit with RAID5 on 3x 320GB SATA, directly booting using the RAID array.
Phew! |
I have posted the *preliminary* source for the driver. You can download it on my website at:
http://www.colinmackenzie.net/ |
That's great...I had pretty much given up on the idea of using those two ports. I'll be sure and test your modified source later this evening on a 2.6.24.4 kernel and see what I can come up with.
|
Everything compiles fine on 2.6.24.4. However...it's seems you've centered the module around 64 bit operations. This is not conducive to 32bit users. Upon trying to insmod I received an undefined reference to __udivdi3. Thanks a lot for your effort though. Perhaps you'll be able to resolve this in future updates to the source.
|
I am running a 64bit kernel, thus the error. Remember, I am not the original maintainer, I simply gave up on finding a solution to the problem and dug into the source code. I have a 32bit Ubuntu machine I can build it on to test. Might as well since I am familiar with the source now. I want to get rid of the compile time warnings anyway, clean them up.
Give me a little time and I'll have it. Are you running the Promise card now? Colin Quote:
|
No. As of now it's disabled. No drivers to use it. I'd be happy to help test things out though.
|
Quote:
I would bet this is not the problem but still a problem with the source code, but lets cover our bases anyway. Colin |
I tried all of the above. I'll play with it a little more this evening and post the results.
|
Well...the link to the driver appears to be down. I'll try again later this evening and see if it's back up again.
|
Quote:
Also, I just got around to getting the build environment setup on my old 32 bit station and compiling the TX drivers on it. First thing I noticed is that the ftlib tries to build with the ftlib.obj in the tx4650 root dir, which I have packages as 64bit version. So I had to copy that from the ftlib dir and overwrite, build then succeeded. You most have figured this out to as you got the module built. I will fix this somehow in the Makefile. I am not getting the same undefined symbol you are. I am getting sg_page symbol not found. I recognize this symbol as part of my update, it was a kernel changeover in 2.6.22 (I believe) which I am running 2.6.22-14. I converted the code sg_page(sg) back to sg->page and I got the module build and insmod'd without error. I will have to upgrade my kernel to 2.6.24-4-x86 to see how it builds on that. I have a feeling that your compile problem is related to your kernel config. I think I had to change some kernel settings to get it to compile on my machine. Here are a few config options that I remember were relevant: Symmetric Multiprocessing Support - on Preemption support - voluntary I think the most important one was the SMP support and should be on. If you send me your email in a private message, I will send you a copy of my current kernel config for my 64 bit station. Other than 64bit cpu selected, the other options would be the same. I will try to get my kernel upgraded this weekend on the 32bit workstation. Colin |
The good news:
I sent my email to you in a private message, but I've solved the problem just now (for me anyway). At line 1806 in linux/osd_main.c - u64 cylinders; + u32 cylinders; u64 simply needs to be changed to u32. Once this is done, I'm able to insmod it just fine. Now obviously you're going to want to add something in the nature of: #if defined(CONFIG_X86_64) u64 cylinders; #else u32 cylinders; #endif Bad News: Although the module compiles and inserts into the kernel, I'm still unable to see any devices connected to the controller. Were you actually able to see any drive connected to it? Keep in mind that during boot the drive is detected. Once in linux, I load the module, dmesg (and see that it worked) but where is the drive??? |
(this is a portion of a private email posted here for other users)
I am very glad to see you got in inserted. I didn’t modify the line you speak of, so it seems it was meant to be that way in 32bit kernels too. Likely what happened is when you modified that line, the 64bit division turned into 32bit division which this has been available for almost ever, so no linking problems. Still curious, is your problems with the 64bit division function. However, 32 bits should be fine too as long as your drive container (in the Promise Array Utility) does not report more than 2^32 cylinders. Once I compiled and insmod'd the module I was able to see the drive immediately. This was using the Linux Live CD too, which I used to build the module so I could later insert it during the install process. (During the install you can go to another vterm, like Alt-Ctrl-F2, do your insmod, then back to the install vterm and continue the install process, then later when the install finishes but before your reboot, you update the initrd with it too using the other vterm. may sound complex, but pretty easy actually.) You did create a container in your Promise Array utility/setup that appears during POST right? If you didn’t create a container, then you wouldn’t see any drives, even if just a single drive is on the controller I don’t think it automatically creates a container or virtual device for it. btw: I noticed the controller emulates a scsi devices. My drive shows up as /dev/sda. But if I put my old PATA drive in, then my SATA drives becomes sdc, but luckily linux now uses the drive UUID if specified in fstab, so it boots fine no matter what the /dev/sd is. Colin |
No, I did not create a container for it. It posted the drive as JBOD (which is fine) because I don't plan on using it at the moment for any actual RAID setup. I'll try that and post the results back here.
|
Still a no go. I'm not exactly sure what you meant by "create a container for it" unless you assumed I had multiple devices plugged into the controller. It's simply 1, 500GB HDD. When I 'ls /dev/sd*' or 'ls /dev/hd*' or even 'ls /dev/md*' all I see it what was there previously. Obviously I'm not doing something right. What version BIOS do you have on your board? I ask because I recently upgraded to v1.4.
Hmm...could it possibly be that the driver isn't setup to handle JBOD? Perhaps I would actally have to have both of my 500's hooked up and define an array? Just speculating.... |
Quote:
When I reboot, the card hooks the BIOS and initializes itself. It posts a "Press Ctrl-? to enter Promise Array Setup" or something like that. Inside that it lists the hard drives attached and how I want to combine those hard drives. In my case I took my three identical drives of 320GB and made a container of 640GB RAID 5 (1 lost drive, 2+1 config). A container is just promise's term for a *virtual* hard drive that spans 1 or more drives. You could even have 1 container that spans the first half of three drives, and another that spans the latter half of the three drives. I am not sure what the card would report to BIOS if I didnt create the container. Maybe it would report as three dries hda,hdb,hdc, I dont know, maybe it would not report any drives at all until I at least created a container on one of the drives. I cant find out now without deleting my config. Quote:
http://forum.msi.com.tw/ These forums are quite active and have some *really* smart people on there. They are mostly over-clockers and they understand the ins and outs of memory & pci timing to a great deal! I am still having a few stupid problems with my motherboard, not sure I am happy with it. For example, I still cant reboot my machine without unplugging all usb devices or my promise card init locks up. I have the most recent firmware for both the promise card and the MB but no go. Other people are complaining about usb probs with my MB too. My memory was only detected as 800MHz versus 1000MHz, but the guys on the forum had the answer for that. I have the same username on there. Quote:
|
I think that just answered my question. I was under the impression we were both using the same motherboard..haha. I have the MSI K9A2 Platinum. So the problem is the different revision of the Promise BIOS. That, and I have an integrated controller, yours' is simply an add-on card.
Oh well...it was worth a shot. I'll try the MSI forums and see what I can come up with. Thanks for all your help, I'm sure the people with your particular card will find this thread very useful. |
Working on same problem
Hi viron and guru...
I too am a proud owner of a k9a2 platinum board. So...I have the same concerns. I just got the puter assembled and don't even have a 64 bit linux yet to try on it. That said..I booted a 32 bit Kubuntu 8.04 to see what would happen. viron make sure you hit Cntl-F when the Promise bios come up. I'm sure you have to create a raid configuration so the controller knows you have disks... I did and at every boot the bios reports the disk I have. My setup is slightly different than both of you as I bought a Fujitsu 73 G 15k rpm SAS drive. The controller seems to like it because I hear it spin up when the Bios checks for it. (if you buy a SAS drive you need a special cable tho SAS to SATA (get at scsi4me.com)) I have one issue as I only have this one hard drive installed in the box. I'll have to work at getting a distro installed on it. I probably will attach with usb for the time being while sorting out the drive. This is like a flashback for me. I haven't panic'd a kernel since '93 when I was trying to get my UltraStor34 scsi controller installed on 1.0.13. I checked the bootlog and the pci and they duly report the promise as registered but 'unknown'..so I imagine with some driver tweaking it should work. Oh and Guru..I sent you an email on your website...I'm in St. Pete too. |
Hi guys!
guru_stpetebeach, great work! [Removed] Edit: I removed the previous post as I did not see guru_stpetebeach's guide on his webpage before now. I'll try the steps described there :-) |
Solution for MSI K9A2
To get this working for the MSI K9A2 board, you need to make one adjustment to guru_stpetebeach's code. The vendor id is incorrect for the PDC42819 chip that is included on the MSI mainboard.
In linux/osd_main.c Find the line: { 0x105a, 0x3f20, 0x105a, 0x3716, 0, 0, 0 }, //FastTrak PDC42819; SubDeviceID 3F20 -> 3716(20070625) and change it to: { 0x105a, 0x3f20, 0x1462, 0x3716, 0, 0, 0 }, //FastTrak PDC42819; SubDeviceID 3F20 -> 3716(20070625) recompile and install this module. You will have to at least make your drives JBOD (from the RAID BIOS utility) to be recognized. I obtained this information by issuing lspci -vv -nn in a shell. This will cause the PCI string in the generated t3sas.mod.c to include an identifier for the MSI board and it will match now. Enjoy! Jim |
Awesome!We should be able to add a new PCI line instead of modifying the existing one. I will look into it. I will also post a note to this thread from my website so MSI MB owners will know what to do.
Thanks, C |
I cant download your driver the WwW says something about administrator editing files:\
|
I dont know what was wrong, I got the same error too. I recently moved my web site as the old server is being rebuilt and having problems with it.
It is working now though, I refreshed the files within my website CMS. |
i have the driver but i cant make it on ubuntu 8.04 probobly b'cuz im to new to ubuntu :\
|
Quote:
I am using 8.04 ubuntu on 64bit arch. If you are using the 64bit arch, I can send you my binary module and it should work fine. Send me your email address by personal message. C |
Hi guys,
I'm having a few problems setting up the tx4650 card. I'm running fedora 9 64bit. (2.6.25.4-30.fc8.x86_64 kernel) When compiling a get a pile of errors. They start with Code:
[root@localhost tx4650]# make Cheers, Chris |
Hi Chris,
I think I had this error when I first compiled the source as well. Are you using the src from the Promise site or my web site? The src from Promise is old and unmaintained since 2.6.18. I've updated it to the new kernels but it's not guaranteed with all kernel versions yet...but people seem to get it compiled on recent kernels with a little tweaking. There are instruction in the error message to run "make oldconfig". I think this message appears when the ".config" file you should have copied into the kernel source dir is from an older kernel version than the one you are compiling...thus some options may be deprecated or new options missing/not specified. Running "make menuconfig" will run a nice text menu config program that allows you to see the config file settings and you can resave the config file which will refreshen the config file. Then run "make" and the error should dissappear. You might want to go through some of the settings in the config file, especially processor, select the settings that will give you the most performance by enabling newer cpu options, etc, instead of going with the generic cpu settings. C Quote:
|
No longer compiles as of 2.6.24.10
This module no longer compiles as of kernel 2.6.24.10. Reference the following error messages:
tx4650/linux/osd_main.c:953: error: 'Scsi_Cmnd' has no member named 'use_sg' tx4650/linux/osd_main.c:954: error: 'Scsi_Cmnd' has no member named 'request_buffer' tx4650/linux/osd_main.c:1184: error: 'Scsi_Cmnd' has no member named 'request_bufflen' |
Quote:
Replace occurrences of cmd->request_buffer with scsi_sglist(cmd), occurrences of cmd->use_sg with scsi_sg_count(cmd), and occurrences of cmd->request_bufflen with scsi_bufflen(cmd) in linux/osd_main.c I would post a patch for you but linuxquestions munges the whitespace so it would be unusable. If you would like I could send you one. Hope this helps! |
Okay, you can download the patch from here:
http://www.geocities.com/mdnelson8/fixup-scsi-stuff.txt [seems that geocities doesn't like the .patch extension, thus .txt] <rant> To apply the patch download it and run the following from your tx4650 directory: cat <path to patch> | patch -p1 eg: cat ~/fixup-scsi-stuff.txt | patch -p1 If you later want to revert the changes caused by the patch give the -R option to patch. Or you can make the changes yourself and then use the patch to verify that you've got all occurrences. And to keep track of patches you can use quilt: http://savannah.nongnu.org/projects/quilt Or even git :) </rant> |
Hi all
I'm hoping at least some of you are still monitoring this thread and can help me out. I have a MSI K9A2 Platinum. I would like to start using the eSATA ports to backup my data. However these ports are controlled by the Promise T3 FastTrack PDC42819 RAID controller. Currently I'm running Ubuntu 8.04 (kernel 2.6.24-3). At first I thought it just needed a drive connected up to work, but upon reading this I am not so sure. As a piece of additional information "lshw" outputs this: Code:
*-storage UNCLAIMED I am relatively proficient with Ubuntu, but I would definitely need help installing something like this. If someone could help me out, maybe let me know where I can download the files I require, and give me some guidance on what steps need to be taken to get this controller running that would be awesome. I am amazed at how far you guys have taken this driver and I hope that this is an answer to my problem. |
Quote:
If you're just going to use SATA disks you can use the AHCI driver, but this driver was patched with support for the T3 in AHCI mode only in kernel version 2.6.28 and onwards. Are you able to update your kernel? |
Quote:
I have never tried updating a kernel, but I could look up a guide and give it a go. If I make a pigs-ear of it I can always fall back on the old 2.6.24 kernel. I would be much more comfortable updating a kernel than messing with driver code, I'm sure there are plenty of explanatory guides to getting a new kernel running. I have never gone out of my way to learn how drivers work in Linux, I have been using it for under a year and all I've messed with are graphics drivers and some wifi drivers. These tend to come in pre-packaged .deb form. I do have some java experience, but I have never looked at code for drivers. Is there some sort of guide I could follow to get the Promise functioning under the new kernel with AHCI, or are there really no extra options required for this? Thank you very much for your response. Is the kernel update something that you would recommend? Alternatively I could bring the entire machine onto Jaunty Jackalope 9.04, I have it running on another machine and it is really fast. It runs 2.6.28. Would the promise run on AHCI under Jaunty out of the box, or would some tweaking be needed during the install? |
Excellent - seeing as you're not planning to use SAS disks you don't need anything that an updated AHCI driver can't give you. And you also won't have to use Promise's binary driver.
If you're using a kernel that has a new enough AHCI driver (>= 2.6.28) you don't need to use any special or extra options at all and you won't need to do any tweaking - when the driver gets loaded you'll just suddenly have four more SATA ports and your drives should be discovered. As long as you don't have any requirements that mean you need to run a 2.6.24 kernel, I would suggest updating the kernel (your other alternative is to patch your current 2.6.24 kernel if you don't want to update your kernel and userspace and rebuild the kernel, initrd, etc). Or, alternatively if you don't depend on any old packages from 8.04 (and don't mind updating the whole Ubuntu installation) then bringing your Ubuntu installation up to 9.04 would work as well as it would pull in a new enough kernel to give you a working and useful T3 controller. |
super frustrating
I've been following this thread for some time and have tried every possible solution to get these two ports on my mobo to work but no matter what I can't get the driver to compile. I even applied the patch to it that was listed here and I just get different errors now. I have been using linux for some time and I try to not get stuck on things like this, but this time I'm clearly in over my head. Could someone please help me get this done? I also followed the instructions in the error and attempted to run make oldconfig && make prepare on the kernel source but that recieved a multitude of errors as well. I'm at my wits end with this problem. All I want is to be able to add a couple hard drives to my system and have them work... :( I can't seem to find anywhere to attach a txt file to show my errors so I'll just post the last few lines:
/opt/tx4650/linux/osd_main.c:1134:5: warning: "VDEBUG" is not defined /opt/tx4650/linux/osd_main.c:1218:5: warning: "VDEBUG" is not defined /opt/tx4650/linux/osd_main.c:1222:5: warning: "VDEBUG" is not defined /opt/tx4650/linux/osd_main.c: In function ‘t3_probe’: /opt/tx4650/linux/osd_main.c:2002: error: ‘SA_SHIRQ’ undeclared (first use in this function) /opt/tx4650/linux/osd_main.c:2002: error: (Each undeclared identifier is reported only once /opt/tx4650/linux/osd_main.c:2002: error: for each function it appears in.) /opt/tx4650/linux/osd_main.c:2022: warning: statement with no effect /opt/tx4650/linux/osd_main.c: At top level: /opt/tx4650/linux/osd_main.c:2088: warning: function declaration isn’t a prototype /opt/tx4650/linux/osd_main.c: In function ‘t3_remove’: /opt/tx4650/linux/osd_main.c:2110: warning: statement with no effect /opt/tx4650/linux/osd_main.c: In function ‘t3_shutdown_1’: /opt/tx4650/linux/osd_main.c:2130: warning: statement with no effect /opt/tx4650/linux/osd_main.c: In function ‘t3_shutdown_2’: /opt/tx4650/linux/osd_main.c:2142: warning: statement with no effect make[2]: *** [/opt/tx4650/linux/osd_main.o] Error 1 make[1]: *** [_module_/opt/tx4650] Error 2 |
What distro are you using, which kernel?
As was mentioned previously kernels >= 2.6.28 come with an updated AHCI driver that supports the Promise controller. Most distros these days are running 2.6.28 or greater so updating should solve the problem assuming that you don't need to run an SAS device because that isn't supported on the AHCI driver. The great thing about that is that you then don't need to mess with the Promise drivers at all, solving the whole need to get them to compile. Personally I've decided to backup everything using an extra drive on the last space on my currently working controller. I have found that Ubuntu 9.04 is a little too unstable so I will wait for 9.10 (as far as I recall it is actually an LTS version as well so even better for me). I will then backup everything I need, wipe the drives and move to 9.10 thus hopefully solving my problem. Just means I need to keep the backup drive mounted in the chassis for now, but I can live with that as I don't need to remove it unless there is a crash. I am really glad this thread exists though because I was really getting worried that I would never have managed to sort this out. It is great to know that there are people that can help. |
RE:
ubuntu 9.04, 2.6.28-11, all sata drives
[EDIT] I ran some updates, then reset the machine and poked around in the bios until I found the setting for the controller that specifies AHCI, RAID, or IDE. I set it to AHCI and then reset and ran the raid config utility and set a drive I plugged in as JBOD and then after resetting again to my surprise, the drive worked! I'm stoked now that I can order myself a couple of 1TB drives and continue doing backups for my home network. I wonder if I could get a RAID 0 working on those two ports? Because the AHCI driver is being used, should I always leave it on AHCI setting in the bios? Does this mean I can only use the controller as JBOD? I just want to get things straight before I decide on a permanent setup. |
All times are GMT -5. The time now is 10:42 AM. |