Merge /dists/sid/linux-2.6.

svn path=/dists/trunk/linux-2.6/; revision=14107
This commit is contained in:
Bastian Blank 2009-08-14 21:56:25 +00:00
parent dbfeb443df
commit 2a022b3670
8 changed files with 78 additions and 1054 deletions

69
debian/changelog vendored
View File

@ -65,6 +65,75 @@ linux-2.6 (2.6.31~rc5-1~experimental.1) UNRELEASED; urgency=low
-- maximilian attems <maks@debian.org> Thu, 18 Jun 2009 23:50:56 +0200
linux-2.6 (2.6.30-5) unstable; urgency=high
[ maximilian attems ]
* Add stable release 2.6.30.4.
- cifs: fix regression with O_EXCL creates and optimize away lookup
(closes: #536426)
- ecryptfs: check tag 11 literal data buffer size (CVE-2009-2406)
- ecryptfs: check tag 3 package encrypted size (CVE-2009-2407)
* Ignore nf_conntrack ABI change.
* Revert to keep ABI:
- block: fix sg SG_DXFER_TO_FROM_DEV regression.
- sched_rt: Fix overload bug on rt group scheduling.
* [hppa]: Ignore any ABI (broke on 2.6.30.2).
-- maximilian attems <maks@debian.org> Mon, 03 Aug 2009 12:08:56 +0200
linux-2.6 (2.6.30-4) unstable; urgency=low
[ Bastian Blank ]
* Add stable release 2.6.30.2.
* Fix pci access in x86 startup code. (closes: #537783)
* Ignore ABI changes.
* Include all plattform and mach specific headers on arm.
[ maximilian attems ]
* Add stable release 2.6.30.3.
-- Bastian Blank <waldi@debian.org> Thu, 30 Jul 2009 11:55:11 +0200
linux-2.6 (2.6.30-3) unstable; urgency=low
[ Bastian Blank ]
* Build-Depend against cpio. (closes: #536196)
[ Martin Michlmayr ]
* [arm] Export __cpu_flush_dcache_page.
[ Aurelien Jarno ]
* [ia64] Fix asm/fpu.h includes.
[ dann frazier ]
* Fix NULL pointer dereference in tun_chr_pool() (CVE-2009-1897)
* personality: fix PER_CLEAR_ON_SETID (CVE-2009-1895)
* Add -fno-delete-null-pointer-checks to CFLAGS
-- Bastian Blank <waldi@debian.org> Sat, 18 Jul 2009 10:00:01 +0200
linux-2.6 (2.6.30-2) unstable; urgency=low
[ dann frazier ]
* [powerpc] Use generic rtc (closes: #535354)
* [parisc]
- ensure broadcast tlb purge runs single threaded
- fix ldcw inline assembler
(closes: #535844)
[ Bastian Blank ]
* Add stable release 2.6.30.1:
- KVM: x86: check for cr3 validity in ioctl_set_sregs (CVE-2009-2287)
- ALSA: intel8x0 - Fix PCM position craziness (closes: #533780)
- ide-cd: prevent null pointer deref via cdrom_newpc_intr (closes: #535342)
* Ignore ABI changes.
[ maximilian attems ]
* [alpha] Add upstream smp buildfix.
* [parisc] Disable vxge and niu.
-- Bastian Blank <waldi@debian.org> Tue, 07 Jul 2009 14:45:43 +0200
linux-2.6 (2.6.30-1) unstable; urgency=low
* New upstream release.

View File

@ -294,6 +294,8 @@ CONFIG_VIA_RHINE=m
CONFIG_PLIP=m
# CONFIG_NET_FC is not set
# CONFIG_NETPOLL_TRAP is not set
# CONFIG_VXGE is not set
# CONFIG_NIU is not set
##
## file: drivers/net/appletalk/Kconfig

View File

@ -657,6 +657,11 @@ CONFIG_PD6729=m
CONFIG_I82092=m
CONFIG_TCIC=m
##
## file: drivers/rtc/Kconfig
##
CONFIG_RTC_DRV_GENERIC=y
##
## file: drivers/scsi/Kconfig
##
@ -1077,9 +1082,3 @@ CONFIG_SND_POWERMAC_AUTO_DRC=y
## file: sound/usb/Kconfig
##
CONFIG_SND_USB_USX2Y=m
##
## file: unknown
##
CONFIG_RTC_DRV_PPC=y

View File

@ -1,54 +0,0 @@
# Patch author: Benjamin Herrenschmidt <benh@kernel.crashing.org>
# Description: Fix oldworld initrd loading problems.
# It looks like older OF "setprop" is bogus and isn't actually copying the
# data but just taking a pointer. The LongTrail workaround also has that
# problem as "property" will not copy the data. This fixes the workaround
# and applies it to Apple OF 1.0.5.
# Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
# Closes:
# 375035: Kernel 2.6.16 attempts to access root device before running initramfs init
# 366620: initramfs-tools: 2.6.16-1-powerpc fails to mount rootfs, 2.6.15-1-powerpc works
#
Index: linux-tika/arch/powerpc/kernel/prom_init.c
===================================================================
--- linux-tika.orig/arch/powerpc/kernel/prom_init.c 2006-09-02 09:53:00.000000000 +1000
+++ linux-tika/arch/powerpc/kernel/prom_init.c 2006-09-18 20:55:26.000000000 +1000
@@ -102,7 +102,7 @@
#endif
#define OF_WA_CLAIM 1 /* do phys/virt claim separately, then map */
-#define OF_WA_LONGTRAIL 2 /* work around longtrail bugs */
+#define OF_WA_SETPROP 2 /* work around setprop bugs */
#define PROM_BUG() do { \
prom_printf("kernel BUG at %s line 0x%x!\n", \
@@ -472,7 +472,7 @@
{
char cmd[256], *p;
- if (!(OF_WORKAROUNDS & OF_WA_LONGTRAIL))
+ if (!(OF_WORKAROUNDS & OF_WA_SETPROP))
return call_prom("setprop", 4, 1, node, ADDR(pname),
(u32)(unsigned long) value, (u32) valuelen);
@@ -482,6 +482,7 @@
add_string(&p, nodename);
add_string(&p, tohex((u32)(unsigned long) value));
add_string(&p, tohex(valuelen));
+ add_string(&p, "encode-bytes");
add_string(&p, tohex(ADDR(pname)));
add_string(&p, tohex(strlen(RELOC(pname))));
add_string(&p, "property");
@@ -1466,9 +1467,9 @@
version[sizeof(version) - 1] = 0;
/* XXX might need to add other versions here */
if (strcmp(version, "Open Firmware, 1.0.5") == 0)
- of_workarounds = OF_WA_CLAIM;
+ of_workarounds = OF_WA_CLAIM | OF_WA_SETPROP;
else if (strncmp(version, "FirmWorks,3.", 12) == 0) {
- of_workarounds = OF_WA_CLAIM | OF_WA_LONGTRAIL;
+ of_workarounds = OF_WA_CLAIM | OF_WA_SETPROP;
call_prom("interpret", 1, 1, "dev /memory 0 to allow-reclaim");
} else
return;

View File

@ -1,272 +0,0 @@
Subject: [PATCH] firmware: convert acenic driver to request_firmware()
From: David Woodhouse <dwmw2@infradead.org>
To: Jes Sorensen <jes@trained-monkey.org>
Cc: netdev@vger.kernel.org, jaswinder@infradead.org
Again with help from Jaswinder Singh.
Omitting the large part of the patch which actually moves the firmware
around, since you'll need to pull from the git tree to get the preceding
patches if you want to test it anyway.
We store the firmware in little-endian form now, and thus use
__raw_writel() to write it to the device, to avoid byteswapping by
writel(). I've revamped that loop in ace_copy() a little bit so it could
probably do with being tested.
I've dropped the information about SBSS and BSS sections of the firmware
-- we were clearing the whole of the device's memory in advance anyway,
so clearing the BSS sections for a _second_ time seems pointless. And
since the text,rodata,data sections were (almost) contiguous, we now
just load those as a single blob rather than keeping them separate.
Although it probably isn't necessary, we do preserve the ability to
change the load and start addresses from 0x4000, by putting them into a
header at the beginning of the firmware blob, along with the version
number.
[ ported to debian -maks ]
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index f80c839..7677680 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -1912,8 +1912,8 @@ if NETDEV_1000
config ACENIC
tristate "Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support"
- depends on BROKEN
depends on PCI
+ select FW_LOADER
---help---
Say Y here if you have an Alteon AceNIC, 3Com 3C985(B), NetGear
GA620, SGI Gigabit or Farallon PN9000-SX PCI Gigabit Ethernet
diff --git a/drivers/net/acenic.c b/drivers/net/acenic.c
index 6c19265..1e42734 100644
--- a/drivers/net/acenic.c
+++ b/drivers/net/acenic.c
@@ -67,6 +67,7 @@
#include <linux/mm.h>
#include <linux/highmem.h>
#include <linux/sockios.h>
+#include <linux/firmware.h>
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
#include <linux/if_vlan.h>
@@ -187,8 +188,6 @@ MODULE_DEVICE_TABLE(pci, acenic_pci_tbl);
#define MAX_RODATA_LEN 8*1024
#define MAX_DATA_LEN 2*1024
-#include "acenic_firmware.h"
-
#ifndef tigon2FwReleaseLocal
#define tigon2FwReleaseLocal 0
#endif
@@ -418,6 +417,8 @@ static int dis_pci_mem_inval[ACE_MAX_MOD_PARMS] = {1, 1, 1, 1, 1, 1, 1, 1};
MODULE_AUTHOR("Jes Sorensen <jes@trained-monkey.org>");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("AceNIC/3C985/GA620 Gigabit Ethernet driver");
+MODULE_FIRMWARE("acenic_tg1.bin");
+MODULE_FIRMWARE("acenic_tg2.bin");
module_param_array_named(link, link_state, int, NULL, 0);
module_param_array(trace, int, NULL, 0);
@@ -939,8 +940,8 @@ static int __devinit ace_init(struct net_device *dev)
case 4:
case 5:
printk(KERN_INFO " Tigon I (Rev. %i), Firmware: %i.%i.%i, ",
- tig_ver, tigonFwReleaseMajor, tigonFwReleaseMinor,
- tigonFwReleaseFix);
+ tig_ver, ap->firmware_major, ap->firmware_minor,
+ ap->firmware_fix);
writel(0, &regs->LocalCtrl);
ap->version = 1;
ap->tx_ring_entries = TIGON_I_TX_RING_ENTRIES;
@@ -948,8 +949,8 @@ static int __devinit ace_init(struct net_device *dev)
#endif
case 6:
printk(KERN_INFO " Tigon II (Rev. %i), Firmware: %i.%i.%i, ",
- tig_ver, tigon2FwReleaseMajor, tigon2FwReleaseMinor,
- tigon2FwReleaseFix);
+ tig_ver, ap->firmware_major, ap->firmware_minor,
+ ap->firmware_fix);
writel(readl(&regs->CpuBCtrl) | CPU_HALT, &regs->CpuBCtrl);
readl(&regs->CpuBCtrl); /* PCI write posting */
/*
@@ -1201,7 +1202,9 @@ static int __devinit ace_init(struct net_device *dev)
memset(ap->info, 0, sizeof(struct ace_info));
memset(ap->skb, 0, sizeof(struct ace_skb));
- ace_load_firmware(dev);
+ if (ace_load_firmware(dev))
+ goto init_error;
+
ap->fw_running = 0;
tmp_ptr = ap->info_dma;
@@ -1437,10 +1440,7 @@ static int __devinit ace_init(struct net_device *dev)
if (ap->version >= 2)
writel(tmp, &regs->TuneFastLink);
- if (ACE_IS_TIGON_I(ap))
- writel(tigonFwStartAddr, &regs->Pc);
- if (ap->version == 2)
- writel(tigon2FwStartAddr, &regs->Pc);
+ writel(ap->firmware_start, &regs->Pc);
writel(0, &regs->Mb0Lo);
@@ -2763,8 +2763,8 @@ static void ace_get_drvinfo(struct net_device *dev,
strlcpy(info->driver, "acenic", sizeof(info->driver));
snprintf(info->version, sizeof(info->version), "%i.%i.%i",
- tigonFwReleaseMajor, tigonFwReleaseMinor,
- tigonFwReleaseFix);
+ ap->firmware_major, ap->firmware_minor,
+ ap->firmware_fix);
if (ap->pdev)
strlcpy(info->bus_info, pci_name(ap->pdev),
@@ -2871,11 +2871,10 @@ static struct net_device_stats *ace_get_stats(struct net_device *dev)
}
-static void __devinit ace_copy(struct ace_regs __iomem *regs, void *src,
- u32 dest, int size)
+static void __devinit ace_copy(struct ace_regs __iomem *regs, const __le32 *src,
+ u32 dest, int size)
{
void __iomem *tdest;
- u32 *wsrc;
short tsize, i;
if (size <= 0)
@@ -2887,20 +2886,15 @@ static void __devinit ace_copy(struct ace_regs __iomem *regs, void *src,
tdest = (void __iomem *) &regs->Window +
(dest & (ACE_WINDOW_SIZE - 1));
writel(dest & ~(ACE_WINDOW_SIZE - 1), &regs->WinBase);
- /*
- * This requires byte swapping on big endian, however
- * writel does that for us
- */
- wsrc = src;
for (i = 0; i < (tsize / 4); i++) {
- writel(wsrc[i], tdest + i*4);
+ /* Firmware is stored as little-endian */
+ __raw_writel(*src, tdest);
+ src++;
+ tdest += 4;
+ dest += 4;
+ size -= 4;
}
- dest += tsize;
- src += tsize;
- size -= tsize;
}
-
- return;
}
@@ -2939,8 +2933,13 @@ static void __devinit ace_clear(struct ace_regs __iomem *regs, u32 dest, int siz
*/
static int __devinit ace_load_firmware(struct net_device *dev)
{
+ const struct firmware *fw;
+ const char *fw_name = "acenic_tg2.bin";
struct ace_private *ap = netdev_priv(dev);
struct ace_regs __iomem *regs = ap->regs;
+ const __le32 *fw_data;
+ u32 load_addr;
+ int ret;
if (!(readl(&regs->CpuCtrl) & CPU_HALTED)) {
printk(KERN_ERR "%s: trying to download firmware while the "
@@ -2948,28 +2947,52 @@ static int __devinit ace_load_firmware(struct net_device *dev)
return -EFAULT;
}
+ if (ACE_IS_TIGON_I(ap))
+ fw_name = "acenic_tg1.bin";
+
+ ret = request_firmware(&fw, fw_name, &ap->pdev->dev);
+ if (ret) {
+ printk(KERN_ERR "%s: Failed to load firmware \"%s\"\n",
+ ap->name, fw_name);
+ return ret;
+ }
+
+ fw_data = (void *)fw->data;
+
+ /* Firmware blob starts with version numbers, followed by
+ load and start address. Remainder is the blob to be loaded
+ contiguously from load address. We don't bother to represent
+ the BSS/SBSS sections any more, since we were clearing the
+ whole thing anyway. */
+ ap->firmware_major = fw->data[0];
+ ap->firmware_minor = fw->data[1];
+ ap->firmware_fix = fw->data[2];
+
+ ap->firmware_start = le32_to_cpu(fw_data[1]);
+ if (ap->firmware_start < 0x4000 || ap->firmware_start >= 0x80000) {
+ printk(KERN_ERR "%s: bogus load address %08x in \"%s\"\n",
+ ap->name, ap->firmware_start, fw_name);
+ ret = -EINVAL;
+ goto out;
+ }
+
+ load_addr = le32_to_cpu(fw_data[2]);
+ if (load_addr < 0x4000 || load_addr >= 0x80000) {
+ printk(KERN_ERR "%s: bogus load address %08x in \"%s\"\n",
+ ap->name, load_addr, fw_name);
+ ret = -EINVAL;
+ goto out;
+ }
+
/*
- * Do not try to clear more than 512KB or we end up seeing
- * funny things on NICs with only 512KB SRAM
+ * Do not try to clear more than 512KiB or we end up seeing
+ * funny things on NICs with only 512KiB SRAM
*/
ace_clear(regs, 0x2000, 0x80000-0x2000);
- if (ACE_IS_TIGON_I(ap)) {
- ace_copy(regs, tigonFwText, tigonFwTextAddr, tigonFwTextLen);
- ace_copy(regs, tigonFwData, tigonFwDataAddr, tigonFwDataLen);
- ace_copy(regs, tigonFwRodata, tigonFwRodataAddr,
- tigonFwRodataLen);
- ace_clear(regs, tigonFwBssAddr, tigonFwBssLen);
- ace_clear(regs, tigonFwSbssAddr, tigonFwSbssLen);
- }else if (ap->version == 2) {
- ace_clear(regs, tigon2FwBssAddr, tigon2FwBssLen);
- ace_clear(regs, tigon2FwSbssAddr, tigon2FwSbssLen);
- ace_copy(regs, tigon2FwText, tigon2FwTextAddr,tigon2FwTextLen);
- ace_copy(regs, tigon2FwRodata, tigon2FwRodataAddr,
- tigon2FwRodataLen);
- ace_copy(regs, tigon2FwData, tigon2FwDataAddr,tigon2FwDataLen);
- }
-
- return 0;
+ ace_copy(regs, &fw_data[3], load_addr, fw->size-12);
+ out:
+ release_firmware(fw);
+ return ret;
}
diff --git a/drivers/net/acenic.h b/drivers/net/acenic.h
index 60ed183..cf7e80e 100644
--- a/drivers/net/acenic.h
+++ b/drivers/net/acenic.h
@@ -695,6 +695,10 @@ struct ace_private
#endif
struct net_device_stats stats;
int pci_using_dac;
+ u8 firmware_major;
+ u8 firmware_minor;
+ u8 firmware_fix;
+ u32 firmware_start;
};

View File

@ -1,720 +0,0 @@
diff -uNr source/arch/alpha/Kconfig source-es45/arch/alpha/Kconfig
--- source/arch/alpha/Kconfig 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/arch/alpha/Kconfig 2006-09-30 03:14:44.000000000 -0700
@@ -469,6 +469,11 @@
depends on ALPHA_GENERIC || ALPHA_PC164
default y
+config VGA_HOSE
+ bool "VGA on arbitrary hose"
+ depends on ALPHA_GENERIC || ALPHA_TITAN || ALPHA_MARVEL || ALPHA_TSUNAMI
+ default y
+
config ALPHA_SRM
bool "Use SRM as bootloader" if ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_NAUTILUS || ALPHA_NONAME
default y if ALPHA_JENSEN || ALPHA_MIKASA || ALPHA_SABLE || ALPHA_LYNX || ALPHA_NORITAKE || ALPHA_DP264 || ALPHA_RAWHIDE || ALPHA_EIGER || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_SHARK || ALPHA_MARVEL
@@ -626,6 +631,13 @@
source "drivers/Kconfig"
+# DUMMY_CONSOLE may be defined in drivers/video/console/Kconfig
+# but we also need it if VGA_HOSE is set
+config DUMMY_CONSOLE
+ bool
+ depends on VGA_HOSE
+ default y
+
source "fs/Kconfig"
source "arch/alpha/oprofile/Kconfig"
diff -uNr source/arch/alpha/kernel/alpha_ksyms.c source-es45/arch/alpha/kernel/alpha_ksyms.c
--- source/arch/alpha/kernel/alpha_ksyms.c 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/arch/alpha/kernel/alpha_ksyms.c 2006-09-30 03:14:44.000000000 -0700
@@ -206,3 +206,7 @@
EXPORT_SYMBOL(irongate_ioremap);
EXPORT_SYMBOL(irongate_iounmap);
#endif
+
+#ifdef CONFIG_VGA_HOSE
+EXPORT_SYMBOL(pci_vga_hose);
+#endif
diff -uNr source/arch/alpha/kernel/console.c source-es45/arch/alpha/kernel/console.c
--- source/arch/alpha/kernel/console.c 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/arch/alpha/kernel/console.c 2006-09-30 03:14:44.000000000 -0700
@@ -8,17 +8,16 @@
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/tty.h>
+#include <linux/vt.h>
#include <linux/console.h>
#include <asm/vga.h>
#include <asm/machvec.h>
+#include "pci_impl.h"
+
#ifdef CONFIG_VGA_HOSE
-/*
- * Externally-visible vga hose bases
- */
-unsigned long __vga_hose_io_base = 0; /* base for default hose */
-unsigned long __vga_hose_mem_base = 0; /* base for default hose */
+struct pci_controller *pci_vga_hose = NULL;
static struct pci_controller * __init
default_vga_hose_select(struct pci_controller *h1, struct pci_controller *h2)
@@ -32,10 +31,7 @@
void __init
set_vga_hose(struct pci_controller *hose)
{
- if (hose) {
- __vga_hose_io_base = hose->io_space->start;
- __vga_hose_mem_base = hose->mem_space->start;
- }
+ pci_vga_hose = hose;
}
void __init
@@ -44,18 +40,18 @@
struct pci_controller *hose = NULL;
struct pci_dev *dev = NULL;
+ /* Default the select function */
if (!sel_func) sel_func = (void *)default_vga_hose_select;
+ /* Find the console VGA device */
for(dev=NULL; (dev=pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, dev));) {
if (!hose) hose = dev->sysdata;
else hose = sel_func(hose, dev->sysdata);
}
- /* Did we already inititialize the correct one? */
- if (conswitchp == &vga_con &&
- __vga_hose_io_base == hose->io_space->start &&
- __vga_hose_mem_base == hose->mem_space->start)
- return;
+ /* Did we already initialize the correct one? Is there one? */
+ if (!hose || (conswitchp == &vga_con && pci_vga_hose == hose))
+ return;
/* Set the VGA hose and init the new console */
set_vga_hose(hose);
diff -uNr source/arch/alpha/kernel/core_marvel.c source-es45/arch/alpha/kernel/core_marvel.c
--- source/arch/alpha/kernel/core_marvel.c 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/arch/alpha/kernel/core_marvel.c 2006-09-30 03:14:44.000000000 -0700
@@ -684,9 +684,6 @@
/*
* IO map support.
*/
-
-#define __marvel_is_mem_vga(a) (((a) >= 0xa0000) && ((a) <= 0xc0000))
-
void __iomem *
marvel_ioremap(unsigned long addr, unsigned long size)
{
@@ -698,13 +695,9 @@
unsigned long pfn;
/*
- * Adjust the addr.
+ * Adjust the address.
*/
-#ifdef CONFIG_VGA_HOSE
- if (pci_vga_hose && __marvel_is_mem_vga(addr)) {
- addr += pci_vga_hose->mem_space->start;
- }
-#endif
+ FIXUP_MEMADDR_VGA(addr);
/*
* Find the hose.
@@ -781,7 +774,7 @@
return (void __iomem *) vaddr;
}
- return NULL;
+ return (void __iomem *) NULL;
}
void
@@ -803,8 +796,6 @@
return (addr & 0xFF000000UL) == 0;
}
-#define __marvel_is_port_vga(a) \
- (((a) >= 0x3b0) && ((a) < 0x3e0) && ((a) != 0x3b3) && ((a) != 0x3d3))
#define __marvel_is_port_kbd(a) (((a) == 0x60) || ((a) == 0x64))
#define __marvel_is_port_rtc(a) (((a) == 0x70) || ((a) == 0x71))
@@ -813,7 +804,7 @@
if (__marvel_is_port_rtc (addr) || __marvel_is_port_kbd(addr))
;
#ifdef CONFIG_VGA_HOSE
- else if (__marvel_is_port_vga (addr) && pci_vga_hose)
+ else if (__is_port_vga (addr) && pci_vga_hose)
addr += pci_vga_hose->io_space->start;
#endif
else
diff -uNr source/arch/alpha/kernel/core_titan.c source-es45/arch/alpha/kernel/core_titan.c
--- source/arch/alpha/kernel/core_titan.c 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/arch/alpha/kernel/core_titan.c 2006-09-30 03:14:44.000000000 -0700
@@ -35,6 +35,17 @@
} saved_config[4] __attribute__((common));
/*
+ * Is PChip 1 present? No need to query it more than once.
+ */
+static int titan_pchip1_present;
+
+/* hoseno to index mapping */
+#define H2I(h) ((((h)&2)>>1)|(((h)&1)<<1))
+/* index to hoseno mapping */
+#define I2H(i) ((((i)&2)>>1)|(((i)&1)<<1))
+
+
+/*
* BIOS32-style PCI interface:
*/
@@ -196,14 +207,14 @@
titan_pci_tbi(struct pci_controller *hose, dma_addr_t start, dma_addr_t end)
{
titan_pachip *pachip =
- (hose->index & 1) ? TITAN_pachip1 : TITAN_pachip0;
+ (hose->index & 2) ? TITAN_pachip1 : TITAN_pachip0;
titan_pachip_port *port;
volatile unsigned long *csr;
unsigned long value;
/* Get the right hose. */
port = &pachip->g_port;
- if (hose->index & 2)
+ if (hose->index & 1)
port = &pachip->a_port;
/* We can invalidate up to 8 tlb entries in a go. The flush
@@ -238,12 +249,12 @@
}
static void __init
-titan_init_one_pachip_port(titan_pachip_port *port, int index)
+titan_init_one_pachip_port(titan_pachip_port *port, int hoseno)
{
struct pci_controller *hose;
hose = alloc_pci_controller();
- if (index == 0)
+ if (hoseno == 0)
pci_isa_hose = hose;
hose->io_space = alloc_resource();
hose->mem_space = alloc_resource();
@@ -258,47 +269,47 @@
hose->sparse_mem_base = 0;
hose->sparse_io_base = 0;
hose->dense_mem_base
- = (TITAN_MEM(index) & 0xffffffffffUL) | 0x80000000000UL;
+ = (TITAN_MEM(hoseno) & 0xffffffffffUL) | 0x80000000000UL;
hose->dense_io_base
- = (TITAN_IO(index) & 0xffffffffffUL) | 0x80000000000UL;
+ = (TITAN_IO(hoseno) & 0xffffffffffUL) | 0x80000000000UL;
- hose->config_space_base = TITAN_CONF(index);
- hose->index = index;
+ hose->config_space_base = TITAN_CONF(hoseno);
+ hose->index = H2I(hoseno);
- hose->io_space->start = TITAN_IO(index) - TITAN_IO_BIAS;
+ hose->io_space->start = TITAN_IO(hoseno) - TITAN_IO_BIAS;
hose->io_space->end = hose->io_space->start + TITAN_IO_SPACE - 1;
- hose->io_space->name = pci_io_names[index];
+ hose->io_space->name = pci_io_names[hoseno];
hose->io_space->flags = IORESOURCE_IO;
- hose->mem_space->start = TITAN_MEM(index) - TITAN_MEM_BIAS;
+ hose->mem_space->start = TITAN_MEM(hoseno) - TITAN_MEM_BIAS;
hose->mem_space->end = hose->mem_space->start + 0xffffffff;
- hose->mem_space->name = pci_mem_names[index];
+ hose->mem_space->name = pci_mem_names[hoseno];
hose->mem_space->flags = IORESOURCE_MEM;
if (request_resource(&ioport_resource, hose->io_space) < 0)
- printk(KERN_ERR "Failed to request IO on hose %d\n", index);
+ printk(KERN_ERR "Failed to request IO on hose %d\n", hoseno);
if (request_resource(&iomem_resource, hose->mem_space) < 0)
- printk(KERN_ERR "Failed to request MEM on hose %d\n", index);
+ printk(KERN_ERR "Failed to request MEM on hose %d\n", hoseno);
/*
* Save the existing PCI window translations. SRM will
* need them when we go to reboot.
*/
- saved_config[index].wsba[0] = port->wsba[0].csr;
- saved_config[index].wsm[0] = port->wsm[0].csr;
- saved_config[index].tba[0] = port->tba[0].csr;
-
- saved_config[index].wsba[1] = port->wsba[1].csr;
- saved_config[index].wsm[1] = port->wsm[1].csr;
- saved_config[index].tba[1] = port->tba[1].csr;
-
- saved_config[index].wsba[2] = port->wsba[2].csr;
- saved_config[index].wsm[2] = port->wsm[2].csr;
- saved_config[index].tba[2] = port->tba[2].csr;
-
- saved_config[index].wsba[3] = port->wsba[3].csr;
- saved_config[index].wsm[3] = port->wsm[3].csr;
- saved_config[index].tba[3] = port->tba[3].csr;
+ saved_config[hoseno].wsba[0] = port->wsba[0].csr;
+ saved_config[hoseno].wsm[0] = port->wsm[0].csr;
+ saved_config[hoseno].tba[0] = port->tba[0].csr;
+
+ saved_config[hoseno].wsba[1] = port->wsba[1].csr;
+ saved_config[hoseno].wsm[1] = port->wsm[1].csr;
+ saved_config[hoseno].tba[1] = port->tba[1].csr;
+
+ saved_config[hoseno].wsba[2] = port->wsba[2].csr;
+ saved_config[hoseno].wsm[2] = port->wsm[2].csr;
+ saved_config[hoseno].tba[2] = port->tba[2].csr;
+
+ saved_config[hoseno].wsba[3] = port->wsba[3].csr;
+ saved_config[hoseno].wsm[3] = port->wsm[3].csr;
+ saved_config[hoseno].tba[3] = port->tba[3].csr;
/*
* Set up the PCI to main memory translation windows.
@@ -344,14 +355,14 @@
static void __init
titan_init_pachips(titan_pachip *pachip0, titan_pachip *pachip1)
{
- int pchip1_present = TITAN_cchip->csc.csr & 1L<<14;
+ titan_pchip1_present = TITAN_cchip->csc.csr & 1L<<14;
/* Init the ports in hose order... */
titan_init_one_pachip_port(&pachip0->g_port, 0); /* hose 0 */
- if (pchip1_present)
+ if (titan_pchip1_present)
titan_init_one_pachip_port(&pachip1->g_port, 1);/* hose 1 */
titan_init_one_pachip_port(&pachip0->a_port, 2); /* hose 2 */
- if (pchip1_present)
+ if (titan_pchip1_present)
titan_init_one_pachip_port(&pachip1->a_port, 3);/* hose 3 */
}
@@ -366,16 +377,18 @@
int h = (pu64[30] >> 24) & 0xff; /* console hose # */
/*
- * Our hose numbering matches the console's, so just find
+ * Our hose numbering does NOT match the console's, so find
* the right one...
*/
for (hose = hose_head; hose; hose = hose->next) {
- if (hose->index == h) break;
+ if (I2H(hose->index) == h) break;
}
if (hose) {
- printk("Console graphics on hose %d\n", hose->index);
+ printk("Console graphics on hose %d\n", h);
pci_vga_hose = hose;
+ } else {
+ printk("ERROR: Console graphics hose not found\n");
}
}
#endif /* CONFIG_VGA_HOSE */
@@ -406,6 +419,7 @@
/* With multiple PCI busses, we play with I/O as physical addrs. */
ioport_resource.end = ~0UL;
+ iomem_resource.end = ~0UL;
/* PCI DMA Direct Mapping is 1GB at 2GB. */
__direct_map_base = 0x80000000;
@@ -441,9 +455,7 @@
static void
titan_kill_pachips(titan_pachip *pachip0, titan_pachip *pachip1)
{
- int pchip1_present = TITAN_cchip->csc.csr & 1L<<14;
-
- if (pchip1_present) {
+ if (titan_pchip1_present) {
titan_kill_one_pachip_port(&pachip1->g_port, 1);
titan_kill_one_pachip_port(&pachip1->a_port, 3);
}
@@ -474,12 +486,12 @@
unsigned long *ptes;
unsigned long pfn;
+#ifdef CONFIG_VGA_HOSE
/*
- * Adjust the addr.
+ * Adjust the address and hose, if necessary.
*/
-#ifdef CONFIG_VGA_HOSE
- if (pci_vga_hose && __titan_is_mem_vga(addr)) {
- h = pci_vga_hose->index;
+ if (pci_vga_hose && __is_mem_vga(addr)) {
+ h = I2H(pci_vga_hose->index);
addr += pci_vga_hose->mem_space->start;
}
#endif
@@ -488,7 +500,7 @@
* Find the hose.
*/
for (hose = hose_head; hose; hose = hose->next)
- if (hose->index == h)
+ if (I2H(hose->index) == h)
break;
if (!hose)
return NULL;
@@ -521,8 +533,10 @@
* Map it
*/
area = get_vm_area(size, VM_IOREMAP);
- if (!area)
+ if (!area) {
+ printk("ioremap failed... no vm_area...\n");
return NULL;
+ }
ptes = hose->sg_pci->ptes;
for (vaddr = (unsigned long)area->addr;
@@ -539,7 +553,7 @@
if (__alpha_remap_area_pages(vaddr,
pfn << PAGE_SHIFT,
PAGE_SIZE, 0)) {
- printk("FAILED to map...\n");
+ printk("FAILED to remap_area_pages...\n");
vfree(area->addr);
return NULL;
}
@@ -551,7 +565,8 @@
return (void __iomem *) vaddr;
}
- return NULL;
+ /* Assume a legacy (read: VGA) address, and return appropriately. */
+ return (void __iomem *)(addr + TITAN_MEM_BIAS);
}
void
@@ -750,6 +765,7 @@
if (titan_query_agp(port))
hosenum = 2;
if (hosenum < 0 &&
+ titan_pchip1_present &&
titan_query_agp(port = &TITAN_pachip1->a_port))
hosenum = 3;
@@ -757,7 +773,7 @@
* Find the hose the port is on.
*/
for (hose = hose_head; hose; hose = hose->next)
- if (hose->index == hosenum)
+ if (I2H(hose->index) == hosenum)
break;
if (!hose || !hose->sg_pci)
diff -uNr source/arch/alpha/kernel/core_tsunami.c source-es45/arch/alpha/kernel/core_tsunami.c
--- source/arch/alpha/kernel/core_tsunami.c 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/arch/alpha/kernel/core_tsunami.c 2006-09-30 03:14:44.000000000 -0700
@@ -349,6 +349,32 @@
tsunami_pci_tbi(hose, 0, -1);
}
+static void __init
+tsunami_init_vga_hose(void)
+{
+#ifdef CONFIG_VGA_HOSE
+ u64 *pu64 = (u64 *)((u64)hwrpb + hwrpb->ctbt_offset);
+
+ if (pu64[7] == 3) { /* TERM_TYPE == graphics */
+ struct pci_controller *hose;
+ int h = (pu64[30] >> 24) & 0xff; /* console hose # */
+
+ /*
+ * Our hose numbering does NOT match the console's, so find
+ * the right one...
+ */
+ for (hose = hose_head; hose; hose = hose->next) {
+ if (hose->index == h) break;
+ }
+
+ if (hose) {
+ printk("Console graphics on hose %d\n", h);
+ pci_vga_hose = hose;
+ }
+ }
+#endif /* CONFIG_VGA_HOSE */
+}
+
void __init
tsunami_init_arch(void)
{
@@ -393,6 +419,9 @@
tsunami_init_one_pchip(TSUNAMI_pchip0, 0);
if (TSUNAMI_cchip->csc.csr & 1L<<14)
tsunami_init_one_pchip(TSUNAMI_pchip1, 1);
+
+ /* Check for graphic console location (if any). */
+ tsunami_init_vga_hose();
}
static void
diff -uNr source/arch/alpha/kernel/proto.h source-es45/arch/alpha/kernel/proto.h
--- source/arch/alpha/kernel/proto.h 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/arch/alpha/kernel/proto.h 2006-09-30 03:14:44.000000000 -0700
@@ -106,6 +106,9 @@
extern unsigned long wildfire_node_mem_start(int);
extern unsigned long wildfire_node_mem_size(int);
+/* console.c */
+ extern void locate_and_init_vga(void *(*)(void *, void *));
+
/* setup.c */
extern unsigned long srm_hae;
extern int boot_cpuid;
diff -uNr source/arch/alpha/kernel/setup.c source-es45/arch/alpha/kernel/setup.c
--- source/arch/alpha/kernel/setup.c 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/arch/alpha/kernel/setup.c 2006-09-30 03:14:44.000000000 -0700
@@ -787,9 +787,9 @@
static int rawhide_indices[] = {0,0,0,1,1,2,2,3,3,4,4};
static char titan_names[][16] = {
- "DEFAULT", "Privateer", "Falcon", "Granite"
+ "DEFAULT", "Privateer", "Falcon", "Granite", "HyperBrick2"
};
-static int titan_indices[] = {0,1,2,2,3};
+static int titan_indices[] = {0,1,2,2,3,4};
static char tsunami_names[][16] = {
"0", "DP264", "Warhol", "Windjammer", "Monet", "Clipper",
@@ -891,6 +891,7 @@
&privateer_mv, /* privateer */
&titan_mv, /* falcon */
&privateer_mv, /* granite */
+ &titan_mv, /* hyperbrick2 */
};
static struct alpha_machine_vector *tsunami_vecs[] __initdata =
diff -uNr source/arch/alpha/kernel/sys_dp264.c source-es45/arch/alpha/kernel/sys_dp264.c
--- source/arch/alpha/kernel/sys_dp264.c 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/arch/alpha/kernel/sys_dp264.c 2006-09-30 03:14:44.000000000 -0700
@@ -42,6 +42,14 @@
/* dp264 boards handle at max four CPUs */
static unsigned long cpu_irq_affinity[4] = { 0UL, 0UL, 0UL, 0UL };
+#ifdef CONFIG_VGA_HOSE
+extern void locate_and_init_vga(void *(*handler)(void *, void *));
+#else
+static inline void locate_and_init_vga(void *(*handler)(void *, void *))
+{
+}
+#endif
+
DEFINE_SPINLOCK(dp264_irq_lock);
static void
@@ -543,6 +551,7 @@
{
common_init_pci();
SMC669_Init(0);
+ locate_and_init_vga(NULL);
}
static void __init
@@ -551,6 +560,14 @@
common_init_pci();
SMC669_Init(1);
es1888_init();
+ locate_and_init_vga(NULL);
+}
+
+static void __init
+clipper_init_pci(void)
+{
+ common_init_pci();
+ locate_and_init_vga(NULL);
}
static void __init
@@ -655,7 +672,7 @@
.init_arch = tsunami_init_arch,
.init_irq = clipper_init_irq,
.init_rtc = common_init_rtc,
- .init_pci = common_init_pci,
+ .init_pci = clipper_init_pci,
.kill_arch = tsunami_kill_arch,
.pci_map_irq = clipper_map_irq,
.pci_swizzle = common_swizzle,
diff -uNr source/drivers/video/console/vgacon.c source-es45/drivers/video/console/vgacon.c
--- source/drivers/video/console/vgacon.c 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/drivers/video/console/vgacon.c 2006-09-30 03:14:44.000000000 -0700
@@ -52,6 +52,11 @@
#include <video/vga.h>
#include <asm/io.h>
+/* wait until after includes to test for this, to allow arch-specific mod. */
+#ifndef vga_request_resource
+# define vga_request_resource request_resource
+#endif
+
static DEFINE_SPINLOCK(vga_lock);
static int cursor_size_lastfrom;
static int cursor_size_lastto;
@@ -393,7 +398,7 @@
vga_video_type = VIDEO_TYPE_EGAM;
vga_vram_size = 0x8000;
display_desc = "EGA+";
- request_resource(&ioport_resource,
+ vga_request_resource(&ioport_resource,
&ega_console_resource);
} else {
static struct resource mda1_console_resource =
@@ -403,9 +408,9 @@
vga_video_type = VIDEO_TYPE_MDA;
vga_vram_size = 0x2000;
display_desc = "*MDA";
- request_resource(&ioport_resource,
+ vga_request_resource(&ioport_resource,
&mda1_console_resource);
- request_resource(&ioport_resource,
+ vga_request_resource(&ioport_resource,
&mda2_console_resource);
vga_video_font_height = 14;
}
@@ -425,14 +430,14 @@
= { .name = "ega", .start = 0x3C0, .end = 0x3DF };
vga_video_type = VIDEO_TYPE_EGAC;
display_desc = "EGA";
- request_resource(&ioport_resource,
+ vga_request_resource(&ioport_resource,
&ega_console_resource);
} else {
static struct resource vga_console_resource
= { .name = "vga+", .start = 0x3C0, .end = 0x3DF };
vga_video_type = VIDEO_TYPE_VGAC;
display_desc = "VGA+";
- request_resource(&ioport_resource,
+ vga_request_resource(&ioport_resource,
&vga_console_resource);
#ifdef VGA_CAN_DO_64KB
@@ -477,7 +482,7 @@
vga_video_type = VIDEO_TYPE_CGA;
vga_vram_size = 0x2000;
display_desc = "*CGA";
- request_resource(&ioport_resource,
+ vga_request_resource(&ioport_resource,
&cga_console_resource);
vga_video_font_height = 8;
}
diff -uNr source/include/asm-alpha/core_titan.h source-es45/include/asm-alpha/core_titan.h
--- source/include/asm-alpha/core_titan.h 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/include/asm-alpha/core_titan.h 2006-09-30 03:14:44.000000000 -0700
@@ -3,6 +3,7 @@
#include <linux/types.h>
#include <linux/pci.h>
+#include <asm/pci.h>
#include <asm/compiler.h>
/*
@@ -383,6 +384,7 @@
__EXTERN_INLINE void __iomem *titan_ioportmap(unsigned long addr)
{
+ FIXUP_IOADDR_VGA(addr);
return (void __iomem *)(addr + TITAN_IO_BIAS);
}
diff -uNr source/include/asm-alpha/core_tsunami.h source-es45/include/asm-alpha/core_tsunami.h
--- source/include/asm-alpha/core_tsunami.h 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/include/asm-alpha/core_tsunami.h 2006-09-30 03:14:44.000000000 -0700
@@ -2,6 +2,8 @@
#define __ALPHA_TSUNAMI__H__
#include <linux/types.h>
+#include <linux/pci.h>
+#include <asm/pci.h>
#include <asm/compiler.h>
/*
@@ -305,12 +307,14 @@
__EXTERN_INLINE void __iomem *tsunami_ioportmap(unsigned long addr)
{
+ FIXUP_IOADDR_VGA(addr);
return (void __iomem *)(addr + TSUNAMI_IO_BIAS);
}
__EXTERN_INLINE void __iomem *tsunami_ioremap(unsigned long addr,
unsigned long size)
{
+ FIXUP_MEMADDR_VGA(addr);
return (void __iomem *)(addr + TSUNAMI_MEM_BIAS);
}
diff -uNr source/include/asm-alpha/io.h source-es45/include/asm-alpha/io.h
--- source/include/asm-alpha/io.h 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/include/asm-alpha/io.h 2006-09-30 03:14:44.000000000 -0700
@@ -126,6 +126,30 @@
return (long)address <= 0 ? NULL : virt;
}
+#ifdef CONFIG_VGA_HOSE
+extern struct pci_controller *pci_vga_hose;
+
+# define __is_port_vga(a) \
+ (((a) >= 0x3b0) && ((a) < 0x3e0) && \
+ ((a) != 0x3b3) && ((a) != 0x3d3))
+
+# define __is_mem_vga(a) \
+ (((a) >= 0xa0000) && ((a) <= 0xc0000))
+
+# define FIXUP_IOADDR_VGA(a) do { \
+ if (pci_vga_hose && __is_port_vga(a)) \
+ a += pci_vga_hose->io_space->start; \
+ } while(0)
+
+# define FIXUP_MEMADDR_VGA(a) do { \
+ if (pci_vga_hose && __is_mem_vga(a)) \
+ a += pci_vga_hose->io_space->start; \
+ } while(0)
+
+#else /* CONFIG_VGA_HOSE */
+# define FIXUP_IOADDR_VGA(a)
+#endif /* CONFIG_VGA_HOSE */
+
/*
* There are different chipsets to interface the Alpha CPUs to the world.
*/
diff -uNr source/include/asm-alpha/vga.h source-es45/include/asm-alpha/vga.h
--- source/include/asm-alpha/vga.h 2006-09-19 20:42:06.000000000 -0700
+++ source-es45/include/asm-alpha/vga.h 2006-09-30 03:14:44.000000000 -0700
@@ -48,4 +48,26 @@
#define VGA_MAP_MEM(x,s) ((unsigned long) ioremap(x, s))
+#ifdef CONFIG_VGA_HOSE
+#include <linux/ioport.h>
+#include <linux/pci.h>
+
+extern struct pci_controller *pci_vga_hose;
+
+#define vga_request_resource alpha_vga_request_resource
+
+static int inline
+alpha_vga_request_resource(struct resource *root, struct resource *new)
+{
+ /* First, fixup the VGA resource bounds WRT the hose it is on. */
+ if (pci_vga_hose) {
+ new->start += pci_vga_hose->io_space->start;
+ new->end += pci_vga_hose->io_space->start;
+ }
+
+ /* Finally, do a normal request_resource(). */
+ return request_resource(root, new);
+}
+#endif /* CONFIG_VGA_HOSE */
+
#endif

2
debian/rules.real vendored
View File

@ -203,7 +203,7 @@ install-headers_$(ARCH)_$(FEATURESET): $(STAMPS_DIR)/source_$(ARCH)_$(FEATURESET
echo Makefile; \
find arch/$(KERNEL_ARCH) -maxdepth 1 -name 'Makefile*' -print; \
find arch/$(KERNEL_ARCH) -name 'module.lds' -print; \
find arch/$(KERNEL_ARCH)/include -print; \
find $$(find arch/$(KERNEL_ARCH) -name include -type d -print) -print; \
find include -name 'asm*' -prune -o -print; \
find include/asm-generic -print; \
) \

View File

@ -3,6 +3,6 @@ Priority: optional
Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
Uploaders: Bastian Blank <waldi@debian.org>, Frederik Schüler <fs@debian.org>, maximilian attems <maks@debian.org>
Standards-Version: 3.8.2
Build-Depends: debhelper (>> 7), module-init-tools, python
Build-Depends: debhelper (>> 7), cpio, module-init-tools, python
Build-Depends-Indep: bzip2, python-central, xmlto
XS-Python-Version: current