Merge /dists/sid/linux-2.6.
svn path=/dists/trunk/linux-2.6/; revision=14107
This commit is contained in:
parent
dbfeb443df
commit
2a022b3670
|
@ -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
|
-- 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
|
linux-2.6 (2.6.30-1) unstable; urgency=low
|
||||||
|
|
||||||
* New upstream release.
|
* New upstream release.
|
||||||
|
|
|
@ -294,6 +294,8 @@ CONFIG_VIA_RHINE=m
|
||||||
CONFIG_PLIP=m
|
CONFIG_PLIP=m
|
||||||
# CONFIG_NET_FC is not set
|
# CONFIG_NET_FC is not set
|
||||||
# CONFIG_NETPOLL_TRAP is not set
|
# CONFIG_NETPOLL_TRAP is not set
|
||||||
|
# CONFIG_VXGE is not set
|
||||||
|
# CONFIG_NIU is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/appletalk/Kconfig
|
## file: drivers/net/appletalk/Kconfig
|
||||||
|
|
|
@ -657,6 +657,11 @@ CONFIG_PD6729=m
|
||||||
CONFIG_I82092=m
|
CONFIG_I82092=m
|
||||||
CONFIG_TCIC=m
|
CONFIG_TCIC=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/rtc/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_RTC_DRV_GENERIC=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/scsi/Kconfig
|
## file: drivers/scsi/Kconfig
|
||||||
##
|
##
|
||||||
|
@ -1077,9 +1082,3 @@ CONFIG_SND_POWERMAC_AUTO_DRC=y
|
||||||
## file: sound/usb/Kconfig
|
## file: sound/usb/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_SND_USB_USX2Y=m
|
CONFIG_SND_USB_USX2Y=m
|
||||||
|
|
||||||
##
|
|
||||||
## file: unknown
|
|
||||||
##
|
|
||||||
CONFIG_RTC_DRV_PPC=y
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
|
|
@ -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, ®s->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(®s->CpuBCtrl) | CPU_HALT, ®s->CpuBCtrl);
|
|
||||||
readl(®s->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, ®s->TuneFastLink);
|
|
||||||
|
|
||||||
- if (ACE_IS_TIGON_I(ap))
|
|
||||||
- writel(tigonFwStartAddr, ®s->Pc);
|
|
||||||
- if (ap->version == 2)
|
|
||||||
- writel(tigon2FwStartAddr, ®s->Pc);
|
|
||||||
+ writel(ap->firmware_start, ®s->Pc);
|
|
||||||
|
|
||||||
writel(0, ®s->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 *) ®s->Window +
|
|
||||||
(dest & (ACE_WINDOW_SIZE - 1));
|
|
||||||
writel(dest & ~(ACE_WINDOW_SIZE - 1), ®s->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(®s->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;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
|
@ -203,7 +203,7 @@ install-headers_$(ARCH)_$(FEATURESET): $(STAMPS_DIR)/source_$(ARCH)_$(FEATURESET
|
||||||
echo Makefile; \
|
echo Makefile; \
|
||||||
find arch/$(KERNEL_ARCH) -maxdepth 1 -name 'Makefile*' -print; \
|
find arch/$(KERNEL_ARCH) -maxdepth 1 -name 'Makefile*' -print; \
|
||||||
find arch/$(KERNEL_ARCH) -name 'module.lds' -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 -name 'asm*' -prune -o -print; \
|
||||||
find include/asm-generic -print; \
|
find include/asm-generic -print; \
|
||||||
) \
|
) \
|
||||||
|
|
|
@ -3,6 +3,6 @@ Priority: optional
|
||||||
Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
|
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>
|
Uploaders: Bastian Blank <waldi@debian.org>, Frederik Schüler <fs@debian.org>, maximilian attems <maks@debian.org>
|
||||||
Standards-Version: 3.8.2
|
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
|
Build-Depends-Indep: bzip2, python-central, xmlto
|
||||||
XS-Python-Version: current
|
XS-Python-Version: current
|
||||||
|
|
Loading…
Reference in New Issue