| To: | linux-mips@linux-mips.org |
|---|---|
| Subject: | Linux kernel 2.6.20, PCI and hpt266 |
| From: | "Marco Braga" <marco.braga@gmail.com> |
| Date: | Sun, 4 Mar 2007 13:27:37 +0100 |
| Dkim-signature: | a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type; b=az89yB9YBI9ZnX2G9Be1TQ5AKO71asiwlhhJVoVACojvp81gN5HvBT87acWhKElE5hSQ2KM8mu5ngjRRtL5bKulrpYZEfAFP89+4mie6I50kBBMglQp5DPFZXgq41nPI9kNDby09+A+Hate5vogYO1ji4hwaMNjNmjpPW6on46k= |
| Domainkey-signature: | a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type; b=iJOokR0xIHHDuBocAiBzTza6Ue4odppLjh0FEsTmPpBVDMYydUiNldZiBMTiyboVgEamks/JHLZ9jLZUEdMRGF2xHYzoMAztuo3FmZCy/A4TwxtEYdOq7UA3DE5Kx5ycrbkYC0QNEQZe2eiTIuVIX8sFqkyqZCPW/0Ks10EKGns= |
| Original-recipient: | rfc822;linux-mips@linux-mips.org |
| Sender: | linux-mips-bounce@linux-mips.org |
|
Hello, I am trying to run kernel 2.6.20 on an Au1500 based board. Versions 2.4.x of the kernel are correctly working. Problem: on the board there is a HighPoint 371N ATA controller. At the moment the kernel 2.6.20 boots and runs, but the ATA controller does not recognize the IDE disk. Details: The driver I use is "drivers/ide/pci/hpt266.c". I've already fixed the timing problems and PLL configuration that afflict this controller, and removed RESOURCE_64BIT to fix problems with the PCI bus on mips and resource_size_t casts. I've managed to follow the problem to ide-probe.c, in function "actual_try_to_identify". It seems that the values read from the ATA registers through IO ports are not correct. As every ATA controller, it needs 8 bytes in IO port space for Command Block registers, and 4 bytes for the Control Block registers. They are mapped by the kernel at: 1400-1407 (8 bytes) Command block channel 0 1408-140F (8 bytes) Command block channel 1 1410-1413 (4 bytes) Control block channel 0 1414-1417 (4 bytes) Control block channel 1 Notice that Highpoint 371N has registers for 2 channel, but the pinout for only 1 channel. In fact the first channel is disabled by the driver, so the actual registers are in the range 1408-140F and 1414-1417. The first sign of the problem is that INB do not read the correct values for the ALTSTATUS register. In fact the kernel reports: ... probing with STATUS(...) instead of ALTSTATUS(...) [as in ide-probe.c, line 290] The values read from the ATA registers are completely wrong. The registers are accessed through hwif->INB, that are common "inb" functions. This makes me suspect that "inX" functions are not working, but I don't know how to test this. Notice that the PCI controller configuration space is correctly accessed, as I can confirm reading sys/bus/pci/.../config. Can you help or suggest me anything? Thanx! |
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | Re: Creating infrastructure to allow one kernel for multiple machines, Ralf Baechle |
|---|---|
| Next by Date: | [PATCH] Remove redundant tx39_blast_icache() calls, Atsushi Nemoto |
| Previous by Thread: | Re: Creating infrastructure to allow one kernel for multiple machines, Ralf Baechle |
| Next by Thread: | Re: Linux kernel 2.6.20, PCI and hpt266, Sergei Shtylyov |
| Indexes: | [Date] [Thread] [Top] [All Lists] |