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
|
||||
|
||||
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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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; \
|
||||
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; \
|
||||
) \
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue