Hello, Trying to figure out if it the payloads (filo) or coreboots resposiblity to detect a 40 or 80 ribbon IDE cable. Reading the ATA specifications it looks like a IDENTIFY_DRIVE command query to the drive is the way it detects this and then the bios sets this in the IDE pci configuration register. Right now, it does not detect this and when the Linux IDE driver takes over it only runs at ATA33 not ATA100.
For coreboot to automate this it would have to a IDENTIFY_DRIVE command query to the drive and then set IDE pci configuration register. Would this be possible to do pre payload or is this something that would have to be set manually. If manual could we impliment a global setting??
something like: IDE_CABLE = 40 or 80
Thanks - Joe
On Fri, Feb 22, 2008 at 8:15 AM, joe@smittys.pointclark.net wrote:
For coreboot to automate this it would have to a IDENTIFY_DRIVE command query to the drive and then set IDE pci configuration register. Would this be possible to do pre payload or is this something that would have to be set manually. If manual could we impliment a global setting??
I hate to say this, but I think we need to do this in the code for that chip. Whicdh chipset is this again?
ron
Quoting ron minnich rminnich@gmail.com:
On Fri, Feb 22, 2008 at 8:15 AM, joe@smittys.pointclark.net wrote:
For coreboot to automate this it would have to a IDENTIFY_DRIVE command query to the drive and then set IDE pci configuration register. Would this be possible to do pre payload or is this something that would have to be set manually. If manual could we impliment a global setting??
I hate to say this, but I think we need to do this in the code for that chip. Whicdh chipset is this again?
ron
It is the Intel 82801DB ICH4 chipset. I think most of the ICH's are the same on this. So are you saying this can be set in filo, or coreboot?
IDE_CONFIG?IDE I/O Configuration Register(IDE?D31:F1) Address Offset: 54h Attribute: R/W Default Value: 00h Size: 32 bits
Bit 7 Secondary Slave Channel Cable Reporting ? R/W. BIOS should program this bit to tell the IDE driver which cable is plugged into the channel. 0 = 40 conductor cable is present. 1 = 80 conductor cable is present. Bit 6 Secondary Master Channel Cable Reporting ? R/W. Same description as bit 7 Bit 5 Primary Slave Channel Cable Reporting ? R/W. Same description as bit 7 Bit 4 Primary Master Channel Cable Reporting ? R/W. Same description as bit 7
Thanks - Joe
On Fri, Feb 22, 2008 at 9:15 AM, joe@smittys.pointclark.net wrote:
It is the Intel 82801DB ICH4 chipset. I think most of the ICH's are the same on this. So are you saying this can be set in filo, or coreboot?
I think coreboot has to do it ... if the kernel can not.
ron
Quoting ron minnich rminnich@gmail.com:
On Fri, Feb 22, 2008 at 9:15 AM, joe@smittys.pointclark.net wrote:
It is the Intel 82801DB ICH4 chipset. I think most of the ICH's are the same on this. So are you saying this can be set in filo, or coreboot?
I think coreboot has to do it ... if the kernel can not.
ron
Ok then, I think it may complicate things too much if we had a IDENTIFY_DRIVE command query to the drive (Note: this command query is also used for DMA settings). That would be like basicly re-writing an IDE driver??
So, I propose a global option (IDE_CABLE = 40 or 80) that can easily be adjusted from Config.lb in the targets directory, that sets the value for a simple function in src/southbridge/intel/i82801xx/i82801xx_ide.c. Does that make sense?
Thanks - Joe
On Fri, Feb 22, 2008 at 01:13:25PM -0500, joe@smittys.pointclark.net wrote:
Ok then, I think it may complicate things too much if we had a IDENTIFY_DRIVE command query to the drive (Note: this command query is also used for DMA settings). That would be like basicly re-writing an IDE driver??
So, I propose a global option (IDE_CABLE = 40 or 80) that can easily be adjusted from Config.lb in the targets directory, that sets the value for a simple function in src/southbridge/intel/i82801xx/i82801xx_ide.c. Does that make sense?
I'd really prefer something that's autosensing, if that's possible, so that changing hard drives does not cause problems or require a bios flash...
Thanks, Ward.
Quoting Ward Vandewege ward@gnu.org:
On Fri, Feb 22, 2008 at 01:13:25PM -0500, joe@smittys.pointclark.net wrote:
Ok then, I think it may complicate things too much if we had a IDENTIFY_DRIVE command query to the drive (Note: this command query is also used for DMA settings). That would be like basicly re-writing an IDE driver??
So, I propose a global option (IDE_CABLE = 40 or 80) that can easily be adjusted from Config.lb in the targets directory, that sets the value for a simple function in src/southbridge/intel/i82801xx/i82801xx_ide.c. Does that make sense?
I'd really prefer something that's autosensing, if that's possible, so that changing hard drives does not cause problems or require a bios flash...
It wouldn't cause any issues changing the drive. Were just talking about the cable. If you use an ATA33 drive on a 80 pin cable it works fine it just runs at ATA33 speed. My problem is I have an ATA100 drive and 80 pin cable but Linux thinks I have a 40 pin cable therefore it is only running at ATA33 speed.
Thanks - Joe
On Fri, Feb 22, 2008 at 01:56:34PM -0500, joe@smittys.pointclark.net wrote:
I'd really prefer something that's autosensing, if that's possible, so that changing hard drives does not cause problems or require a bios flash...
It wouldn't cause any issues changing the drive. Were just talking about the cable. If you use an ATA33 drive on a 80 pin cable it works fine it just runs at ATA33 speed. My problem is I have an ATA100 drive and 80 pin cable but Linux thinks I have a 40 pin cable therefore it is only running at ATA33 speed.
So not running at the right speed is a bug, right? I'd prefer if a user didn't have to flash her bios just to get their drive to run at the correct speed...
Though, arguably this is perhaps somewhat academic nowadays - IDE is well past its prime.
Thanks, Ward.
Quoting Ward Vandewege ward@gnu.org:
On Fri, Feb 22, 2008 at 01:56:34PM -0500, joe@smittys.pointclark.net wrote:
I'd really prefer something that's autosensing, if that's possible, so that changing hard drives does not cause problems or require a bios flash...
It wouldn't cause any issues changing the drive. Were just talking about the cable. If you use an ATA33 drive on a 80 pin cable it works fine it just runs at ATA33 speed. My problem is I have an ATA100 drive and 80 pin cable but Linux thinks I have a 40 pin cable therefore it is only running at ATA33 speed.
So not running at the right speed is a bug, right? I'd prefer if a user didn't have to flash her bios just to get their drive to run at the correct speed...
Though, arguably this is perhaps somewhat academic nowadays - IDE is well past its prime.
Maybe it is, but just about every motherboard still has it, and what's the point of having it if you can't use it the way it is supposed to be used.
Thanks - Joe
On Fri, Feb 22, 2008 at 02:23:19PM -0500, joe@smittys.pointclark.net wrote:
Though, arguably this is perhaps somewhat academic nowadays - IDE is well past its prime.
Maybe it is, but just about every motherboard still has it, and what's the point of having it if you can't use it the way it is supposed to be used.
Yes, agreed. Every component of the board should be fully functional...
Thanks, Ward.
Quoting joe@smittys.pointclark.net:
Quoting ron minnich rminnich@gmail.com:
On Fri, Feb 22, 2008 at 9:15 AM, joe@smittys.pointclark.net wrote:
It is the Intel 82801DB ICH4 chipset. I think most of the ICH's are the same on this. So are you saying this can be set in filo, or coreboot?
I think coreboot has to do it ... if the kernel can not.
ron
Ok then, I think it may complicate things too much if we had a IDENTIFY_DRIVE command query to the drive (Note: this command query is also used for DMA settings). That would be like basicly re-writing an IDE driver??
After some futher reading, I don't know if this would even be possible with coreboot. It would have to be done with filo (file does this command query anyways and prints out the drive model number) when the drives are fully initialized. Looks like senerio number two...
So, I propose a global option (IDE_CABLE = 40 or 80) that can easily be adjusted from Config.lb in the targets directory, that sets the value for a simple function in src/southbridge/intel/i82801xx/i82801xx_ide.c. Does that make sense?
If there are no objections I will submit a patch. What coreboot system files need to be modified for a global option?
Thanks - Joe
On 22.02.2008 21:03, joe@smittys.pointclark.net wrote:
Quoting joe@smittys.pointclark.net:
Quoting ron minnich rminnich@gmail.com:
On Fri, Feb 22, 2008 at 9:15 AM, joe@smittys.pointclark.net wrote:
It is the Intel 82801DB ICH4 chipset. I think most of the ICH's are the same on this. So are you saying this can be set in filo, or coreboot?
I think coreboot has to do it ... if the kernel can not.
ron
Ok then, I think it may complicate things too much if we had a IDENTIFY_DRIVE command query to the drive (Note: this command query is also used for DMA settings). That would be like basicly re-writing an IDE driver??
After some futher reading, I don't know if this would even be possible with coreboot. It would have to be done with filo (file does this command query anyways and prints out the drive model number) when the drives are fully initialized. Looks like senerio number two...
So, I propose a global option (IDE_CABLE = 40 or 80) that can easily be adjusted from Config.lb in the targets directory, that sets the value for a simple function in src/southbridge/intel/i82801xx/i82801xx_ide.c. Does that make sense?
If there are no objections I will submit a patch. What coreboot system files need to be modified for a global option?
Can you please check with the Linux IDE guys? The matter is horribly complicated because you have to check whether the 80-wire cable was detected by the controller and check the same for the drive. linux-ide@vger.kernel.org is the address you want to write to and the experts there can tell you exactly what the BIOS is expected to do.
Regards, Carl-Daniel
Quoting Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net:
On 22.02.2008 21:03, joe@smittys.pointclark.net wrote:
Quoting joe@smittys.pointclark.net:
Quoting ron minnich rminnich@gmail.com:
On Fri, Feb 22, 2008 at 9:15 AM, joe@smittys.pointclark.net wrote:
It is the Intel 82801DB ICH4 chipset. I think most of the ICH's are the same on this. So are you saying this can be set in filo, or coreboot?
I think coreboot has to do it ... if the kernel can not.
ron
Ok then, I think it may complicate things too much if we had a IDENTIFY_DRIVE command query to the drive (Note: this command query is also used for DMA settings). That would be like basicly re-writing an IDE driver??
After some futher reading, I don't know if this would even be possible with coreboot. It would have to be done with filo (file does this command query anyways and prints out the drive model number) when the drives are fully initialized. Looks like senerio number two...
So, I propose a global option (IDE_CABLE = 40 or 80) that can easily be adjusted from Config.lb in the targets directory, that sets the value for a simple function in src/southbridge/intel/i82801xx/i82801xx_ide.c. Does that make sense?
If there are no objections I will submit a patch. What coreboot system files need to be modified for a global option?
Can you please check with the Linux IDE guys? The matter is horribly complicated because you have to check whether the 80-wire cable was detected by the controller and check the same for the drive. linux-ide@vger.kernel.org is the address you want to write to and the experts there can tell you exactly what the BIOS is expected to do.
Regards, Carl-Daniel
OK, but amazingly intel was nice enough to provide this doc:
http://www.intel.com/design/chipsets/manuals/298600.htm
Intel® 82801EB (ICH5), 82801ER (ICH5R), 82801DB (ICH4), 82801CA (ICH3), 82801BA (ICH2), 82801AA (ICH), and 82801AB (ICH0) IDE Controller Programmer?s Reference Manual
I tells us alot about what the BIOS is expected to do. I suppose I could take chunks of code out of filo and put it in coreboot, but how good would that be with a bunch of duplicated code. Well, I will try the Linux IDE guys, maybe they know a simple way to determine the presence of drives and their capabilities (IDENTIFY_DRIVE Command).
Thanks - Joe
Well, Much to my suprise it looks like pin 34 of the IDE connetor does not assert a signal if the cable is 40 pin and does assert a signal if the cable is 80 pin. This is a standard for all motherboards that support ATA66/ATA100. Now I just have to figure out where this signal is asserted too (maybe a GPIO -> in). Once I figure that out this will be easy. I can just tell coreboot to: read ide cable signal, set ide cable select register bit to 1.
Thanks - Joe
Well, Much to my suprise it looks like pin 34 of the IDE connetor does not assert a signal if the cable is 40
**Correction** conductors
and does assert a signal if the cable is 80
**Correction** conductors
. This is a standard for all motherboards that support ATA66/ATA100. Now I just have to figure out where this signal is asserted too (maybe a GPIO -> in). Once I figure that out this will be easy. I can just tell coreboot to: read ide cable signal, set ide cable select register bit to 1.
Thanks - Joe