public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <bjorn_helgaas@hp.com>
To: linux-ia64@vger.kernel.org
Subject: [Linux-ia64] [PATCH] 1/5 iosapic: make pcat_compat system property
Date: Thu, 20 Feb 2003 18:00:02 +0000	[thread overview]
Message-ID: <marc-linux-ia64-105590709805887@msgid-missing> (raw)

This series of patches is against 2.5.60 + linux-2.5.60-ia64-030212.diff.gz.
I've tested them on a zx1 system, but haven't been able to build a kernel
that works on an i2000 yet.

Make "pcat_compat" a system property, not a per-IOSAPIC property.

diff -u -ur base/arch/ia64/kernel/acpi.c iosapic-2/arch/ia64/kernel/acpi.c
--- base/arch/ia64/kernel/acpi.c	2003-02-18 13:57:43.000000000 -0700
+++ iosapic-2/arch/ia64/kernel/acpi.c	2003-02-18 15:08:09.000000000 -0700
@@ -55,6 +55,7 @@
 asm (".weak iosapic_override_isa_irq");
 asm (".weak iosapic_register_platform_intr");
 asm (".weak iosapic_init");
+asm (".weak iosapic_system_init");
 asm (".weak iosapic_version");
 
 void (*pm_idle) (void);
@@ -335,16 +336,9 @@
 
 	acpi_table_print_madt_entry(header);
 
-	if (iosapic_init) {
-#ifndef CONFIG_ITANIUM
-		/* PCAT_COMPAT flag indicates dual-8259 setup */
-		iosapic_init(iosapic->address, iosapic->global_irq_base,
-			     acpi_madt->flags.pcat_compat);
-#else
-		/* Firmware on old Itanium systems is broken */
-		iosapic_init(iosapic->address, iosapic->global_irq_base, 1);
-#endif
-	}
+	if (iosapic_init)
+		iosapic_init(iosapic->address, iosapic->global_irq_base);
+
 	return 0;
 }
 
@@ -439,7 +433,13 @@
 	acpi_madt = (struct acpi_table_madt *) __va(phys_addr);
 
 	/* remember the value for reference after free_initmem() */
+#ifdef CONFIG_ITANIUM
+	has_8259 = 1; /* Firmware on old Itanium systems is broken */
+#else
 	has_8259 = acpi_madt->flags.pcat_compat;
+#endif
+	if (iosapic_system_init)
+		iosapic_system_init(has_8259);
 
 	/* Get base address of IPI Message Block */
 
diff -u -ur base/arch/ia64/kernel/iosapic.c iosapic-2/arch/ia64/kernel/iosapic.c
--- base/arch/ia64/kernel/iosapic.c	2003-02-10 11:38:31.000000000 -0700
+++ iosapic-2/arch/ia64/kernel/iosapic.c	2003-02-18 15:09:15.000000000 -0700
@@ -111,11 +111,12 @@
 	char		*addr;		/* base address of IOSAPIC */
 	unsigned int 	gsi_base;	/* first GSI assigned to this IOSAPIC */
 	unsigned short 	num_rte;	/* number of RTE in this IOSAPIC */
-	unsigned char	pcat_compat;	/* 8259 compatibility flag */
 } iosapic_lists[256] __devinitdata;
 
 static int num_iosapic = 0;
 
+static unsigned char pcat_compat;	/* 8259 compatibility flag */
+
 
 /*
  * Find an IOSAPIC associated with a GSI
@@ -615,19 +616,14 @@
 }
 
 void __devinit
-iosapic_init (unsigned long phys_addr, unsigned int gsi_base, int pcat_compat)
+iosapic_system_init (int system_pcat_compat)
 {
-	int num_rte, vector;
-	unsigned int isa_irq, ver;
-	char *addr;
-	static int first_time = 1;
+	int vector;
 
-	if (first_time) {
-		first_time = 0;
-		for (vector = 0; vector < IA64_NUM_VECTORS; ++vector)
-			iosapic_intr_info[vector].rte_index = -1;	/* mark as unused */
-	}
+	for (vector = 0; vector < IA64_NUM_VECTORS; ++vector)
+		iosapic_intr_info[vector].rte_index = -1;	/* mark as unused */
 
+	pcat_compat = system_pcat_compat;
 	if (pcat_compat) {
 		/*
 		 * Disable the compatibility mode interrupts (8259 style), needs IN/OUT support
@@ -637,6 +633,14 @@
 		outb(0xff, 0xA1);
 		outb(0xff, 0x21);
 	}
+}
+
+void __devinit
+iosapic_init (unsigned long phys_addr, unsigned int gsi_base)
+{
+	int num_rte, vector;
+	unsigned int isa_irq, ver;
+	char *addr;
 
 	addr = ioremap(phys_addr, 0);
 	ver = iosapic_version(addr);
@@ -649,7 +653,6 @@
 	num_rte = ((ver >> 16) & 0xff) + 1;
 
 	iosapic_lists[num_iosapic].addr = addr;
-	iosapic_lists[num_iosapic].pcat_compat = pcat_compat;
 	iosapic_lists[num_iosapic].gsi_base = gsi_base;
 	iosapic_lists[num_iosapic].num_rte = num_rte;
 	num_iosapic++;
@@ -732,7 +735,7 @@
 	struct acpi_prt_entry *entry;
 	struct list_head *node;
 	unsigned int gsi, gsi_base;
-	int index, vector, pcat_compat;
+	int index, vector;
 	char pci_id[16];
 	char *addr;
 
@@ -756,7 +759,6 @@
 			}
 			addr = iosapic_lists[index].addr;
 			gsi_base = iosapic_lists[index].gsi_base;
-			pcat_compat = iosapic_lists[index].pcat_compat;
 
 			if (pcat_compat && (gsi < 16))
 				vector = isa_irq_to_vector(gsi);
diff -u -ur base/include/asm-ia64/iosapic.h iosapic-2/include/asm-ia64/iosapic.h
--- base/include/asm-ia64/iosapic.h	2003-02-10 11:38:43.000000000 -0700
+++ iosapic-2/include/asm-ia64/iosapic.h	2003-02-18 15:08:09.000000000 -0700
@@ -51,9 +51,9 @@
 
 #ifndef __ASSEMBLY__
 
+extern void __devinit iosapic_system_init (int pcat_compat);
 extern void __devinit iosapic_init (unsigned long address,
-				    unsigned int gsi_base,
-				    int pcat_compat);
+				    unsigned int gsi_base);
 extern int gsi_to_vector (unsigned int gsi);
 extern int gsi_to_irq (unsigned int gsi);
 extern void iosapic_parse_prt (void);



                 reply	other threads:[~2003-02-20 18:00 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=marc-linux-ia64-105590709805887@msgid-missing \
    --to=bjorn_helgaas@hp.com \
    --cc=linux-ia64@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox