Sometimes if an older model drive is no longer available and Dell still has customers with purchase commitments for the unavailable drive, Dell will have the manufacturer do things like report only half capacity (Seagate 3.5" 146GB 15K RPM drives of the model Dell was using went out of production, so they ordered the next-generation drives which had a minimum capacity of 300GB. The old drives were 3Gbps, the newer replacements were 6Gbps. Dell had Seagate change the reported model number of the new drives to end in "HH2" and to set the capacity to 146GB and the speed to 3Gbps.
If the drives you have aren't that sort of thing, then a firmware update may get them working at full speed. You'll want the Dell Nautilus utility (A.49 is the latest non-UEFI one, and I don't remember the version for UEFI - might be something like A.12). It should upgrade any Dell drive that is out-of-rev, as long as it is connected to a Dell controller in a Dell system. If that doesn't describe your situation, download the specific drive update utility (not the catch-all Nautilus) for Linux. If you aren't running Linux, you can boot from a LiveCD image or the obsolete Dell CDU 2.2 disk (press F3 to get a console prompt). Then do something like this:
On another computer, put the contents of the specific updater onto a MS-DOS formatted USB stick. Take that stick and plug it in an open USB port on the computer where the drive needs to be updated. Say something like mount -t msdos /dev/sdb1 /mnt. Then do a ls /mnt to make sure it is there. Now, instead of just running the update utility with no arguments, run it as /mnt/utilityname --extract /foo. In the foo directory, you'll now find all of the components to the update unpacked and ready for you. You'll have a bunch of shell scripts in /foo, the actual firmware will normally be in /foo/payload, and any other files like libraries will be in some place like /foo/lib. The shell scripts do a lot of sanity checking, but you can override some of the checks with command line arguments like --force (the particular arguments and their effects are only documented in the shell script). Sometimes you need to comment out a test and change something like "return $status" to "return $success" to bypass checking thinks like the system model. If you're technical and a decent shell hacker, you'll probably go "OK, easy!". If you aren't, you'll probably go "WTF was all that?".