From: Richard Henderson <rth@twiddle.net>
To: Bjoern Brauel <bjb@gentoo.org>
Cc: marcelo@conectiva.com.br, linux-kernel@vger.kernel.org
Subject: Re: patch: linux-2.4.20 alpha broken cia(rev1) fix
Date: Sun, 1 Dec 2002 23:33:09 -0800 [thread overview]
Message-ID: <20021201233309.A32203@twiddle.net> (raw)
In-Reply-To: <3DE7A5F4.5030503@gentoo.org>; from bjb@gentoo.org on Fri, Nov 29, 2002 at 06:37:56PM +0100
On Fri, Nov 29, 2002 at 06:37:56PM +0100, Bjoern Brauel wrote:
> The attached patch fixes the initialization for CIA revision 1 chips
> that can be found on most Alcor machines. As it is impossible to boot
> such a box together with the Qlogic ISP SCSI controller without this
> patch I believe it is important to include it in the official kernel.
Try this version instead. Control structures should not be
replicated in different functions like that. It's a sure
recipie for one of them getting out of sync.
r~
===== arch/alpha/kernel/core_cia.c 1.6 vs edited =====
--- 1.6/arch/alpha/kernel/core_cia.c Mon Feb 4 23:52:51 2002
+++ edited/arch/alpha/kernel/core_cia.c Sun Dec 1 23:26:06 2002
@@ -370,7 +370,7 @@
}
static inline void
-cia_prepare_tbia_workaround(void)
+cia_prepare_tbia_workaround(int window)
{
unsigned long *ppte, pte;
long i;
@@ -382,10 +382,10 @@
for (i = 0; i < CIA_BROKEN_TBIA_SIZE / sizeof(unsigned long); ++i)
ppte[i] = pte;
- *(vip)CIA_IOC_PCI_W1_BASE = CIA_BROKEN_TBIA_BASE | 3;
- *(vip)CIA_IOC_PCI_W1_MASK = (CIA_BROKEN_TBIA_SIZE*1024 - 1)
- & 0xfff00000;
- *(vip)CIA_IOC_PCI_T1_BASE = virt_to_phys(ppte) >> 2;
+ *(vip)CIA_IOC_PCI_Wn_BASE(window) = CIA_BROKEN_TBIA_BASE | 3;
+ *(vip)CIA_IOC_PCI_Wn_MASK(window)
+ = (CIA_BROKEN_TBIA_SIZE*1024 - 1) & 0xfff00000;
+ *(vip)CIA_IOC_PCI_Tn_BASE(window) = virt_to_phys(ppte) >> 2;
}
static void __init
@@ -605,8 +605,7 @@
do_init_arch(int is_pyxis)
{
struct pci_controller *hose;
- int temp;
- int cia_rev;
+ int temp, cia_rev, tbia_window;
cia_rev = *(vip)CIA_IOC_CIA_REV & CIA_REV_MASK;
printk("pci: cia revision %d%s\n",
@@ -715,8 +714,20 @@
are compared against W_DAC. We can, however, directly map 4GB,
which is better than before. However, due to assumptions made
elsewhere, we should not claim that we support DAC unless that
- 4GB covers all of physical memory. */
- if (is_pyxis || max_low_pfn > (0x100000000 >> PAGE_SHIFT)) {
+ 4GB covers all of physical memory.
+
+ On CIA rev 1, apparently W1 and W2 can't be used for SG.
+ At least, there are reports that it doesn't work for Alcor.
+ In that case, we have no choice but to use W3 for the TBIA
+ workaround, which means we can't use DAC at all. */
+
+ tbia_window = 1;
+ if (is_pyxis) {
+ *(vip)CIA_IOC_PCI_W3_BASE = 0;
+ } else if (cia_rev == 1) {
+ *(vip)CIA_IOC_PCI_W1_BASE = 0;
+ tbia_window = 3;
+ } else if (max_low_pfn > (0x100000000 >> PAGE_SHIFT)) {
*(vip)CIA_IOC_PCI_W3_BASE = 0;
} else {
*(vip)CIA_IOC_PCI_W3_BASE = 0x00000000 | 1 | 8;
@@ -728,7 +739,7 @@
}
/* Prepare workaround for apparently broken tbia. */
- cia_prepare_tbia_workaround();
+ cia_prepare_tbia_workaround(tbia_window);
}
void __init
===== include/asm-alpha/core_cia.h 1.4 vs edited =====
--- 1.4/include/asm-alpha/core_cia.h Mon Feb 4 23:55:11 2002
+++ edited/include/asm-alpha/core_cia.h Sun Dec 1 20:23:23 2002
@@ -202,6 +202,10 @@
#define CIA_IOC_PCI_W3_MASK (IDENT_ADDR + 0x8760000740UL)
#define CIA_IOC_PCI_T3_BASE (IDENT_ADDR + 0x8760000780UL)
+#define CIA_IOC_PCI_Wn_BASE(N) (IDENT_ADDR + 0x8760000400UL + (N)*0x100)
+#define CIA_IOC_PCI_Wn_MASK(N) (IDENT_ADDR + 0x8760000440UL + (N)*0x100)
+#define CIA_IOC_PCI_Tn_BASE(N) (IDENT_ADDR + 0x8760000480UL + (N)*0x100)
+
#define CIA_IOC_PCI_W_DAC (IDENT_ADDR + 0x87600007C0UL)
/*
next prev parent reply other threads:[~2002-12-02 7:26 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-11-29 17:37 patch: linux-2.4.20 alpha broken cia(rev1) fix Bjoern Brauel
2002-12-02 7:33 ` Richard Henderson [this message]
2002-12-02 21:23 ` Folkert van Heusden
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20021201233309.A32203@twiddle.net \
--to=rth@twiddle.net \
--cc=bjb@gentoo.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marcelo@conectiva.com.br \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.