New upstream release candidate 2.6.36-rc4
Remove patches merged upstream. Rewrite debian/scripts-kconfig-reportoldconfig.patch Rewrite bugfix/mips/disable-werror.patch as debian/mips-disable-werror.patch Refresh some other patches. svn path=/dists/trunk/linux-2.6/; revision=16272
This commit is contained in:
parent
ba3358c090
commit
96fba25e4b
|
@ -1,3 +1,9 @@
|
|||
linux-2.6 (2.6.36~rc4-1~experimental.1) UNRELEASED; urgency=low
|
||||
|
||||
* New upstream release candidate
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Mon, 13 Sep 2010 01:25:14 +0100
|
||||
|
||||
linux-2.6 (2.6.35-1~experimental.3) experimental; urgency=low
|
||||
|
||||
[ Ritesh Raj Sarraf ]
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
From d3928b11844fededd058aaa4ebcbbfedfc42e22b Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Fri, 23 Jul 2010 00:56:59 +0100
|
||||
Subject: [PATCH] 3c59x: Fix call to mdio_sync() with the wrong argument
|
||||
|
||||
commit a095cfc40ec7ebe63e9532383c5b5c2a27b14075
|
||||
"3c59x: Specify window explicitly for access to windowed registers"
|
||||
changed the first parameter to mdio_sync(), from a pointer to the
|
||||
register mapping, to a pointer to the vortex_private structure,
|
||||
and changed all but one of the call sites. Fix that last one.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
drivers/net/3c59x.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c
|
||||
index 3c85600..53a8ca5 100644
|
||||
--- a/drivers/net/3c59x.c
|
||||
+++ b/drivers/net/3c59x.c
|
||||
@@ -1387,7 +1387,7 @@ static int __devinit vortex_probe1(struct device *gendev,
|
||||
mii_preamble_required++;
|
||||
if (vp->drv_flags & EXTRA_PREAMBLE)
|
||||
mii_preamble_required++;
|
||||
- mdio_sync(ioaddr, 32);
|
||||
+ mdio_sync(vp, 32);
|
||||
mdio_read(dev, 24, MII_BMSR);
|
||||
for (phy = 0; phy < 32 && phy_idx < 1; phy++) {
|
||||
int mii_status, phyx;
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,706 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Wed, 23 Jun 2010 13:54:31 +0000
|
||||
Subject: [PATCH 1/2] 3c59x: Specify window explicitly for access to windowed registers
|
||||
|
||||
commit a095cfc40ec7ebe63e9532383c5b5c2a27b14075 upstream.
|
||||
|
||||
Currently much of the code assumes that a specific window has been
|
||||
selected, while a few functions save and restore the window. This
|
||||
makes it impossible to introduce fine-grained locking.
|
||||
|
||||
Make those assumptions explicit by introducing wrapper functions
|
||||
to set the window and read/write a register. Use these everywhere
|
||||
except vortex_interrupt(), vortex_start_xmit() and vortex_rx().
|
||||
These set the window just once, or not at all in the case of
|
||||
vortex_rx() as it should always be called from vortex_interrupt().
|
||||
|
||||
Cache the current window in struct vortex_private to avoid
|
||||
unnecessary hardware writes.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
Tested-by: Arne Nordmark <nordmark@mech.kth.se> [against 2.6.32]
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/3c59x.c | 288 +++++++++++++++++++++++++--------------------------
|
||||
1 files changed, 140 insertions(+), 148 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c
|
||||
index d75803e..beddef9 100644
|
||||
--- a/drivers/net/3c59x.c
|
||||
+++ b/drivers/net/3c59x.c
|
||||
@@ -435,7 +435,6 @@ MODULE_DEVICE_TABLE(pci, vortex_pci_tbl);
|
||||
First the windows. There are eight register windows, with the command
|
||||
and status registers available in each.
|
||||
*/
|
||||
-#define EL3WINDOW(win_num) iowrite16(SelectWindow + (win_num), ioaddr + EL3_CMD)
|
||||
#define EL3_CMD 0x0e
|
||||
#define EL3_STATUS 0x0e
|
||||
|
||||
@@ -647,8 +646,35 @@ struct vortex_private {
|
||||
u16 io_size; /* Size of PCI region (for release_region) */
|
||||
spinlock_t lock; /* Serialise access to device & its vortex_private */
|
||||
struct mii_if_info mii; /* MII lib hooks/info */
|
||||
+ int window; /* Register window */
|
||||
};
|
||||
|
||||
+static void window_set(struct vortex_private *vp, int window)
|
||||
+{
|
||||
+ if (window != vp->window) {
|
||||
+ iowrite16(SelectWindow + window, vp->ioaddr + EL3_CMD);
|
||||
+ vp->window = window;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#define DEFINE_WINDOW_IO(size) \
|
||||
+static u ## size \
|
||||
+window_read ## size(struct vortex_private *vp, int window, int addr) \
|
||||
+{ \
|
||||
+ window_set(vp, window); \
|
||||
+ return ioread ## size(vp->ioaddr + addr); \
|
||||
+} \
|
||||
+static void \
|
||||
+window_write ## size(struct vortex_private *vp, u ## size value, \
|
||||
+ int window, int addr) \
|
||||
+{ \
|
||||
+ window_set(vp, window); \
|
||||
+ iowrite ## size(value, vp->ioaddr + addr); \
|
||||
+}
|
||||
+DEFINE_WINDOW_IO(8)
|
||||
+DEFINE_WINDOW_IO(16)
|
||||
+DEFINE_WINDOW_IO(32)
|
||||
+
|
||||
#ifdef CONFIG_PCI
|
||||
#define DEVICE_PCI(dev) (((dev)->bus == &pci_bus_type) ? to_pci_dev((dev)) : NULL)
|
||||
#else
|
||||
@@ -711,7 +737,7 @@ static int vortex_probe1(struct device *gendev, void __iomem *ioaddr, int irq,
|
||||
static int vortex_up(struct net_device *dev);
|
||||
static void vortex_down(struct net_device *dev, int final);
|
||||
static int vortex_open(struct net_device *dev);
|
||||
-static void mdio_sync(void __iomem *ioaddr, int bits);
|
||||
+static void mdio_sync(struct vortex_private *vp, int bits);
|
||||
static int mdio_read(struct net_device *dev, int phy_id, int location);
|
||||
static void mdio_write(struct net_device *vp, int phy_id, int location, int value);
|
||||
static void vortex_timer(unsigned long arg);
|
||||
@@ -1119,6 +1145,7 @@ static int __devinit vortex_probe1(struct device *gendev,
|
||||
vp->has_nway = (vci->drv_flags & HAS_NWAY) ? 1 : 0;
|
||||
vp->io_size = vci->io_size;
|
||||
vp->card_idx = card_idx;
|
||||
+ vp->window = -1;
|
||||
|
||||
/* module list only for Compaq device */
|
||||
if (gendev == NULL) {
|
||||
@@ -1205,7 +1232,6 @@ static int __devinit vortex_probe1(struct device *gendev,
|
||||
vp->mii.force_media = vp->full_duplex;
|
||||
vp->options = option;
|
||||
/* Read the station address from the EEPROM. */
|
||||
- EL3WINDOW(0);
|
||||
{
|
||||
int base;
|
||||
|
||||
@@ -1218,14 +1244,15 @@ static int __devinit vortex_probe1(struct device *gendev,
|
||||
|
||||
for (i = 0; i < 0x40; i++) {
|
||||
int timer;
|
||||
- iowrite16(base + i, ioaddr + Wn0EepromCmd);
|
||||
+ window_write16(vp, base + i, 0, Wn0EepromCmd);
|
||||
/* Pause for at least 162 us. for the read to take place. */
|
||||
for (timer = 10; timer >= 0; timer--) {
|
||||
udelay(162);
|
||||
- if ((ioread16(ioaddr + Wn0EepromCmd) & 0x8000) == 0)
|
||||
+ if ((window_read16(vp, 0, Wn0EepromCmd) &
|
||||
+ 0x8000) == 0)
|
||||
break;
|
||||
}
|
||||
- eeprom[i] = ioread16(ioaddr + Wn0EepromData);
|
||||
+ eeprom[i] = window_read16(vp, 0, Wn0EepromData);
|
||||
}
|
||||
}
|
||||
for (i = 0; i < 0x18; i++)
|
||||
@@ -1250,9 +1277,8 @@ static int __devinit vortex_probe1(struct device *gendev,
|
||||
pr_err("*** EEPROM MAC address is invalid.\n");
|
||||
goto free_ring; /* With every pack */
|
||||
}
|
||||
- EL3WINDOW(2);
|
||||
for (i = 0; i < 6; i++)
|
||||
- iowrite8(dev->dev_addr[i], ioaddr + i);
|
||||
+ window_write8(vp, dev->dev_addr[i], 2, i);
|
||||
|
||||
if (print_info)
|
||||
pr_cont(", IRQ %d\n", dev->irq);
|
||||
@@ -1261,8 +1287,7 @@ static int __devinit vortex_probe1(struct device *gendev,
|
||||
pr_warning(" *** Warning: IRQ %d is unlikely to work! ***\n",
|
||||
dev->irq);
|
||||
|
||||
- EL3WINDOW(4);
|
||||
- step = (ioread8(ioaddr + Wn4_NetDiag) & 0x1e) >> 1;
|
||||
+ step = (window_read8(vp, 4, Wn4_NetDiag) & 0x1e) >> 1;
|
||||
if (print_info) {
|
||||
pr_info(" product code %02x%02x rev %02x.%d date %02d-%02d-%02d\n",
|
||||
eeprom[6]&0xff, eeprom[6]>>8, eeprom[0x14],
|
||||
@@ -1285,17 +1310,15 @@ static int __devinit vortex_probe1(struct device *gendev,
|
||||
(unsigned long long)pci_resource_start(pdev, 2),
|
||||
vp->cb_fn_base);
|
||||
}
|
||||
- EL3WINDOW(2);
|
||||
|
||||
- n = ioread16(ioaddr + Wn2_ResetOptions) & ~0x4010;
|
||||
+ n = window_read16(vp, 2, Wn2_ResetOptions) & ~0x4010;
|
||||
if (vp->drv_flags & INVERT_LED_PWR)
|
||||
n |= 0x10;
|
||||
if (vp->drv_flags & INVERT_MII_PWR)
|
||||
n |= 0x4000;
|
||||
- iowrite16(n, ioaddr + Wn2_ResetOptions);
|
||||
+ window_write16(vp, n, 2, Wn2_ResetOptions);
|
||||
if (vp->drv_flags & WNO_XCVR_PWR) {
|
||||
- EL3WINDOW(0);
|
||||
- iowrite16(0x0800, ioaddr);
|
||||
+ window_write16(vp, 0x0800, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1313,14 +1336,13 @@ static int __devinit vortex_probe1(struct device *gendev,
|
||||
{
|
||||
static const char * const ram_split[] = {"5:3", "3:1", "1:1", "3:5"};
|
||||
unsigned int config;
|
||||
- EL3WINDOW(3);
|
||||
- vp->available_media = ioread16(ioaddr + Wn3_Options);
|
||||
+ vp->available_media = window_read16(vp, 3, Wn3_Options);
|
||||
if ((vp->available_media & 0xff) == 0) /* Broken 3c916 */
|
||||
vp->available_media = 0x40;
|
||||
- config = ioread32(ioaddr + Wn3_Config);
|
||||
+ config = window_read32(vp, 3, Wn3_Config);
|
||||
if (print_info) {
|
||||
pr_debug(" Internal config register is %4.4x, transceivers %#x.\n",
|
||||
- config, ioread16(ioaddr + Wn3_Options));
|
||||
+ config, window_read16(vp, 3, Wn3_Options));
|
||||
pr_info(" %dK %s-wide RAM %s Rx:Tx split, %s%s interface.\n",
|
||||
8 << RAM_SIZE(config),
|
||||
RAM_WIDTH(config) ? "word" : "byte",
|
||||
@@ -1346,7 +1368,6 @@ static int __devinit vortex_probe1(struct device *gendev,
|
||||
if ((vp->available_media & 0x40) || (vci->drv_flags & HAS_NWAY) ||
|
||||
dev->if_port == XCVR_MII || dev->if_port == XCVR_NWAY) {
|
||||
int phy, phy_idx = 0;
|
||||
- EL3WINDOW(4);
|
||||
mii_preamble_required++;
|
||||
if (vp->drv_flags & EXTRA_PREAMBLE)
|
||||
mii_preamble_required++;
|
||||
@@ -1478,18 +1499,17 @@ static void
|
||||
vortex_set_duplex(struct net_device *dev)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- void __iomem *ioaddr = vp->ioaddr;
|
||||
|
||||
pr_info("%s: setting %s-duplex.\n",
|
||||
dev->name, (vp->full_duplex) ? "full" : "half");
|
||||
|
||||
- EL3WINDOW(3);
|
||||
/* Set the full-duplex bit. */
|
||||
- iowrite16(((vp->info1 & 0x8000) || vp->full_duplex ? 0x20 : 0) |
|
||||
- (vp->large_frames ? 0x40 : 0) |
|
||||
- ((vp->full_duplex && vp->flow_ctrl && vp->partner_flow_ctrl) ?
|
||||
- 0x100 : 0),
|
||||
- ioaddr + Wn3_MAC_Ctrl);
|
||||
+ window_write16(vp,
|
||||
+ ((vp->info1 & 0x8000) || vp->full_duplex ? 0x20 : 0) |
|
||||
+ (vp->large_frames ? 0x40 : 0) |
|
||||
+ ((vp->full_duplex && vp->flow_ctrl && vp->partner_flow_ctrl) ?
|
||||
+ 0x100 : 0),
|
||||
+ 3, Wn3_MAC_Ctrl);
|
||||
}
|
||||
|
||||
static void vortex_check_media(struct net_device *dev, unsigned int init)
|
||||
@@ -1529,8 +1549,7 @@ vortex_up(struct net_device *dev)
|
||||
}
|
||||
|
||||
/* Before initializing select the active media port. */
|
||||
- EL3WINDOW(3);
|
||||
- config = ioread32(ioaddr + Wn3_Config);
|
||||
+ config = window_read32(vp, 3, Wn3_Config);
|
||||
|
||||
if (vp->media_override != 7) {
|
||||
pr_info("%s: Media override to transceiver %d (%s).\n",
|
||||
@@ -1577,10 +1596,9 @@ vortex_up(struct net_device *dev)
|
||||
config = BFINS(config, dev->if_port, 20, 4);
|
||||
if (vortex_debug > 6)
|
||||
pr_debug("vortex_up(): writing 0x%x to InternalConfig\n", config);
|
||||
- iowrite32(config, ioaddr + Wn3_Config);
|
||||
+ window_write32(vp, config, 3, Wn3_Config);
|
||||
|
||||
if (dev->if_port == XCVR_MII || dev->if_port == XCVR_NWAY) {
|
||||
- EL3WINDOW(4);
|
||||
mii_reg1 = mdio_read(dev, vp->phys[0], MII_BMSR);
|
||||
mii_reg5 = mdio_read(dev, vp->phys[0], MII_LPA);
|
||||
vp->partner_flow_ctrl = ((mii_reg5 & 0x0400) != 0);
|
||||
@@ -1601,51 +1619,46 @@ vortex_up(struct net_device *dev)
|
||||
iowrite16(SetStatusEnb | 0x00, ioaddr + EL3_CMD);
|
||||
|
||||
if (vortex_debug > 1) {
|
||||
- EL3WINDOW(4);
|
||||
pr_debug("%s: vortex_up() irq %d media status %4.4x.\n",
|
||||
- dev->name, dev->irq, ioread16(ioaddr + Wn4_Media));
|
||||
+ dev->name, dev->irq, window_read16(vp, 4, Wn4_Media));
|
||||
}
|
||||
|
||||
/* Set the station address and mask in window 2 each time opened. */
|
||||
- EL3WINDOW(2);
|
||||
for (i = 0; i < 6; i++)
|
||||
- iowrite8(dev->dev_addr[i], ioaddr + i);
|
||||
+ window_write8(vp, dev->dev_addr[i], 2, i);
|
||||
for (; i < 12; i+=2)
|
||||
- iowrite16(0, ioaddr + i);
|
||||
+ window_write16(vp, 0, 2, i);
|
||||
|
||||
if (vp->cb_fn_base) {
|
||||
- unsigned short n = ioread16(ioaddr + Wn2_ResetOptions) & ~0x4010;
|
||||
+ unsigned short n = window_read16(vp, 2, Wn2_ResetOptions) & ~0x4010;
|
||||
if (vp->drv_flags & INVERT_LED_PWR)
|
||||
n |= 0x10;
|
||||
if (vp->drv_flags & INVERT_MII_PWR)
|
||||
n |= 0x4000;
|
||||
- iowrite16(n, ioaddr + Wn2_ResetOptions);
|
||||
+ window_write16(vp, n, 2, Wn2_ResetOptions);
|
||||
}
|
||||
|
||||
if (dev->if_port == XCVR_10base2)
|
||||
/* Start the thinnet transceiver. We should really wait 50ms...*/
|
||||
iowrite16(StartCoax, ioaddr + EL3_CMD);
|
||||
if (dev->if_port != XCVR_NWAY) {
|
||||
- EL3WINDOW(4);
|
||||
- iowrite16((ioread16(ioaddr + Wn4_Media) & ~(Media_10TP|Media_SQE)) |
|
||||
- media_tbl[dev->if_port].media_bits, ioaddr + Wn4_Media);
|
||||
+ window_write16(vp,
|
||||
+ (window_read16(vp, 4, Wn4_Media) &
|
||||
+ ~(Media_10TP|Media_SQE)) |
|
||||
+ media_tbl[dev->if_port].media_bits,
|
||||
+ 4, Wn4_Media);
|
||||
}
|
||||
|
||||
/* Switch to the stats window, and clear all stats by reading. */
|
||||
iowrite16(StatsDisable, ioaddr + EL3_CMD);
|
||||
- EL3WINDOW(6);
|
||||
for (i = 0; i < 10; i++)
|
||||
- ioread8(ioaddr + i);
|
||||
- ioread16(ioaddr + 10);
|
||||
- ioread16(ioaddr + 12);
|
||||
+ window_read8(vp, 6, i);
|
||||
+ window_read16(vp, 6, 10);
|
||||
+ window_read16(vp, 6, 12);
|
||||
/* New: On the Vortex we must also clear the BadSSD counter. */
|
||||
- EL3WINDOW(4);
|
||||
- ioread8(ioaddr + 12);
|
||||
+ window_read8(vp, 4, 12);
|
||||
/* ..and on the Boomerang we enable the extra statistics bits. */
|
||||
- iowrite16(0x0040, ioaddr + Wn4_NetDiag);
|
||||
-
|
||||
- /* Switch to register set 7 for normal use. */
|
||||
- EL3WINDOW(7);
|
||||
+ window_write16(vp, 0x0040, 4, Wn4_NetDiag);
|
||||
|
||||
if (vp->full_bus_master_rx) { /* Boomerang bus master. */
|
||||
vp->cur_rx = vp->dirty_rx = 0;
|
||||
@@ -1763,7 +1776,7 @@ vortex_timer(unsigned long data)
|
||||
void __iomem *ioaddr = vp->ioaddr;
|
||||
int next_tick = 60*HZ;
|
||||
int ok = 0;
|
||||
- int media_status, old_window;
|
||||
+ int media_status;
|
||||
|
||||
if (vortex_debug > 2) {
|
||||
pr_debug("%s: Media selection timer tick happened, %s.\n",
|
||||
@@ -1772,9 +1785,7 @@ vortex_timer(unsigned long data)
|
||||
}
|
||||
|
||||
disable_irq_lockdep(dev->irq);
|
||||
- old_window = ioread16(ioaddr + EL3_CMD) >> 13;
|
||||
- EL3WINDOW(4);
|
||||
- media_status = ioread16(ioaddr + Wn4_Media);
|
||||
+ media_status = window_read16(vp, 4, Wn4_Media);
|
||||
switch (dev->if_port) {
|
||||
case XCVR_10baseT: case XCVR_100baseTx: case XCVR_100baseFx:
|
||||
if (media_status & Media_LnkBeat) {
|
||||
@@ -1830,13 +1841,14 @@ vortex_timer(unsigned long data)
|
||||
dev->name, media_tbl[dev->if_port].name);
|
||||
next_tick = media_tbl[dev->if_port].wait;
|
||||
}
|
||||
- iowrite16((media_status & ~(Media_10TP|Media_SQE)) |
|
||||
- media_tbl[dev->if_port].media_bits, ioaddr + Wn4_Media);
|
||||
+ window_write16(vp,
|
||||
+ (media_status & ~(Media_10TP|Media_SQE)) |
|
||||
+ media_tbl[dev->if_port].media_bits,
|
||||
+ 4, Wn4_Media);
|
||||
|
||||
- EL3WINDOW(3);
|
||||
- config = ioread32(ioaddr + Wn3_Config);
|
||||
+ config = window_read32(vp, 3, Wn3_Config);
|
||||
config = BFINS(config, dev->if_port, 20, 4);
|
||||
- iowrite32(config, ioaddr + Wn3_Config);
|
||||
+ window_write32(vp, config, 3, Wn3_Config);
|
||||
|
||||
iowrite16(dev->if_port == XCVR_10base2 ? StartCoax : StopCoax,
|
||||
ioaddr + EL3_CMD);
|
||||
@@ -1850,7 +1862,6 @@ leave_media_alone:
|
||||
pr_debug("%s: Media selection timer finished, %s.\n",
|
||||
dev->name, media_tbl[dev->if_port].name);
|
||||
|
||||
- EL3WINDOW(old_window);
|
||||
enable_irq_lockdep(dev->irq);
|
||||
mod_timer(&vp->timer, RUN_AT(next_tick));
|
||||
if (vp->deferred)
|
||||
@@ -1865,12 +1876,11 @@ static void vortex_tx_timeout(struct net_device *dev)
|
||||
pr_err("%s: transmit timed out, tx_status %2.2x status %4.4x.\n",
|
||||
dev->name, ioread8(ioaddr + TxStatus),
|
||||
ioread16(ioaddr + EL3_STATUS));
|
||||
- EL3WINDOW(4);
|
||||
pr_err(" diagnostics: net %04x media %04x dma %08x fifo %04x\n",
|
||||
- ioread16(ioaddr + Wn4_NetDiag),
|
||||
- ioread16(ioaddr + Wn4_Media),
|
||||
+ window_read16(vp, 4, Wn4_NetDiag),
|
||||
+ window_read16(vp, 4, Wn4_Media),
|
||||
ioread32(ioaddr + PktStatus),
|
||||
- ioread16(ioaddr + Wn4_FIFODiag));
|
||||
+ window_read16(vp, 4, Wn4_FIFODiag));
|
||||
/* Slight code bloat to be user friendly. */
|
||||
if ((ioread8(ioaddr + TxStatus) & 0x88) == 0x88)
|
||||
pr_err("%s: Transmitter encountered 16 collisions --"
|
||||
@@ -1917,9 +1927,6 @@ static void vortex_tx_timeout(struct net_device *dev)
|
||||
/* Issue Tx Enable */
|
||||
iowrite16(TxEnable, ioaddr + EL3_CMD);
|
||||
dev->trans_start = jiffies; /* prevent tx timeout */
|
||||
-
|
||||
- /* Switch to register set 7 for normal use. */
|
||||
- EL3WINDOW(7);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1980,10 +1987,10 @@ vortex_error(struct net_device *dev, int status)
|
||||
ioread16(ioaddr + EL3_STATUS) & StatsFull) {
|
||||
pr_warning("%s: Updating statistics failed, disabling "
|
||||
"stats as an interrupt source.\n", dev->name);
|
||||
- EL3WINDOW(5);
|
||||
- iowrite16(SetIntrEnb | (ioread16(ioaddr + 10) & ~StatsFull), ioaddr + EL3_CMD);
|
||||
+ iowrite16(SetIntrEnb |
|
||||
+ (window_read16(vp, 5, 10) & ~StatsFull),
|
||||
+ ioaddr + EL3_CMD);
|
||||
vp->intr_enable &= ~StatsFull;
|
||||
- EL3WINDOW(7);
|
||||
DoneDidThat++;
|
||||
}
|
||||
}
|
||||
@@ -1993,8 +2000,7 @@ vortex_error(struct net_device *dev, int status)
|
||||
}
|
||||
if (status & HostError) {
|
||||
u16 fifo_diag;
|
||||
- EL3WINDOW(4);
|
||||
- fifo_diag = ioread16(ioaddr + Wn4_FIFODiag);
|
||||
+ fifo_diag = window_read16(vp, 4, Wn4_FIFODiag);
|
||||
pr_err("%s: Host error, FIFO diagnostic register %4.4x.\n",
|
||||
dev->name, fifo_diag);
|
||||
/* Adapter failure requires Tx/Rx reset and reinit. */
|
||||
@@ -2043,8 +2049,10 @@ vortex_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
if (vp->bus_master) {
|
||||
/* Set the bus-master controller to transfer the packet. */
|
||||
int len = (skb->len + 3) & ~3;
|
||||
- iowrite32(vp->tx_skb_dma = pci_map_single(VORTEX_PCI(vp), skb->data, len, PCI_DMA_TODEVICE),
|
||||
- ioaddr + Wn7_MasterAddr);
|
||||
+ vp->tx_skb_dma = pci_map_single(VORTEX_PCI(vp), skb->data, len,
|
||||
+ PCI_DMA_TODEVICE);
|
||||
+ window_set(vp, 7);
|
||||
+ iowrite32(vp->tx_skb_dma, ioaddr + Wn7_MasterAddr);
|
||||
iowrite16(len, ioaddr + Wn7_MasterLen);
|
||||
vp->tx_skb = skb;
|
||||
iowrite16(StartDMADown, ioaddr + EL3_CMD);
|
||||
@@ -2217,6 +2225,8 @@ vortex_interrupt(int irq, void *dev_id)
|
||||
pr_debug("%s: interrupt, status %4.4x, latency %d ticks.\n",
|
||||
dev->name, status, ioread8(ioaddr + Timer));
|
||||
|
||||
+ window_set(vp, 7);
|
||||
+
|
||||
do {
|
||||
if (vortex_debug > 5)
|
||||
pr_debug("%s: In interrupt loop, status %4.4x.\n",
|
||||
@@ -2760,54 +2770,46 @@ static struct net_device_stats *vortex_get_stats(struct net_device *dev)
|
||||
static void update_stats(void __iomem *ioaddr, struct net_device *dev)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- int old_window = ioread16(ioaddr + EL3_CMD);
|
||||
|
||||
- if (old_window == 0xffff) /* Chip suspended or ejected. */
|
||||
- return;
|
||||
/* Unlike the 3c5x9 we need not turn off stats updates while reading. */
|
||||
/* Switch to the stats window, and read everything. */
|
||||
- EL3WINDOW(6);
|
||||
- dev->stats.tx_carrier_errors += ioread8(ioaddr + 0);
|
||||
- dev->stats.tx_heartbeat_errors += ioread8(ioaddr + 1);
|
||||
- dev->stats.tx_window_errors += ioread8(ioaddr + 4);
|
||||
- dev->stats.rx_fifo_errors += ioread8(ioaddr + 5);
|
||||
- dev->stats.tx_packets += ioread8(ioaddr + 6);
|
||||
- dev->stats.tx_packets += (ioread8(ioaddr + 9)&0x30) << 4;
|
||||
- /* Rx packets */ ioread8(ioaddr + 7); /* Must read to clear */
|
||||
+ dev->stats.tx_carrier_errors += window_read8(vp, 6, 0);
|
||||
+ dev->stats.tx_heartbeat_errors += window_read8(vp, 6, 1);
|
||||
+ dev->stats.tx_window_errors += window_read8(vp, 6, 4);
|
||||
+ dev->stats.rx_fifo_errors += window_read8(vp, 6, 5);
|
||||
+ dev->stats.tx_packets += window_read8(vp, 6, 6);
|
||||
+ dev->stats.tx_packets += (window_read8(vp, 6, 9) &
|
||||
+ 0x30) << 4;
|
||||
+ /* Rx packets */ window_read8(vp, 6, 7); /* Must read to clear */
|
||||
/* Don't bother with register 9, an extension of registers 6&7.
|
||||
If we do use the 6&7 values the atomic update assumption above
|
||||
is invalid. */
|
||||
- dev->stats.rx_bytes += ioread16(ioaddr + 10);
|
||||
- dev->stats.tx_bytes += ioread16(ioaddr + 12);
|
||||
+ dev->stats.rx_bytes += window_read16(vp, 6, 10);
|
||||
+ dev->stats.tx_bytes += window_read16(vp, 6, 12);
|
||||
/* Extra stats for get_ethtool_stats() */
|
||||
- vp->xstats.tx_multiple_collisions += ioread8(ioaddr + 2);
|
||||
- vp->xstats.tx_single_collisions += ioread8(ioaddr + 3);
|
||||
- vp->xstats.tx_deferred += ioread8(ioaddr + 8);
|
||||
- EL3WINDOW(4);
|
||||
- vp->xstats.rx_bad_ssd += ioread8(ioaddr + 12);
|
||||
+ vp->xstats.tx_multiple_collisions += window_read8(vp, 6, 2);
|
||||
+ vp->xstats.tx_single_collisions += window_read8(vp, 6, 3);
|
||||
+ vp->xstats.tx_deferred += window_read8(vp, 6, 8);
|
||||
+ vp->xstats.rx_bad_ssd += window_read8(vp, 4, 12);
|
||||
|
||||
dev->stats.collisions = vp->xstats.tx_multiple_collisions
|
||||
+ vp->xstats.tx_single_collisions
|
||||
+ vp->xstats.tx_max_collisions;
|
||||
|
||||
{
|
||||
- u8 up = ioread8(ioaddr + 13);
|
||||
+ u8 up = window_read8(vp, 4, 13);
|
||||
dev->stats.rx_bytes += (up & 0x0f) << 16;
|
||||
dev->stats.tx_bytes += (up & 0xf0) << 12;
|
||||
}
|
||||
-
|
||||
- EL3WINDOW(old_window >> 13);
|
||||
}
|
||||
|
||||
static int vortex_nway_reset(struct net_device *dev)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- void __iomem *ioaddr = vp->ioaddr;
|
||||
unsigned long flags;
|
||||
int rc;
|
||||
|
||||
spin_lock_irqsave(&vp->lock, flags);
|
||||
- EL3WINDOW(4);
|
||||
rc = mii_nway_restart(&vp->mii);
|
||||
spin_unlock_irqrestore(&vp->lock, flags);
|
||||
return rc;
|
||||
@@ -2816,12 +2818,10 @@ static int vortex_nway_reset(struct net_device *dev)
|
||||
static int vortex_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- void __iomem *ioaddr = vp->ioaddr;
|
||||
unsigned long flags;
|
||||
int rc;
|
||||
|
||||
spin_lock_irqsave(&vp->lock, flags);
|
||||
- EL3WINDOW(4);
|
||||
rc = mii_ethtool_gset(&vp->mii, cmd);
|
||||
spin_unlock_irqrestore(&vp->lock, flags);
|
||||
return rc;
|
||||
@@ -2830,12 +2830,10 @@ static int vortex_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
||||
static int vortex_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- void __iomem *ioaddr = vp->ioaddr;
|
||||
unsigned long flags;
|
||||
int rc;
|
||||
|
||||
spin_lock_irqsave(&vp->lock, flags);
|
||||
- EL3WINDOW(4);
|
||||
rc = mii_ethtool_sset(&vp->mii, cmd);
|
||||
spin_unlock_irqrestore(&vp->lock, flags);
|
||||
return rc;
|
||||
@@ -2930,7 +2928,6 @@ static int vortex_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||
{
|
||||
int err;
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- void __iomem *ioaddr = vp->ioaddr;
|
||||
unsigned long flags;
|
||||
pci_power_t state = 0;
|
||||
|
||||
@@ -2942,7 +2939,6 @@ static int vortex_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||
if(state != 0)
|
||||
pci_set_power_state(VORTEX_PCI(vp), PCI_D0);
|
||||
spin_lock_irqsave(&vp->lock, flags);
|
||||
- EL3WINDOW(4);
|
||||
err = generic_mii_ioctl(&vp->mii, if_mii(rq), cmd, NULL);
|
||||
spin_unlock_irqrestore(&vp->lock, flags);
|
||||
if(state != 0)
|
||||
@@ -2985,8 +2981,6 @@ static void set_rx_mode(struct net_device *dev)
|
||||
static void set_8021q_mode(struct net_device *dev, int enable)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- void __iomem *ioaddr = vp->ioaddr;
|
||||
- int old_window = ioread16(ioaddr + EL3_CMD);
|
||||
int mac_ctrl;
|
||||
|
||||
if ((vp->drv_flags&IS_CYCLONE) || (vp->drv_flags&IS_TORNADO)) {
|
||||
@@ -2997,28 +2991,23 @@ static void set_8021q_mode(struct net_device *dev, int enable)
|
||||
if (enable)
|
||||
max_pkt_size += 4; /* 802.1Q VLAN tag */
|
||||
|
||||
- EL3WINDOW(3);
|
||||
- iowrite16(max_pkt_size, ioaddr+Wn3_MaxPktSize);
|
||||
+ window_write16(vp, max_pkt_size, 3, Wn3_MaxPktSize);
|
||||
|
||||
/* set VlanEtherType to let the hardware checksumming
|
||||
treat tagged frames correctly */
|
||||
- EL3WINDOW(7);
|
||||
- iowrite16(VLAN_ETHER_TYPE, ioaddr+Wn7_VlanEtherType);
|
||||
+ window_write16(vp, VLAN_ETHER_TYPE, 7, Wn7_VlanEtherType);
|
||||
} else {
|
||||
/* on older cards we have to enable large frames */
|
||||
|
||||
vp->large_frames = dev->mtu > 1500 || enable;
|
||||
|
||||
- EL3WINDOW(3);
|
||||
- mac_ctrl = ioread16(ioaddr+Wn3_MAC_Ctrl);
|
||||
+ mac_ctrl = window_read16(vp, 3, Wn3_MAC_Ctrl);
|
||||
if (vp->large_frames)
|
||||
mac_ctrl |= 0x40;
|
||||
else
|
||||
mac_ctrl &= ~0x40;
|
||||
- iowrite16(mac_ctrl, ioaddr+Wn3_MAC_Ctrl);
|
||||
+ window_write16(vp, mac_ctrl, 3, Wn3_MAC_Ctrl);
|
||||
}
|
||||
-
|
||||
- EL3WINDOW(old_window);
|
||||
}
|
||||
#else
|
||||
|
||||
@@ -3037,7 +3026,10 @@ static void set_8021q_mode(struct net_device *dev, int enable)
|
||||
/* The maximum data clock rate is 2.5 Mhz. The minimum timing is usually
|
||||
met by back-to-back PCI I/O cycles, but we insert a delay to avoid
|
||||
"overclocking" issues. */
|
||||
-#define mdio_delay() ioread32(mdio_addr)
|
||||
+static void mdio_delay(struct vortex_private *vp)
|
||||
+{
|
||||
+ window_read32(vp, 4, Wn4_PhysicalMgmt);
|
||||
+}
|
||||
|
||||
#define MDIO_SHIFT_CLK 0x01
|
||||
#define MDIO_DIR_WRITE 0x04
|
||||
@@ -3048,16 +3040,15 @@ static void set_8021q_mode(struct net_device *dev, int enable)
|
||||
|
||||
/* Generate the preamble required for initial synchronization and
|
||||
a few older transceivers. */
|
||||
-static void mdio_sync(void __iomem *ioaddr, int bits)
|
||||
+static void mdio_sync(struct vortex_private *vp, int bits)
|
||||
{
|
||||
- void __iomem *mdio_addr = ioaddr + Wn4_PhysicalMgmt;
|
||||
-
|
||||
/* Establish sync by sending at least 32 logic ones. */
|
||||
while (-- bits >= 0) {
|
||||
- iowrite16(MDIO_DATA_WRITE1, mdio_addr);
|
||||
- mdio_delay();
|
||||
- iowrite16(MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, mdio_addr);
|
||||
- mdio_delay();
|
||||
+ window_write16(vp, MDIO_DATA_WRITE1, 4, Wn4_PhysicalMgmt);
|
||||
+ mdio_delay(vp);
|
||||
+ window_write16(vp, MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK,
|
||||
+ 4, Wn4_PhysicalMgmt);
|
||||
+ mdio_delay(vp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3065,29 +3056,31 @@ static int mdio_read(struct net_device *dev, int phy_id, int location)
|
||||
{
|
||||
int i;
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- void __iomem *ioaddr = vp->ioaddr;
|
||||
int read_cmd = (0xf6 << 10) | (phy_id << 5) | location;
|
||||
unsigned int retval = 0;
|
||||
- void __iomem *mdio_addr = ioaddr + Wn4_PhysicalMgmt;
|
||||
|
||||
if (mii_preamble_required)
|
||||
- mdio_sync(ioaddr, 32);
|
||||
+ mdio_sync(vp, 32);
|
||||
|
||||
/* Shift the read command bits out. */
|
||||
for (i = 14; i >= 0; i--) {
|
||||
int dataval = (read_cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
|
||||
- iowrite16(dataval, mdio_addr);
|
||||
- mdio_delay();
|
||||
- iowrite16(dataval | MDIO_SHIFT_CLK, mdio_addr);
|
||||
- mdio_delay();
|
||||
+ window_write16(vp, dataval, 4, Wn4_PhysicalMgmt);
|
||||
+ mdio_delay(vp);
|
||||
+ window_write16(vp, dataval | MDIO_SHIFT_CLK,
|
||||
+ 4, Wn4_PhysicalMgmt);
|
||||
+ mdio_delay(vp);
|
||||
}
|
||||
/* Read the two transition, 16 data, and wire-idle bits. */
|
||||
for (i = 19; i > 0; i--) {
|
||||
- iowrite16(MDIO_ENB_IN, mdio_addr);
|
||||
- mdio_delay();
|
||||
- retval = (retval << 1) | ((ioread16(mdio_addr) & MDIO_DATA_READ) ? 1 : 0);
|
||||
- iowrite16(MDIO_ENB_IN | MDIO_SHIFT_CLK, mdio_addr);
|
||||
- mdio_delay();
|
||||
+ window_write16(vp, MDIO_ENB_IN, 4, Wn4_PhysicalMgmt);
|
||||
+ mdio_delay(vp);
|
||||
+ retval = (retval << 1) |
|
||||
+ ((window_read16(vp, 4, Wn4_PhysicalMgmt) &
|
||||
+ MDIO_DATA_READ) ? 1 : 0);
|
||||
+ window_write16(vp, MDIO_ENB_IN | MDIO_SHIFT_CLK,
|
||||
+ 4, Wn4_PhysicalMgmt);
|
||||
+ mdio_delay(vp);
|
||||
}
|
||||
return retval & 0x20000 ? 0xffff : retval>>1 & 0xffff;
|
||||
}
|
||||
@@ -3095,28 +3088,28 @@ static int mdio_read(struct net_device *dev, int phy_id, int location)
|
||||
static void mdio_write(struct net_device *dev, int phy_id, int location, int value)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- void __iomem *ioaddr = vp->ioaddr;
|
||||
int write_cmd = 0x50020000 | (phy_id << 23) | (location << 18) | value;
|
||||
- void __iomem *mdio_addr = ioaddr + Wn4_PhysicalMgmt;
|
||||
int i;
|
||||
|
||||
if (mii_preamble_required)
|
||||
- mdio_sync(ioaddr, 32);
|
||||
+ mdio_sync(vp, 32);
|
||||
|
||||
/* Shift the command bits out. */
|
||||
for (i = 31; i >= 0; i--) {
|
||||
int dataval = (write_cmd&(1<<i)) ? MDIO_DATA_WRITE1 : MDIO_DATA_WRITE0;
|
||||
- iowrite16(dataval, mdio_addr);
|
||||
- mdio_delay();
|
||||
- iowrite16(dataval | MDIO_SHIFT_CLK, mdio_addr);
|
||||
- mdio_delay();
|
||||
+ window_write16(vp, dataval, 4, Wn4_PhysicalMgmt);
|
||||
+ mdio_delay(vp);
|
||||
+ window_write16(vp, dataval | MDIO_SHIFT_CLK,
|
||||
+ 4, Wn4_PhysicalMgmt);
|
||||
+ mdio_delay(vp);
|
||||
}
|
||||
/* Leave the interface idle. */
|
||||
for (i = 1; i >= 0; i--) {
|
||||
- iowrite16(MDIO_ENB_IN, mdio_addr);
|
||||
- mdio_delay();
|
||||
- iowrite16(MDIO_ENB_IN | MDIO_SHIFT_CLK, mdio_addr);
|
||||
- mdio_delay();
|
||||
+ window_write16(vp, MDIO_ENB_IN, 4, Wn4_PhysicalMgmt);
|
||||
+ mdio_delay(vp);
|
||||
+ window_write16(vp, MDIO_ENB_IN | MDIO_SHIFT_CLK,
|
||||
+ 4, Wn4_PhysicalMgmt);
|
||||
+ mdio_delay(vp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3131,8 +3124,7 @@ static void acpi_set_WOL(struct net_device *dev)
|
||||
|
||||
if (vp->enable_wol) {
|
||||
/* Power up on: 1==Downloaded Filter, 2==Magic Packets, 4==Link Status. */
|
||||
- EL3WINDOW(7);
|
||||
- iowrite16(2, ioaddr + 0x0c);
|
||||
+ window_write16(vp, 2, 7, 0x0c);
|
||||
/* The RxFilter must accept the WOL frames. */
|
||||
iowrite16(SetRxFilter|RxStation|RxMulticast|RxBroadcast, ioaddr + EL3_CMD);
|
||||
iowrite16(RxEnable, ioaddr + EL3_CMD);
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,231 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Tue, 29 Jun 2010 15:26:56 +0000
|
||||
Subject: [PATCH 2/2] 3c59x: Use fine-grained locks for MII and windowed register access
|
||||
|
||||
commit de847272149365363a6043a963a6f42fb91566e2 upstream.
|
||||
|
||||
This avoids scheduling in atomic context and also means that IRQs
|
||||
will only be deferred for relatively short periods of time.
|
||||
|
||||
Previously discussed in:
|
||||
http://article.gmane.org/gmane.linux.network/155024
|
||||
|
||||
Reported-by: Arne Nordmark <nordmark@mech.kth.se>
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/3c59x.c | 68 ++++++++++++++++++++++++++++++--------------------
|
||||
1 files changed, 41 insertions(+), 27 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c
|
||||
index beddef9..069a03f 100644
|
||||
--- a/drivers/net/3c59x.c
|
||||
+++ b/drivers/net/3c59x.c
|
||||
@@ -644,9 +644,15 @@ struct vortex_private {
|
||||
u16 deferred; /* Resend these interrupts when we
|
||||
* bale from the ISR */
|
||||
u16 io_size; /* Size of PCI region (for release_region) */
|
||||
- spinlock_t lock; /* Serialise access to device & its vortex_private */
|
||||
- struct mii_if_info mii; /* MII lib hooks/info */
|
||||
- int window; /* Register window */
|
||||
+
|
||||
+ /* Serialises access to hardware other than MII and variables below.
|
||||
+ * The lock hierarchy is rtnl_lock > lock > mii_lock > window_lock. */
|
||||
+ spinlock_t lock;
|
||||
+
|
||||
+ spinlock_t mii_lock; /* Serialises access to MII */
|
||||
+ struct mii_if_info mii; /* MII lib hooks/info */
|
||||
+ spinlock_t window_lock; /* Serialises access to windowed regs */
|
||||
+ int window; /* Register window */
|
||||
};
|
||||
|
||||
static void window_set(struct vortex_private *vp, int window)
|
||||
@@ -661,15 +667,23 @@ static void window_set(struct vortex_private *vp, int window)
|
||||
static u ## size \
|
||||
window_read ## size(struct vortex_private *vp, int window, int addr) \
|
||||
{ \
|
||||
+ unsigned long flags; \
|
||||
+ u ## size ret; \
|
||||
+ spin_lock_irqsave(&vp->window_lock, flags); \
|
||||
window_set(vp, window); \
|
||||
- return ioread ## size(vp->ioaddr + addr); \
|
||||
+ ret = ioread ## size(vp->ioaddr + addr); \
|
||||
+ spin_unlock_irqrestore(&vp->window_lock, flags); \
|
||||
+ return ret; \
|
||||
} \
|
||||
static void \
|
||||
window_write ## size(struct vortex_private *vp, u ## size value, \
|
||||
int window, int addr) \
|
||||
{ \
|
||||
+ unsigned long flags; \
|
||||
+ spin_lock_irqsave(&vp->window_lock, flags); \
|
||||
window_set(vp, window); \
|
||||
iowrite ## size(value, vp->ioaddr + addr); \
|
||||
+ spin_unlock_irqrestore(&vp->window_lock, flags); \
|
||||
}
|
||||
DEFINE_WINDOW_IO(8)
|
||||
DEFINE_WINDOW_IO(16)
|
||||
@@ -1181,6 +1195,8 @@ static int __devinit vortex_probe1(struct device *gendev,
|
||||
}
|
||||
|
||||
spin_lock_init(&vp->lock);
|
||||
+ spin_lock_init(&vp->mii_lock);
|
||||
+ spin_lock_init(&vp->window_lock);
|
||||
vp->gendev = gendev;
|
||||
vp->mii.dev = dev;
|
||||
vp->mii.mdio_read = mdio_read;
|
||||
@@ -1784,7 +1800,6 @@ vortex_timer(unsigned long data)
|
||||
pr_debug("dev->watchdog_timeo=%d\n", dev->watchdog_timeo);
|
||||
}
|
||||
|
||||
- disable_irq_lockdep(dev->irq);
|
||||
media_status = window_read16(vp, 4, Wn4_Media);
|
||||
switch (dev->if_port) {
|
||||
case XCVR_10baseT: case XCVR_100baseTx: case XCVR_100baseFx:
|
||||
@@ -1805,10 +1820,7 @@ vortex_timer(unsigned long data)
|
||||
case XCVR_MII: case XCVR_NWAY:
|
||||
{
|
||||
ok = 1;
|
||||
- /* Interrupts are already disabled */
|
||||
- spin_lock(&vp->lock);
|
||||
vortex_check_media(dev, 0);
|
||||
- spin_unlock(&vp->lock);
|
||||
}
|
||||
break;
|
||||
default: /* Other media types handled by Tx timeouts. */
|
||||
@@ -1827,6 +1839,8 @@ vortex_timer(unsigned long data)
|
||||
if (!ok) {
|
||||
unsigned int config;
|
||||
|
||||
+ spin_lock_irq(&vp->lock);
|
||||
+
|
||||
do {
|
||||
dev->if_port = media_tbl[dev->if_port].next;
|
||||
} while ( ! (vp->available_media & media_tbl[dev->if_port].mask));
|
||||
@@ -1855,6 +1869,8 @@ vortex_timer(unsigned long data)
|
||||
if (vortex_debug > 1)
|
||||
pr_debug("wrote 0x%08x to Wn3_Config\n", config);
|
||||
/* AKPM: FIXME: Should reset Rx & Tx here. P60 of 3c90xc.pdf */
|
||||
+
|
||||
+ spin_unlock_irq(&vp->lock);
|
||||
}
|
||||
|
||||
leave_media_alone:
|
||||
@@ -1862,7 +1878,6 @@ leave_media_alone:
|
||||
pr_debug("%s: Media selection timer finished, %s.\n",
|
||||
dev->name, media_tbl[dev->if_port].name);
|
||||
|
||||
- enable_irq_lockdep(dev->irq);
|
||||
mod_timer(&vp->timer, RUN_AT(next_tick));
|
||||
if (vp->deferred)
|
||||
iowrite16(FakeIntr, ioaddr + EL3_CMD);
|
||||
@@ -2051,9 +2066,11 @@ vortex_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
int len = (skb->len + 3) & ~3;
|
||||
vp->tx_skb_dma = pci_map_single(VORTEX_PCI(vp), skb->data, len,
|
||||
PCI_DMA_TODEVICE);
|
||||
+ spin_lock_irq(&vp->window_lock);
|
||||
window_set(vp, 7);
|
||||
iowrite32(vp->tx_skb_dma, ioaddr + Wn7_MasterAddr);
|
||||
iowrite16(len, ioaddr + Wn7_MasterLen);
|
||||
+ spin_unlock_irq(&vp->window_lock);
|
||||
vp->tx_skb = skb;
|
||||
iowrite16(StartDMADown, ioaddr + EL3_CMD);
|
||||
/* netif_wake_queue() will be called at the DMADone interrupt. */
|
||||
@@ -2225,6 +2242,7 @@ vortex_interrupt(int irq, void *dev_id)
|
||||
pr_debug("%s: interrupt, status %4.4x, latency %d ticks.\n",
|
||||
dev->name, status, ioread8(ioaddr + Timer));
|
||||
|
||||
+ spin_lock(&vp->window_lock);
|
||||
window_set(vp, 7);
|
||||
|
||||
do {
|
||||
@@ -2285,6 +2303,8 @@ vortex_interrupt(int irq, void *dev_id)
|
||||
iowrite16(AckIntr | IntReq | IntLatch, ioaddr + EL3_CMD);
|
||||
} while ((status = ioread16(ioaddr + EL3_STATUS)) & (IntLatch | RxComplete));
|
||||
|
||||
+ spin_unlock(&vp->window_lock);
|
||||
+
|
||||
if (vortex_debug > 4)
|
||||
pr_debug("%s: exiting interrupt, status %4.4x.\n",
|
||||
dev->name, status);
|
||||
@@ -2806,37 +2826,22 @@ static void update_stats(void __iomem *ioaddr, struct net_device *dev)
|
||||
static int vortex_nway_reset(struct net_device *dev)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- unsigned long flags;
|
||||
- int rc;
|
||||
|
||||
- spin_lock_irqsave(&vp->lock, flags);
|
||||
- rc = mii_nway_restart(&vp->mii);
|
||||
- spin_unlock_irqrestore(&vp->lock, flags);
|
||||
- return rc;
|
||||
+ return mii_nway_restart(&vp->mii);
|
||||
}
|
||||
|
||||
static int vortex_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- unsigned long flags;
|
||||
- int rc;
|
||||
|
||||
- spin_lock_irqsave(&vp->lock, flags);
|
||||
- rc = mii_ethtool_gset(&vp->mii, cmd);
|
||||
- spin_unlock_irqrestore(&vp->lock, flags);
|
||||
- return rc;
|
||||
+ return mii_ethtool_gset(&vp->mii, cmd);
|
||||
}
|
||||
|
||||
static int vortex_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
||||
{
|
||||
struct vortex_private *vp = netdev_priv(dev);
|
||||
- unsigned long flags;
|
||||
- int rc;
|
||||
|
||||
- spin_lock_irqsave(&vp->lock, flags);
|
||||
- rc = mii_ethtool_sset(&vp->mii, cmd);
|
||||
- spin_unlock_irqrestore(&vp->lock, flags);
|
||||
- return rc;
|
||||
+ return mii_ethtool_sset(&vp->mii, cmd);
|
||||
}
|
||||
|
||||
static u32 vortex_get_msglevel(struct net_device *dev)
|
||||
@@ -3059,6 +3064,8 @@ static int mdio_read(struct net_device *dev, int phy_id, int location)
|
||||
int read_cmd = (0xf6 << 10) | (phy_id << 5) | location;
|
||||
unsigned int retval = 0;
|
||||
|
||||
+ spin_lock_bh(&vp->mii_lock);
|
||||
+
|
||||
if (mii_preamble_required)
|
||||
mdio_sync(vp, 32);
|
||||
|
||||
@@ -3082,6 +3089,9 @@ static int mdio_read(struct net_device *dev, int phy_id, int location)
|
||||
4, Wn4_PhysicalMgmt);
|
||||
mdio_delay(vp);
|
||||
}
|
||||
+
|
||||
+ spin_unlock_bh(&vp->mii_lock);
|
||||
+
|
||||
return retval & 0x20000 ? 0xffff : retval>>1 & 0xffff;
|
||||
}
|
||||
|
||||
@@ -3091,6 +3101,8 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val
|
||||
int write_cmd = 0x50020000 | (phy_id << 23) | (location << 18) | value;
|
||||
int i;
|
||||
|
||||
+ spin_lock_bh(&vp->mii_lock);
|
||||
+
|
||||
if (mii_preamble_required)
|
||||
mdio_sync(vp, 32);
|
||||
|
||||
@@ -3111,6 +3123,8 @@ static void mdio_write(struct net_device *dev, int phy_id, int location, int val
|
||||
4, Wn4_PhysicalMgmt);
|
||||
mdio_delay(vp);
|
||||
}
|
||||
+
|
||||
+ spin_unlock_bh(&vp->mii_lock);
|
||||
}
|
||||
|
||||
/* ACPI: Advanced Configuration and Power Interface. */
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
From: Brian King <brking@linux.vnet.ibm.com>
|
||||
Subject: [PATCH 1/1] ipr: add writeq definition if needed
|
||||
Date: Wed, 09 Jun 2010 08:24:55 -0700
|
||||
|
||||
Compiling the driver will fail on 32 bit powerpc and other
|
||||
architectures where writeq is not defined. This patch adds a
|
||||
definition for writeq.
|
||||
|
||||
Signed-off-by: Wayne Boyer <wayneb@linux.vnet.ibm.com>
|
||||
Acked-by: Brian King <brking@linux.vnet.ibm.com>
|
||||
---
|
||||
|
||||
drivers/scsi/ipr.h | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
Index: b/drivers/scsi/ipr.h
|
||||
===================================================================
|
||||
--- a/drivers/scsi/ipr.h 2010-06-08 10:06:48.000000000 -0700
|
||||
+++ b/drivers/scsi/ipr.h 2010-06-08 15:14:42.000000000 -0700
|
||||
@@ -1860,4 +1860,12 @@ static inline int ipr_sdt_is_fmt2(u32 sd
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#ifndef writeq
|
||||
+static inline void writeq(u64 val, void __iomem *addr)
|
||||
+{
|
||||
+ writel(((u32) (val >> 32)), addr);
|
||||
+ writel(((u32) (val)), (addr + 4));
|
||||
+}
|
||||
#endif
|
||||
+
|
||||
+#endif /* _IPR_H */
|
||||
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
Subject: [PATCH 1/2] ipv6: Clamp reported valid_lft to a minimum of 0
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Sat, 26 Jun 2010 22:37:47 +0100
|
||||
|
||||
commit f56619fc72407561b00c52244a2caa53d730bc4a upstream.
|
||||
|
||||
Since addresses are only revalidated every 2 minutes, the reported
|
||||
valid_lft can underflow shortly before the address is deleted.
|
||||
Clamp it to a minimum of 0, as for prefered_lft.
|
||||
|
||||
Reported-by: Piotr Lewandowski <piotr.lewandowski@gmail.com>
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
net/ipv6/addrconf.c | 8 ++++++--
|
||||
1 files changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
|
||||
index b97bb1f..1459eed 100644
|
||||
--- a/net/ipv6/addrconf.c
|
||||
+++ b/net/ipv6/addrconf.c
|
||||
@@ -3492,8 +3492,12 @@ static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa,
|
||||
preferred -= tval;
|
||||
else
|
||||
preferred = 0;
|
||||
- if (valid != INFINITY_LIFE_TIME)
|
||||
- valid -= tval;
|
||||
+ if (valid != INFINITY_LIFE_TIME) {
|
||||
+ if (valid > tval)
|
||||
+ valid -= tval;
|
||||
+ else
|
||||
+ valid = 0;
|
||||
+ }
|
||||
}
|
||||
} else {
|
||||
preferred = INFINITY_LIFE_TIME;
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
Subject: [PATCH 2/2] ipv6: Use interface max_desync_factor instead of static default
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Sat, 26 Jun 2010 22:42:56 +0100
|
||||
|
||||
commit 784e2710ce3588d8316dc8efac9ecbebaeaf7c35 upstream.
|
||||
|
||||
max_desync_factor can be configured per-interface, but nothing is
|
||||
using the value.
|
||||
|
||||
Reported-by: Piotr Lewandowski <piotr.lewandowski@gmail.com>
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
net/ipv6/addrconf.c | 8 ++++----
|
||||
1 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
|
||||
index 1459eed..ec8c92f 100644
|
||||
--- a/net/ipv6/addrconf.c
|
||||
+++ b/net/ipv6/addrconf.c
|
||||
@@ -121,8 +121,6 @@ static inline void addrconf_sysctl_unregister(struct inet6_dev *idev)
|
||||
static int __ipv6_regen_rndid(struct inet6_dev *idev);
|
||||
static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr);
|
||||
static void ipv6_regen_rndid(unsigned long data);
|
||||
-
|
||||
-static int desync_factor = MAX_DESYNC_FACTOR * HZ;
|
||||
#endif
|
||||
|
||||
static int ipv6_generate_eui64(u8 *eui, struct net_device *dev);
|
||||
@@ -890,7 +888,8 @@ retry:
|
||||
idev->cnf.temp_valid_lft);
|
||||
tmp_prefered_lft = min_t(__u32,
|
||||
ifp->prefered_lft,
|
||||
- idev->cnf.temp_prefered_lft - desync_factor / HZ);
|
||||
+ idev->cnf.temp_prefered_lft -
|
||||
+ idev->cnf.max_desync_factor);
|
||||
tmp_plen = ifp->prefix_len;
|
||||
max_addresses = idev->cnf.max_addresses;
|
||||
tmp_cstamp = ifp->cstamp;
|
||||
@@ -1650,7 +1649,8 @@ static void ipv6_regen_rndid(unsigned long data)
|
||||
|
||||
expires = jiffies +
|
||||
idev->cnf.temp_prefered_lft * HZ -
|
||||
- idev->cnf.regen_max_retry * idev->cnf.dad_transmits * idev->nd_parms->retrans_time - desync_factor;
|
||||
+ idev->cnf.regen_max_retry * idev->cnf.dad_transmits * idev->nd_parms->retrans_time -
|
||||
+ idev->cnf.max_desync_factor * HZ;
|
||||
if (time_before(expires, jiffies)) {
|
||||
printk(KERN_WARNING
|
||||
"ipv6_regen_rndid(): too short regeneration interval; timer disabled for %s.\n",
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
From 95387e011a365a5309f6a6d621a215ab776b087a Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Thu, 3 Jun 2010 01:42:13 +0100
|
||||
Subject: [PATCH] V4L/DVB: mantis: Select correct frontends
|
||||
|
||||
Update the Kconfig selections to match the code.
|
||||
Add the usual condition of !DVB_FE_CUSTOMISE.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
drivers/media/dvb/mantis/Kconfig | 14 ++++++++++----
|
||||
1 files changed, 10 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/dvb/mantis/Kconfig b/drivers/media/dvb/mantis/Kconfig
|
||||
index f7b72a3..decdeda 100644
|
||||
--- a/drivers/media/dvb/mantis/Kconfig
|
||||
+++ b/drivers/media/dvb/mantis/Kconfig
|
||||
@@ -10,9 +10,15 @@ config MANTIS_CORE
|
||||
config DVB_MANTIS
|
||||
tristate "MANTIS based cards"
|
||||
depends on MANTIS_CORE && DVB_CORE && PCI && I2C
|
||||
- select DVB_MB86A16
|
||||
- select DVB_ZL10353
|
||||
- select DVB_STV0299
|
||||
+ select DVB_MB86A16 if !DVB_FE_CUSTOMISE
|
||||
+ select DVB_ZL10353 if !DVB_FE_CUSTOMISE
|
||||
+ select DVB_STV0299 if !DVB_FE_CUSTOMISE
|
||||
+ select DVB_LNBP21 if !DVB_FE_CUSTOMISE
|
||||
+ select DVB_STB0899 if !DVB_FE_CUSTOMISE
|
||||
+ select DVB_STB6100 if !DVB_FE_CUSTOMISE
|
||||
+ select DVB_TDA665x if !DVB_FE_CUSTOMISE
|
||||
+ select DVB_TDA10021 if !DVB_FE_CUSTOMISE
|
||||
+ select DVB_TDA10023 if !DVB_FE_CUSTOMISE
|
||||
select DVB_PLL
|
||||
help
|
||||
Support for PCI cards based on the Mantis PCI bridge.
|
||||
@@ -23,7 +29,7 @@ config DVB_MANTIS
|
||||
config DVB_HOPPER
|
||||
tristate "HOPPER based cards"
|
||||
depends on MANTIS_CORE && DVB_CORE && PCI && I2C
|
||||
- select DVB_ZL10353
|
||||
+ select DVB_ZL10353 if !DVB_FE_CUSTOMISE
|
||||
select DVB_PLL
|
||||
help
|
||||
Support for PCI cards based on the Hopper PCI bridge.
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,76 +0,0 @@
|
|||
From 11ac552477e32835cb6970bf0a70c210807f5673 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Date: Sat, 14 Aug 2010 11:44:56 -0700
|
||||
Subject: [PATCH] mm: fix page table unmap for stack guard page properly
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We do in fact need to unmap the page table _before_ doing the whole
|
||||
stack guard page logic, because if it is needed (mainly 32-bit x86 with
|
||||
PAE and CONFIG_HIGHPTE, but other architectures may use it too) then it
|
||||
will do a kmap_atomic/kunmap_atomic.
|
||||
|
||||
And those kmaps will create an atomic region that we cannot do
|
||||
allocations in. However, the whole stack expand code will need to do
|
||||
anon_vma_prepare() and vma_lock_anon_vma() and they cannot do that in an
|
||||
atomic region.
|
||||
|
||||
Now, a better model might actually be to do the anon_vma_prepare() when
|
||||
_creating_ a VM_GROWSDOWN segment, and not have to worry about any of
|
||||
this at page fault time. But in the meantime, this is the
|
||||
straightforward fix for the issue.
|
||||
|
||||
See https://bugzilla.kernel.org/show_bug.cgi?id=16588 for details.
|
||||
|
||||
Reported-by: Wylda <wylda@volny.cz>
|
||||
Reported-by: Sedat Dilek <sedat.dilek@gmail.com>
|
||||
Reported-by: Mike Pagano <mpagano@gentoo.org>
|
||||
Reported-by: François Valenduc <francois.valenduc@tvcablenet.be>
|
||||
Tested-by: Ed Tomlinson <edt@aei.ca>
|
||||
Cc: Pekka Enberg <penberg@kernel.org>
|
||||
Cc: Greg KH <gregkh@suse.de>
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
mm/memory.c | 13 ++++++-------
|
||||
1 files changed, 6 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index 9b3b73f..b6e5fd2 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -2792,24 +2792,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
spinlock_t *ptl;
|
||||
pte_t entry;
|
||||
|
||||
- if (check_stack_guard_page(vma, address) < 0) {
|
||||
- pte_unmap(page_table);
|
||||
+ pte_unmap(page_table);
|
||||
+
|
||||
+ /* Check if we need to add a guard page to the stack */
|
||||
+ if (check_stack_guard_page(vma, address) < 0)
|
||||
return VM_FAULT_SIGBUS;
|
||||
- }
|
||||
|
||||
+ /* Use the zero-page for reads */
|
||||
if (!(flags & FAULT_FLAG_WRITE)) {
|
||||
entry = pte_mkspecial(pfn_pte(my_zero_pfn(address),
|
||||
vma->vm_page_prot));
|
||||
- ptl = pte_lockptr(mm, pmd);
|
||||
- spin_lock(ptl);
|
||||
+ page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
|
||||
if (!pte_none(*page_table))
|
||||
goto unlock;
|
||||
goto setpte;
|
||||
}
|
||||
|
||||
/* Allocate our own private page. */
|
||||
- pte_unmap(page_table);
|
||||
-
|
||||
if (unlikely(anon_vma_prepare(vma)))
|
||||
goto oom;
|
||||
page = alloc_zeroed_user_highpage_movable(vma, address);
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
From d7824370e26325c881b665350ce64fb0a4fde24a Mon Sep 17 00:00:00 2001
|
||||
From: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Date: Sun, 15 Aug 2010 11:35:52 -0700
|
||||
Subject: [PATCH] mm: fix up some user-visible effects of the stack guard page
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This commit makes the stack guard page somewhat less visible to user
|
||||
space. It does this by:
|
||||
|
||||
- not showing the guard page in /proc/<pid>/maps
|
||||
|
||||
It looks like lvm-tools will actually read /proc/self/maps to figure
|
||||
out where all its mappings are, and effectively do a specialized
|
||||
"mlockall()" in user space. By not showing the guard page as part of
|
||||
the mapping (by just adding PAGE_SIZE to the start for grows-up
|
||||
pages), lvm-tools ends up not being aware of it.
|
||||
|
||||
- by also teaching the _real_ mlock() functionality not to try to lock
|
||||
the guard page.
|
||||
|
||||
That would just expand the mapping down to create a new guard page,
|
||||
so there really is no point in trying to lock it in place.
|
||||
|
||||
It would perhaps be nice to show the guard page specially in
|
||||
/proc/<pid>/maps (or at least mark grow-down segments some way), but
|
||||
let's not open ourselves up to more breakage by user space from programs
|
||||
that depends on the exact deails of the 'maps' file.
|
||||
|
||||
Special thanks to Henrique de Moraes Holschuh for diving into lvm-tools
|
||||
source code to see what was going on with the whole new warning.
|
||||
|
||||
Reported-and-tested-by: François Valenduc <francois.valenduc@tvcablenet.be
|
||||
Reported-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
fs/proc/task_mmu.c | 8 +++++++-
|
||||
mm/mlock.c | 8 ++++++++
|
||||
2 files changed, 15 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
|
||||
index aea1d3f..439fc1f 100644
|
||||
--- a/fs/proc/task_mmu.c
|
||||
+++ b/fs/proc/task_mmu.c
|
||||
@@ -210,6 +210,7 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
|
||||
int flags = vma->vm_flags;
|
||||
unsigned long ino = 0;
|
||||
unsigned long long pgoff = 0;
|
||||
+ unsigned long start;
|
||||
dev_t dev = 0;
|
||||
int len;
|
||||
|
||||
@@ -220,8 +221,13 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
|
||||
pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
|
||||
}
|
||||
|
||||
+ /* We don't show the stack guard page in /proc/maps */
|
||||
+ start = vma->vm_start;
|
||||
+ if (vma->vm_flags & VM_GROWSDOWN)
|
||||
+ start += PAGE_SIZE;
|
||||
+
|
||||
seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n",
|
||||
- vma->vm_start,
|
||||
+ start,
|
||||
vma->vm_end,
|
||||
flags & VM_READ ? 'r' : '-',
|
||||
flags & VM_WRITE ? 'w' : '-',
|
||||
diff --git a/mm/mlock.c b/mm/mlock.c
|
||||
index 3f82720..49e5e4c 100644
|
||||
--- a/mm/mlock.c
|
||||
+++ b/mm/mlock.c
|
||||
@@ -167,6 +167,14 @@ static long __mlock_vma_pages_range(struct vm_area_struct *vma,
|
||||
if (vma->vm_flags & VM_WRITE)
|
||||
gup_flags |= FOLL_WRITE;
|
||||
|
||||
+ /* We don't try to access the guard page of a stack vma */
|
||||
+ if (vma->vm_flags & VM_GROWSDOWN) {
|
||||
+ if (start == vma->vm_start) {
|
||||
+ start += PAGE_SIZE;
|
||||
+ nr_pages--;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
while (nr_pages > 0) {
|
||||
int i;
|
||||
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
commit cca77b7c81876d819a5806f408b3c29b5b61a815
|
||||
Author: Florian Westphal <fw@strlen.de>
|
||||
Date: Mon Aug 23 14:41:22 2010 -0700
|
||||
|
||||
netfilter: fix CONFIG_COMPAT support
|
||||
|
||||
commit f3c5c1bfd430858d3a05436f82c51e53104feb6b
|
||||
(netfilter: xtables: make ip_tables reentrant) forgot to
|
||||
also compute the jumpstack size in the compat handlers.
|
||||
|
||||
Result is that "iptables -I INPUT -j userchain" turns into -j DROP.
|
||||
|
||||
Reported by Sebastian Roesner on #netfilter, closes
|
||||
http://bugzilla.netfilter.org/show_bug.cgi?id=669.
|
||||
|
||||
Note: arptables change is compile-tested only.
|
||||
|
||||
Signed-off-by: Florian Westphal <fw@strlen.de>
|
||||
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
|
||||
Tested-by: Mikael Pettersson <mikpe@it.uu.se>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c
|
||||
index 51d6c31..e8f4f9a 100644
|
||||
--- a/net/ipv4/netfilter/arp_tables.c
|
||||
+++ b/net/ipv4/netfilter/arp_tables.c
|
||||
@@ -1420,6 +1420,9 @@ static int translate_compat_table(const char *name,
|
||||
if (ret != 0)
|
||||
break;
|
||||
++i;
|
||||
+ if (strcmp(arpt_get_target(iter1)->u.user.name,
|
||||
+ XT_ERROR_TARGET) == 0)
|
||||
+ ++newinfo->stacksize;
|
||||
}
|
||||
if (ret) {
|
||||
/*
|
||||
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c
|
||||
index 97b64b2..d163f2e 100644
|
||||
--- a/net/ipv4/netfilter/ip_tables.c
|
||||
+++ b/net/ipv4/netfilter/ip_tables.c
|
||||
@@ -1751,6 +1751,9 @@ translate_compat_table(struct net *net,
|
||||
if (ret != 0)
|
||||
break;
|
||||
++i;
|
||||
+ if (strcmp(ipt_get_target(iter1)->u.user.name,
|
||||
+ XT_ERROR_TARGET) == 0)
|
||||
+ ++newinfo->stacksize;
|
||||
}
|
||||
if (ret) {
|
||||
/*
|
||||
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c
|
||||
index 29a7bca..8e754be 100644
|
||||
--- a/net/ipv6/netfilter/ip6_tables.c
|
||||
+++ b/net/ipv6/netfilter/ip6_tables.c
|
||||
@@ -1766,6 +1766,9 @@ translate_compat_table(struct net *net,
|
||||
if (ret != 0)
|
||||
break;
|
||||
++i;
|
||||
+ if (strcmp(ip6t_get_target(iter1)->u.user.name,
|
||||
+ XT_ERROR_TARGET) == 0)
|
||||
+ ++newinfo->stacksize;
|
||||
}
|
||||
if (ret) {
|
||||
/*
|
|
@ -1,104 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Tue, 25 May 2010 04:20:30 +0100
|
||||
Subject: [PATCH] Staging: rtl8192su: Clean up in case of an error in module initialisation
|
||||
|
||||
commit 9a3dfa0555130952517b9a9c3918729495aa709a upstream.
|
||||
|
||||
Currently various resources may be leaked in case of an error.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
---
|
||||
drivers/staging/rtl8192su/r8192U_core.c | 43 ++++++++++++++++++++++++++-----
|
||||
1 files changed, 36 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c
|
||||
index 447d647..1b4ff90 100644
|
||||
--- a/drivers/staging/rtl8192su/r8192U_core.c
|
||||
+++ b/drivers/staging/rtl8192su/r8192U_core.c
|
||||
@@ -990,10 +990,11 @@ static int proc_get_stats_rx(char *page, char **start,
|
||||
return len;
|
||||
}
|
||||
|
||||
-void rtl8192_proc_module_init(void)
|
||||
+int rtl8192_proc_module_init(void)
|
||||
{
|
||||
RT_TRACE(COMP_INIT, "Initializing proc filesystem");
|
||||
rtl8192_proc=create_proc_entry(RTL819xU_MODULE_NAME, S_IFDIR, init_net.proc_net);
|
||||
+ return rtl8192_proc ? 0 : -ENOMEM;
|
||||
}
|
||||
|
||||
|
||||
@@ -7473,35 +7474,63 @@ static int __init rtl8192_usb_module_init(void)
|
||||
ret = ieee80211_crypto_init();
|
||||
if (ret) {
|
||||
printk(KERN_ERR "ieee80211_crypto_init() failed %d\n", ret);
|
||||
- return ret;
|
||||
+ goto fail_crypto;
|
||||
}
|
||||
|
||||
ret = ieee80211_crypto_tkip_init();
|
||||
if (ret) {
|
||||
printk(KERN_ERR "ieee80211_crypto_tkip_init() failed %d\n",
|
||||
ret);
|
||||
- return ret;
|
||||
+ goto fail_crypto_tkip;
|
||||
}
|
||||
|
||||
ret = ieee80211_crypto_ccmp_init();
|
||||
if (ret) {
|
||||
printk(KERN_ERR "ieee80211_crypto_ccmp_init() failed %d\n",
|
||||
ret);
|
||||
- return ret;
|
||||
+ goto fail_crypto_ccmp;
|
||||
}
|
||||
|
||||
ret = ieee80211_crypto_wep_init();
|
||||
if (ret) {
|
||||
printk(KERN_ERR "ieee80211_crypto_wep_init() failed %d\n", ret);
|
||||
- return ret;
|
||||
+ goto fail_crypto_wep;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "\nLinux kernel driver for RTL8192 based WLAN cards\n");
|
||||
printk(KERN_INFO "Copyright (c) 2007-2008, Realsil Wlan\n");
|
||||
RT_TRACE(COMP_INIT, "Initializing module");
|
||||
RT_TRACE(COMP_INIT, "Wireless extensions version %d", WIRELESS_EXT);
|
||||
- rtl8192_proc_module_init();
|
||||
- return usb_register(&rtl8192_usb_driver);
|
||||
+
|
||||
+ ret = rtl8192_proc_module_init();
|
||||
+ if (ret) {
|
||||
+ pr_err("rtl8192_proc_module_init() failed %d\n", ret);
|
||||
+ goto fail_proc;
|
||||
+ }
|
||||
+
|
||||
+ ret = usb_register(&rtl8192_usb_driver);
|
||||
+ if (ret) {
|
||||
+ pr_err("usb_register() failed %d\n", ret);
|
||||
+ goto fail_usb;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+fail_usb:
|
||||
+ rtl8192_proc_module_remove();
|
||||
+fail_proc:
|
||||
+ ieee80211_crypto_wep_exit();
|
||||
+fail_crypto_wep:
|
||||
+ ieee80211_crypto_ccmp_exit();
|
||||
+fail_crypto_ccmp:
|
||||
+ ieee80211_crypto_tkip_exit();
|
||||
+fail_crypto_tkip:
|
||||
+ ieee80211_crypto_deinit();
|
||||
+fail_crypto:
|
||||
+#ifdef CONFIG_IEEE80211_DEBUG
|
||||
+ ieee80211_debug_exit();
|
||||
+#endif
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,107 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Tue, 25 May 2010 04:25:57 +0100
|
||||
Subject: [PATCH] Staging: rtl8192su: Fix procfs code for interfaces not named wlan0
|
||||
|
||||
commit 41a38d9e632f7c9ec5ad8fc627567d97f4302c4a upstream.
|
||||
|
||||
The current code creates directories in procfs named after interfaces,
|
||||
but doesn't handle renaming. This can result in name collisions and
|
||||
consequent WARNINGs. It also means that the interface name cannot
|
||||
reliably be used to remove the directory - in fact the current code
|
||||
doesn't even try, and always uses "wlan0"!
|
||||
|
||||
Since the name of a proc_dir_entry is embedded in it, use that when
|
||||
removing it.
|
||||
|
||||
Add a netdev notifier to catch interface renaming, and remove and
|
||||
re-add the directory at this point.
|
||||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
drivers/staging/rtl8192su/r8192U_core.c | 35 ++++++++++++++++++++++++++++--
|
||||
1 files changed, 32 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c
|
||||
index 1b4ff90..a076f56 100644
|
||||
--- a/drivers/staging/rtl8192su/r8192U_core.c
|
||||
+++ b/drivers/staging/rtl8192su/r8192U_core.c
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/eeprom_93cx6.h>
|
||||
+#include <linux/notifier.h>
|
||||
|
||||
#undef LOOP_TEST
|
||||
#undef DUMP_RX
|
||||
@@ -161,6 +162,8 @@ MODULE_PARM_DESC(channels," Channel bitmask for specific locales. NYI");
|
||||
static int __devinit rtl8192_usb_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id);
|
||||
static void __devexit rtl8192_usb_disconnect(struct usb_interface *intf);
|
||||
+static const struct net_device_ops rtl8192_netdev_ops;
|
||||
+static struct notifier_block proc_netdev_notifier;
|
||||
|
||||
static struct usb_driver rtl8192_usb_driver = {
|
||||
.name = RTL819xU_MODULE_NAME, /* Driver name */
|
||||
@@ -992,14 +995,22 @@ static int proc_get_stats_rx(char *page, char **start,
|
||||
|
||||
int rtl8192_proc_module_init(void)
|
||||
{
|
||||
+ int ret;
|
||||
+
|
||||
RT_TRACE(COMP_INIT, "Initializing proc filesystem");
|
||||
rtl8192_proc=create_proc_entry(RTL819xU_MODULE_NAME, S_IFDIR, init_net.proc_net);
|
||||
- return rtl8192_proc ? 0 : -ENOMEM;
|
||||
+ if (!rtl8192_proc)
|
||||
+ return -ENOMEM;
|
||||
+ ret = register_netdevice_notifier(&proc_netdev_notifier);
|
||||
+ if (ret)
|
||||
+ remove_proc_entry(RTL819xU_MODULE_NAME, init_net.proc_net);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
|
||||
void rtl8192_proc_module_remove(void)
|
||||
{
|
||||
+ unregister_netdevice_notifier(&proc_netdev_notifier);
|
||||
remove_proc_entry(RTL819xU_MODULE_NAME, init_net.proc_net);
|
||||
}
|
||||
|
||||
@@ -1027,8 +1038,7 @@ void rtl8192_proc_remove_one(struct net_device *dev)
|
||||
remove_proc_entry("registers-e", priv->dir_dev);
|
||||
// remove_proc_entry("cck-registers",priv->dir_dev);
|
||||
// remove_proc_entry("ofdm-registers",priv->dir_dev);
|
||||
- //remove_proc_entry(dev->name, rtl8192_proc);
|
||||
- remove_proc_entry("wlan0", rtl8192_proc);
|
||||
+ remove_proc_entry(priv->dir_dev->name, rtl8192_proc);
|
||||
priv->dir_dev = NULL;
|
||||
}
|
||||
}
|
||||
@@ -1145,6 +1155,25 @@ void rtl8192_proc_init_one(struct net_device *dev)
|
||||
dev->name);
|
||||
}
|
||||
}
|
||||
+
|
||||
+static int proc_netdev_event(struct notifier_block *this,
|
||||
+ unsigned long event, void *ptr)
|
||||
+{
|
||||
+ struct net_device *net_dev = ptr;
|
||||
+
|
||||
+ if (net_dev->netdev_ops == &rtl8192_netdev_ops &&
|
||||
+ event == NETDEV_CHANGENAME) {
|
||||
+ rtl8192_proc_remove_one(net_dev);
|
||||
+ rtl8192_proc_init_one(net_dev);
|
||||
+ }
|
||||
+
|
||||
+ return NOTIFY_DONE;
|
||||
+}
|
||||
+
|
||||
+static struct notifier_block proc_netdev_notifier = {
|
||||
+ .notifier_call = proc_netdev_event,
|
||||
+};
|
||||
+
|
||||
/****************************************************************************
|
||||
-----------------------------MISC STUFF-------------------------
|
||||
*****************************************************************************/
|
||||
--
|
||||
1.7.1
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,93 +0,0 @@
|
|||
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
|
||||
index 227b044..ce9c6c2 100644
|
||||
--- a/arch/x86/kernel/cpu/vmware.c
|
||||
+++ b/arch/x86/kernel/cpu/vmware.c
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/module.h>
|
||||
+#include <linux/jiffies.h>
|
||||
#include <asm/div64.h>
|
||||
#include <asm/x86_init.h>
|
||||
#include <asm/hypervisor.h>
|
||||
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
|
||||
index aea1d3f..439fc1f 100644
|
||||
--- a/fs/proc/task_mmu.c
|
||||
+++ b/fs/proc/task_mmu.c
|
||||
@@ -210,6 +210,7 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
|
||||
int flags = vma->vm_flags;
|
||||
unsigned long ino = 0;
|
||||
unsigned long long pgoff = 0;
|
||||
+ unsigned long start;
|
||||
dev_t dev = 0;
|
||||
int len;
|
||||
|
||||
@@ -220,8 +221,13 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
|
||||
pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
|
||||
}
|
||||
|
||||
+ /* We don't show the stack guard page in /proc/maps */
|
||||
+ start = vma->vm_start;
|
||||
+ if (vma->vm_flags & VM_GROWSDOWN)
|
||||
+ start += PAGE_SIZE;
|
||||
+
|
||||
seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n",
|
||||
- vma->vm_start,
|
||||
+ start,
|
||||
vma->vm_end,
|
||||
flags & VM_READ ? 'r' : '-',
|
||||
flags & VM_WRITE ? 'w' : '-',
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index aaaedbd..307bf77 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -2792,24 +2792,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
spinlock_t *ptl;
|
||||
pte_t entry;
|
||||
|
||||
- if (check_stack_guard_page(vma, address) < 0) {
|
||||
- pte_unmap(page_table);
|
||||
+ pte_unmap(page_table);
|
||||
+
|
||||
+ /* Check if we need to add a guard page to the stack */
|
||||
+ if (check_stack_guard_page(vma, address) < 0)
|
||||
return VM_FAULT_SIGBUS;
|
||||
- }
|
||||
|
||||
+ /* Use the zero-page for reads */
|
||||
if (!(flags & FAULT_FLAG_WRITE)) {
|
||||
entry = pte_mkspecial(pfn_pte(my_zero_pfn(address),
|
||||
vma->vm_page_prot));
|
||||
- ptl = pte_lockptr(mm, pmd);
|
||||
- spin_lock(ptl);
|
||||
+ page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
|
||||
if (!pte_none(*page_table))
|
||||
goto unlock;
|
||||
goto setpte;
|
||||
}
|
||||
|
||||
/* Allocate our own private page. */
|
||||
- pte_unmap(page_table);
|
||||
-
|
||||
if (unlikely(anon_vma_prepare(vma)))
|
||||
goto oom;
|
||||
page = alloc_zeroed_user_highpage_movable(vma, address);
|
||||
diff --git a/mm/mlock.c b/mm/mlock.c
|
||||
index 3f82720..49e5e4c 100644
|
||||
--- a/mm/mlock.c
|
||||
+++ b/mm/mlock.c
|
||||
@@ -167,6 +167,14 @@ static long __mlock_vma_pages_range(struct vm_area_struct *vma,
|
||||
if (vma->vm_flags & VM_WRITE)
|
||||
gup_flags |= FOLL_WRITE;
|
||||
|
||||
+ /* We don't try to access the guard page of a stack vma */
|
||||
+ if (vma->vm_flags & VM_GROWSDOWN) {
|
||||
+ if (start == vma->vm_start) {
|
||||
+ start += PAGE_SIZE;
|
||||
+ nr_pages--;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
while (nr_pages > 0) {
|
||||
int i;
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,27 +0,0 @@
|
|||
From b994ef79fccdcf24182ea375e917ec124c3cfdfa Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Tue, 20 Jul 2010 00:31:24 +0100
|
||||
Subject: [PATCH 1/2] viafb: Depends on X86
|
||||
|
||||
VIA UniChrome and Chrome9 GPUs only exist as Integrated Graphics
|
||||
Processors in x86 chipsets.
|
||||
---
|
||||
drivers/video/Kconfig | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
|
||||
index 3d94a14..162a0b7 100644
|
||||
--- a/drivers/video/Kconfig
|
||||
+++ b/drivers/video/Kconfig
|
||||
@@ -1505,7 +1505,7 @@ config FB_SIS_315
|
||||
|
||||
config FB_VIA
|
||||
tristate "VIA UniChrome (Pro) and Chrome9 display support"
|
||||
- depends on FB && PCI
|
||||
+ depends on FB && PCI && X86
|
||||
select FB_CFB_FILLRECT
|
||||
select FB_CFB_COPYAREA
|
||||
select FB_CFB_IMAGEBLIT
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -4,7 +4,7 @@ index e7cbaa0..c8af869 100644
|
|||
+++ b/arch/ia64/Makefile
|
||||
@@ -30,16 +30,7 @@ cflags-y := -pipe $(EXTRA) -ffixed-r13 -mfixed-range=f12-f15,f32-f127 \
|
||||
-falign-functions=32 -frename-registers -fno-optimize-sibling-calls
|
||||
CFLAGS_KERNEL := -mconstant-gp
|
||||
KBUILD_CFLAGS_KERNEL := -mconstant-gp
|
||||
|
||||
-GAS_STATUS = $(shell $(srctree)/arch/ia64/scripts/check-gas "$(CC)" "$(OBJDUMP)")
|
||||
-KBUILD_CPPFLAGS += $(shell $(srctree)/arch/ia64/scripts/toolchain-flags "$(CC)" "$(OBJDUMP)" "$(READELF)")
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
|
||||
workaround this bug:
|
||||
|
||||
cc1: warnings being treated as errors
|
||||
arch/mips/kernel/../../../fs/binfmt_elf.c: In function ‘vma_dump_size’:
|
||||
arch/mips/kernel/../../../fs/binfmt_elf.c:1202: warning: ‘word’ may be used uninitialized in this function
|
||||
|
||||
|
||||
--- a/arch/mips/kernel/Makefile 2009-02-16 11:25:13.000000000 +0000
|
||||
+++ b/arch/mips/kernel/Makefile 2009-02-16 11:25:23.000000000 +0000
|
||||
@@ -100,6 +100,5 @@
|
||||
|
||||
obj-$(CONFIG_MIPS_CPUFREQ) += cpufreq/
|
||||
|
||||
-EXTRA_CFLAGS += -Werror
|
||||
|
||||
CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS)
|
|
@ -1,44 +0,0 @@
|
|||
commit 5c8974538afd97990d3730ef6fea731a34ef1f85
|
||||
Author: Florian Fainelli <florian@openwrt.org>
|
||||
Date: Thu Jul 29 00:13:07 2010 +0200
|
||||
|
||||
MIPS: Octeon: Workaround link failures with gcc-4.4.x 32-bits toolchains
|
||||
|
||||
When building with a gcc-4.4.x toolchain that is configured to produce
|
||||
32-bits executables by default, we will produce __lshrti3 in sched_clock()
|
||||
which is never resolved so the kernel fails to link. Unconditionally use
|
||||
the inline assembly version as suggested by David Daney, which works around
|
||||
the issue.
|
||||
|
||||
Signed-off-by: Florian Fainelli <florian@openwrt.org>
|
||||
To: linux-mips@linux-mips.org
|
||||
Patchwork: https://patchwork.linux-mips.org/patch/1514/
|
||||
Acked-by: David Daney <ddaney@caviumnetworks.com>
|
||||
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
|
||||
|
||||
diff --git a/arch/mips/cavium-octeon/csrc-octeon.c b/arch/mips/cavium-octeon/csrc-octeon.c
|
||||
index 0bf4bbe..36400d2 100644
|
||||
--- a/arch/mips/cavium-octeon/csrc-octeon.c
|
||||
+++ b/arch/mips/cavium-octeon/csrc-octeon.c
|
||||
@@ -53,7 +53,6 @@ static struct clocksource clocksource_mips = {
|
||||
unsigned long long notrace sched_clock(void)
|
||||
{
|
||||
/* 64-bit arithmatic can overflow, so use 128-bit. */
|
||||
-#if (__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ <= 3))
|
||||
u64 t1, t2, t3;
|
||||
unsigned long long rv;
|
||||
u64 mult = clocksource_mips.mult;
|
||||
@@ -73,13 +72,6 @@ unsigned long long notrace sched_clock(void)
|
||||
: [cnt] "r" (cnt), [mult] "r" (mult), [shift] "r" (shift)
|
||||
: "hi", "lo");
|
||||
return rv;
|
||||
-#else
|
||||
- /* GCC > 4.3 do it the easy way. */
|
||||
- unsigned int __attribute__((mode(TI))) t;
|
||||
- t = read_c0_cvmcount();
|
||||
- t = t * clocksource_mips.mult;
|
||||
- return (unsigned long long)(t >> clocksource_mips.shift);
|
||||
-#endif
|
||||
}
|
||||
|
||||
void __init plat_time_init(void)
|
|
@ -37,8 +37,6 @@ rm arch/powerpc/sysdev/micropatch.c
|
|||
|
||||
rm drivers/media/dvb/dvb-usb/af9005-script.h
|
||||
|
||||
unifdef drivers/media/dvb/frontends/lgs8gxx.c -UREMOVE_DFSG
|
||||
|
||||
rm drivers/net/appletalk/cops.c
|
||||
rm drivers/net/appletalk/cops.h
|
||||
rm drivers/net/appletalk/cops_ffdrv.h
|
||||
|
|
|
@ -28,7 +28,7 @@ index 1c00d05..3bf888d 100644
|
|||
-fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin
|
||||
-fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
|
||||
- cxgb3/t3c_psram-1.1.0.bin \
|
||||
- cxgb3/t3fw-7.4.0.bin \
|
||||
- cxgb3/t3fw-7.10.0.bin \
|
||||
- cxgb3/ael2005_opt_edc.bin \
|
||||
- cxgb3/ael2005_twx_edc.bin \
|
||||
- cxgb3/ael2020_twx_edc.bin
|
||||
|
|
|
@ -1,63 +0,0 @@
|
|||
From 15e2cca5411a60ec9d936b36be1bac937f1bfeaa Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Tue, 3 Nov 2009 23:50:20 +0000
|
||||
Subject: [PATCH 18/24] lgs8gxx: mark lgs8g75 as broken and mark firmware for removal
|
||||
|
||||
---
|
||||
drivers/media/dvb/frontends/lgs8gxx.c | 11 +++++++++++
|
||||
1 files changed, 11 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/dvb/frontends/lgs8gxx.c b/drivers/media/dvb/frontends/lgs8gxx.c
|
||||
index eabcadc..a7446fd 100644
|
||||
--- a/drivers/media/dvb/frontends/lgs8gxx.c
|
||||
+++ b/drivers/media/dvb/frontends/lgs8gxx.c
|
||||
@@ -46,6 +46,7 @@ module_param(fake_signal_str, int, 0644);
|
||||
MODULE_PARM_DESC(fake_signal_str, "fake signal strength for LGS8913."
|
||||
"Signal strength calculation is slow.(default:on).");
|
||||
|
||||
+#ifdef REMOVE_DFSG
|
||||
static const u8 lgs8g75_initdat[] = {
|
||||
0x01, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
@@ -81,6 +82,7 @@ static const u8 lgs8g75_initdat[] = {
|
||||
0x65, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x80,
|
||||
0x65, 0xE0, 0x44, 0xC2, 0xF0, 0x22
|
||||
};
|
||||
+#endif
|
||||
|
||||
/* LGS8GXX internal helper functions */
|
||||
|
||||
@@ -625,6 +627,7 @@ static int lgs8913_init(struct lgs8gxx_state *priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_BROKEN
|
||||
static int lgs8g75_init_data(struct lgs8gxx_state *priv)
|
||||
{
|
||||
const u8 *p = lgs8g75_initdat;
|
||||
@@ -652,6 +655,7 @@ static int lgs8g75_init_data(struct lgs8gxx_state *priv)
|
||||
|
||||
return 0;
|
||||
}
|
||||
+#endif
|
||||
|
||||
static int lgs8gxx_init(struct dvb_frontend *fe)
|
||||
{
|
||||
@@ -1089,7 +1093,14 @@ struct dvb_frontend *lgs8gxx_attach(const struct lgs8gxx_config *config,
|
||||
priv->frontend.demodulator_priv = priv;
|
||||
|
||||
if (config->prod == LGS8GXX_PROD_LGS8G75)
|
||||
+#ifdef CONFIG_BROKEN
|
||||
lgs8g75_init_data(priv);
|
||||
+#else
|
||||
+ {
|
||||
+ dprintk("lgs8g75 firmware not available\n");
|
||||
+ goto error_out;
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
return &priv->frontend;
|
||||
|
||||
--
|
||||
1.6.5.2
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
From 210ea66fdb876415c09d20497beed650ac65e9d2 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Mon, 13 Sep 2010 02:16:18 +0100
|
||||
Subject: [PATCH] Partially revert "MIPS: Add -Werror to arch/mips/Kbuild"
|
||||
|
||||
This reverts commit 66f9ba101f54bda63ab1db97f9e9e94763d0651b.
|
||||
|
||||
We really don't want to add -Werror anywhere.
|
||||
---
|
||||
arch/mips/Kbuild | 5 -----
|
||||
1 files changed, 0 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/arch/mips/Kbuild b/arch/mips/Kbuild
|
||||
index e322d65..2e6b28f 100644
|
||||
--- a/arch/mips/Kbuild
|
||||
+++ b/arch/mips/Kbuild
|
||||
@@ -1,8 +1,3 @@
|
||||
-# Fail on warnings - also for files referenced in subdirs
|
||||
-# -Werror can be disabled for specific files using:
|
||||
-# CFLAGS_<file.o> := -Wno-error
|
||||
-subdir-ccflags-y := -Werror
|
||||
-
|
||||
# platform specific definitions
|
||||
include arch/mips/Kbuild.platforms
|
||||
obj-y := $(platform-y)
|
||||
--
|
||||
1.7.1
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
|
||||
index 999e8a7..3b5d4ba 100644
|
||||
index de934de..57e96aa 100644
|
||||
--- a/scripts/kconfig/Makefile
|
||||
+++ b/scripts/kconfig/Makefile
|
||||
@@ -3,7 +3,7 @@
|
||||
|
@ -11,105 +11,78 @@ index 999e8a7..3b5d4ba 100644
|
|||
|
||||
ifdef KBUILD_KCONFIG
|
||||
Kconfig := $(KBUILD_KCONFIG)
|
||||
@@ -26,10 +26,16 @@ config: $(obj)/conf
|
||||
@@ -29,10 +29,16 @@ nconfig: $(obj)/nconf
|
||||
oldconfig: $(obj)/conf
|
||||
$< -o $(Kconfig)
|
||||
$< --$@ $(Kconfig)
|
||||
|
||||
+reportoldconfig: $(obj)/conf
|
||||
+ $< -R $(Kconfig)
|
||||
+ $< --$@ $(Kconfig)
|
||||
+
|
||||
silentoldconfig: $(obj)/conf
|
||||
$(Q)mkdir -p include/generated
|
||||
$< -s $(Kconfig)
|
||||
$< --$@ $(Kconfig)
|
||||
|
||||
+updateoldconfig: $(obj)/conf
|
||||
+ $< -U $(Kconfig)
|
||||
+ $< --$@ $(Kconfig)
|
||||
+
|
||||
# if no path is given, then use src directory to find file
|
||||
ifdef LSMOD
|
||||
LSMOD_F := $(LSMOD)
|
||||
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
|
||||
index 3e1057f..e526d00 100644
|
||||
index 5b7c86e..9c2171c 100644
|
||||
--- a/scripts/kconfig/conf.c
|
||||
+++ b/scripts/kconfig/conf.c
|
||||
@@ -5,6 +5,7 @@
|
||||
@@ -33,6 +33,8 @@ enum input_mode {
|
||||
savedefconfig,
|
||||
listnewconfig,
|
||||
oldnoconfig,
|
||||
+ reportoldconfig,
|
||||
+ updateoldconfig,
|
||||
} input_mode = oldaskconfig;
|
||||
|
||||
#include <locale.h>
|
||||
#include <ctype.h>
|
||||
+#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -434,12 +435,13 @@ int main(int ac, char **av)
|
||||
int opt;
|
||||
const char *name;
|
||||
struct stat tmpstat;
|
||||
+ bool report = false, update = false;
|
||||
char *defconfig_file;
|
||||
@@ -453,6 +455,8 @@ static struct option long_opts[] = {
|
||||
{"randconfig", no_argument, NULL, randconfig},
|
||||
{"listnewconfig", no_argument, NULL, listnewconfig},
|
||||
{"oldnoconfig", no_argument, NULL, oldnoconfig},
|
||||
+ {"reportoldconfig", no_argument, NULL, reportoldconfig},
|
||||
+ {"updateoldconfig", no_argument, NULL, updateoldconfig},
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||
textdomain(PACKAGE);
|
||||
|
||||
- while ((opt = getopt(ac, av, "osdD:nmyrh")) != -1) {
|
||||
+ while ((opt = getopt(ac, av, "osdD:nmyrRUh")) != -1) {
|
||||
switch (opt) {
|
||||
case 'o':
|
||||
input_mode = ask_silent;
|
||||
@@ -481,6 +482,14 @@ int main(int ac, char **av)
|
||||
input_mode = set_random;
|
||||
break;
|
||||
}
|
||||
+ case 'R':
|
||||
+ input_mode = set_default;
|
||||
+ report = update = true;
|
||||
+ break;
|
||||
+ case 'U':
|
||||
+ input_mode = set_default;
|
||||
+ update = true;
|
||||
+ break;
|
||||
case 'h':
|
||||
printf(_("See README for usage info\n"));
|
||||
exit(0);
|
||||
@@ -512,13 +522,17 @@ int main(int ac, char **av)
|
||||
|
||||
switch (input_mode) {
|
||||
case set_default:
|
||||
- if (!defconfig_file)
|
||||
- defconfig_file = conf_get_default_confname();
|
||||
- if (conf_read(defconfig_file)) {
|
||||
- printf(_("***\n"
|
||||
- "*** Can't find default configuration \"%s\"!\n"
|
||||
- "***\n"), defconfig_file);
|
||||
- exit(1);
|
||||
+ if (update)
|
||||
+ conf_read(NULL);
|
||||
+ else {
|
||||
+ if (!defconfig_file)
|
||||
+ defconfig_file = conf_get_default_confname();
|
||||
+ if (conf_read(defconfig_file)) {
|
||||
+ printf("***\n"
|
||||
+ "*** Can't find default configuration \"%s\"!\n"
|
||||
+ "***\n", defconfig_file);
|
||||
+ exit(1);
|
||||
+ }
|
||||
@@ -530,6 +534,8 @@ int main(int ac, char **av)
|
||||
}
|
||||
break;
|
||||
case ask_silent:
|
||||
@@ -594,6 +608,9 @@ int main(int ac, char **av)
|
||||
case savedefconfig:
|
||||
+ case reportoldconfig:
|
||||
+ case updateoldconfig:
|
||||
conf_read(NULL);
|
||||
break;
|
||||
case silentoldconfig:
|
||||
@@ -595,6 +601,8 @@ int main(int ac, char **av)
|
||||
conf_set_all_new_symbols(def_random);
|
||||
break;
|
||||
case defconfig:
|
||||
+ case reportoldconfig:
|
||||
+ case updateoldconfig:
|
||||
conf_set_all_new_symbols(def_default);
|
||||
break;
|
||||
case savedefconfig:
|
||||
@@ -618,6 +626,9 @@ int main(int ac, char **av)
|
||||
break;
|
||||
}
|
||||
|
||||
+ if (report)
|
||||
+ if (input_mode == reportoldconfig)
|
||||
+ conf_write_changes();
|
||||
+
|
||||
if (sync_kconfig) {
|
||||
/* silentoldconfig is used during the build so we shall update autoconf.
|
||||
* All other commands are only used to generate a config.
|
||||
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
|
||||
index 830d9ea..faf0b50 100644
|
||||
index 515253f..ee81b42 100644
|
||||
--- a/scripts/kconfig/confdata.c
|
||||
+++ b/scripts/kconfig/confdata.c
|
||||
@@ -786,6 +786,85 @@ int conf_write_autoconf(void)
|
||||
@@ -893,6 +893,85 @@ int conf_write_autoconf(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -195,7 +168,7 @@ index 830d9ea..faf0b50 100644
|
|||
static int sym_change_count;
|
||||
static void (*conf_changed_callback)(void);
|
||||
|
||||
@@ -824,6 +903,7 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
|
||||
@@ -991,6 +1070,7 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
|
||||
for_all_symbols(i, sym) {
|
||||
if (sym_has_value(sym))
|
||||
continue;
|
||||
|
@ -204,23 +177,23 @@ index 830d9ea..faf0b50 100644
|
|||
case S_BOOLEAN:
|
||||
case S_TRISTATE:
|
||||
diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h
|
||||
index 6408fef..fd025e1 100644
|
||||
index 6ee2e4f..09a6a7c 100644
|
||||
--- a/scripts/kconfig/expr.h
|
||||
+++ b/scripts/kconfig/expr.h
|
||||
@@ -106,6 +106,7 @@ struct symbol {
|
||||
@@ -107,6 +107,7 @@ struct symbol {
|
||||
#define SYMBOL_DEF_AUTO 0x20000 /* symbol.def[S_DEF_AUTO] is valid */
|
||||
#define SYMBOL_DEF3 0x40000 /* symbol.def[S_DEF_3] is valid */
|
||||
#define SYMBOL_DEF4 0x80000 /* symbol.def[S_DEF_4] is valid */
|
||||
+#define SYMBOL_NEW 0x100000
|
||||
|
||||
#define SYMBOL_MAXLENGTH 256
|
||||
#define SYMBOL_HASHSIZE 257
|
||||
#define SYMBOL_HASHSIZE 9973
|
||||
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
|
||||
index 8e69461..974acf0 100644
|
||||
index 9a948c9..d5aeb72 100644
|
||||
--- a/scripts/kconfig/lkc_proto.h
|
||||
+++ b/scripts/kconfig/lkc_proto.h
|
||||
@@ -5,6 +5,7 @@ P(conf_read,int,(const char *name));
|
||||
P(conf_read_simple,int,(const char *name, int));
|
||||
@@ -6,6 +6,7 @@ P(conf_read_simple,int,(const char *name, int));
|
||||
P(conf_write_defconfig,int,(const char *name));
|
||||
P(conf_write,int,(const char *name));
|
||||
P(conf_write_autoconf,int,(void));
|
||||
+P(conf_write_changes,void,(void));
|
||||
|
|
|
@ -1,99 +0,0 @@
|
|||
From 04a2710a7de7f20ceec7f30c9e56d01d20284b15 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Sun, 1 Nov 2009 02:12:10 +0000
|
||||
Subject: [PATCH 20/24] V4L/DVB: lgs8gxx: remove firmware for lgs8g75
|
||||
|
||||
The recently added support for lgs8g75 included some 8051 machine code
|
||||
without accompanying source code. Replace this with use of the
|
||||
firmware loader.
|
||||
|
||||
Compile-tested only.
|
||||
---
|
||||
drivers/media/dvb/frontends/Kconfig | 1 +
|
||||
drivers/media/dvb/frontends/lgs8gxx.c | 23 ++++++++++-------------
|
||||
2 files changed, 11 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/dvb/frontends/Kconfig b/drivers/media/dvb/frontends/Kconfig
|
||||
index d7c4837..26b00ab 100644
|
||||
--- a/drivers/media/dvb/frontends/Kconfig
|
||||
+++ b/drivers/media/dvb/frontends/Kconfig
|
||||
@@ -553,6 +553,7 @@ config DVB_LGS8GL5
|
||||
config DVB_LGS8GXX
|
||||
tristate "Legend Silicon LGS8913/LGS8GL5/LGS8GXX DMB-TH demodulator"
|
||||
depends on DVB_CORE && I2C
|
||||
+ select FW_LOADER
|
||||
default m if DVB_FE_CUSTOMISE
|
||||
help
|
||||
A DMB-TH tuner module. Say Y when you want to support this frontend.
|
||||
diff --git a/drivers/media/dvb/frontends/lgs8gxx.c b/drivers/media/dvb/frontends/lgs8gxx.c
|
||||
index ba74df0..1bfcf85 100644
|
||||
--- a/drivers/media/dvb/frontends/lgs8gxx.c
|
||||
+++ b/drivers/media/dvb/frontends/lgs8gxx.c
|
||||
@@ -24,6 +24,7 @@
|
||||
*/
|
||||
|
||||
#include <asm/div64.h>
|
||||
+#include <linux/firmware.h>
|
||||
|
||||
#include "dvb_frontend.h"
|
||||
|
||||
@@ -589,12 +590,16 @@ static int lgs8913_init(struct lgs8gxx_state *priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-#ifdef CONFIG_BROKEN
|
||||
static int lgs8g75_init_data(struct lgs8gxx_state *priv)
|
||||
{
|
||||
- const u8 *p = lgs8g75_initdat;
|
||||
+ const struct firmware *fw;
|
||||
+ int rc;
|
||||
int i;
|
||||
|
||||
+ rc = request_firmware(&fw, "lgs8g75.fw", &priv->i2c->dev);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+
|
||||
lgs8gxx_write_reg(priv, 0xC6, 0x40);
|
||||
|
||||
lgs8gxx_write_reg(priv, 0x3D, 0x04);
|
||||
@@ -605,19 +610,18 @@ static int lgs8g75_init_data(struct lgs8gxx_state *priv)
|
||||
lgs8gxx_write_reg(priv, 0x3B, 0x00);
|
||||
lgs8gxx_write_reg(priv, 0x38, 0x00);
|
||||
|
||||
- for (i = 0; i < sizeof(lgs8g75_initdat); i++) {
|
||||
+ for (i = 0; i < fw->size; i++) {
|
||||
lgs8gxx_write_reg(priv, 0x38, 0x00);
|
||||
lgs8gxx_write_reg(priv, 0x3A, (u8)(i&0xff));
|
||||
lgs8gxx_write_reg(priv, 0x3B, (u8)(i>>8));
|
||||
- lgs8gxx_write_reg(priv, 0x3C, *p);
|
||||
- p++;
|
||||
+ lgs8gxx_write_reg(priv, 0x3C, fw->data[i]);
|
||||
}
|
||||
|
||||
lgs8gxx_write_reg(priv, 0x38, 0x00);
|
||||
|
||||
+ release_firmware(fw);
|
||||
return 0;
|
||||
}
|
||||
-#endif
|
||||
|
||||
static int lgs8gxx_init(struct dvb_frontend *fe)
|
||||
{
|
||||
@@ -1055,14 +1059,7 @@ struct dvb_frontend *lgs8gxx_attach(const struct lgs8gxx_config *config,
|
||||
priv->frontend.demodulator_priv = priv;
|
||||
|
||||
if (config->prod == LGS8GXX_PROD_LGS8G75)
|
||||
-#ifdef CONFIG_BROKEN
|
||||
lgs8g75_init_data(priv);
|
||||
-#else
|
||||
- {
|
||||
- dprintk("lgs8g75 firmware not available\n");
|
||||
- goto error_out;
|
||||
- }
|
||||
-#endif
|
||||
|
||||
return &priv->frontend;
|
||||
|
||||
--
|
||||
1.6.5.2
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
mtd: m25p80: Add support for Macronix 25L8005
|
||||
|
||||
Add support for Macronix 25L8005. Tested on a HP t5325 Thin Client.
|
||||
|
||||
Signed-off-by: Martin Michlmayr <tbm@cyrius.com>
|
||||
[bwh: Adjust for 2.6.35]
|
||||
|
||||
--- a/drivers/mtd/devices/m25p80.c 2010-06-19 10:37:08.000000000 +0000
|
||||
+++ b/drivers/mtd/devices/m25p80.c 2010-06-19 10:37:54.000000000 +0000
|
||||
@@ -621,6 +621,7 @@
|
||||
|
||||
/* Macronix */
|
||||
{ "mx25l4005a", INFO(0xc22013, 0, 64 * 1024, 8, SECT_4K) },
|
||||
+ { "mx25l8005", INFO(0xc22014, 0, 64 * 1024, 16, SECT_4K) },
|
||||
{ "mx25l3205d", INFO(0xc22016, 0, 64 * 1024, 64, 0) },
|
||||
{ "mx25l6405d", INFO(0xc22017, 0, 64 * 1024, 128, 0) },
|
||||
{ "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
|
|
@ -3,10 +3,10 @@ Subject: [PATCH] speakup: integrate into kbuild
|
|||
|
||||
--- a/drivers/staging/Kconfig
|
||||
+++ b/drivers/staging/Kconfig
|
||||
@@ -146,6 +146,8 @@
|
||||
source "drivers/staging/mrst-touchscreen/Kconfig"
|
||||
@@ -152,6 +152,8 @@
|
||||
source "drivers/staging/tidspbridge/Kconfig"
|
||||
|
||||
source "drivers/staging/msm/Kconfig"
|
||||
source "drivers/staging/quickstart/Kconfig"
|
||||
+
|
||||
+source "drivers/staging/speakup/Kconfig"
|
||||
|
||||
|
@ -14,10 +14,10 @@ Subject: [PATCH] speakup: integrate into kbuild
|
|||
endif # STAGING
|
||||
--- a/drivers/staging/Makefile
|
||||
+++ b/drivers/staging/Makefile
|
||||
@@ -53,3 +53,4 @@
|
||||
obj-$(CONFIG_FB_XGI) += xgifb/
|
||||
obj-$(CONFIG_TOUCHSCREEN_MRSTOUCH) += mrst-touchscreen/
|
||||
obj-$(CONFIG_MSM_STAGING) += msm/
|
||||
@@ -57,3 +57,4 @@
|
||||
obj-$(CONFIG_SOLO6X10) += solo6x10/
|
||||
obj-$(CONFIG_TIDSPBRIDGE) += tidspbridge/
|
||||
obj-$(CONFIG_ACPI_QUICKSTART) += quickstart/
|
||||
+obj-$(CONFIG_SPEAKUP) += speakup/
|
||||
--- a/drivers/staging/speakup/Kbuild
|
||||
+++ b/drivers/staging/speakup/Kbuild
|
||||
|
|
|
@ -1,235 +0,0 @@
|
|||
Subject: [PATCH] Kirkwood: Add support for HP t5325 Thin Client
|
||||
|
||||
Add support for the HP t5325 Thin Client. This thin client is based
|
||||
on a Marvell Kirkwood chip at 1.2 GHz and features 512 MB RAM, 512 MB
|
||||
SATA-attached flash and an XGI Volari Z11 GPU.
|
||||
|
||||
Signed-off-by: Martin Michlmayr <tbm@cyrius.com>
|
||||
[bwh: Adjust context for 2.6.35]
|
||||
|
||||
diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig
|
||||
index 29b2163..4278271 100644
|
||||
--- a/arch/arm/mach-kirkwood/Kconfig
|
||||
+++ b/arch/arm/mach-kirkwood/Kconfig
|
||||
@@ -81,6 +81,12 @@
|
||||
Say 'Y' here if you want your kernel to support the
|
||||
Marvell OpenRD Ultimate Board.
|
||||
|
||||
+config MACH_T5325
|
||||
+ bool "HP t5325 Thin Client"
|
||||
+ help
|
||||
+ Say 'Y' here if you want your kernel to support the
|
||||
+ HP t5325 Thin Client.
|
||||
+
|
||||
config MACH_NETSPACE_V2
|
||||
bool "LaCie Network Space v2 NAS Board"
|
||||
help
|
||||
diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile
|
||||
index c0cd5d3..b7c5d5e 100644
|
||||
--- a/arch/arm/mach-kirkwood/Makefile
|
||||
+++ b/arch/arm/mach-kirkwood/Makefile
|
||||
@@ -10,6 +10,7 @@
|
||||
obj-$(CONFIG_MACH_TS219) += ts219-setup.o tsx1x-common.o
|
||||
obj-$(CONFIG_MACH_TS41X) += ts41x-setup.o tsx1x-common.o
|
||||
obj-$(CONFIG_MACH_OPENRD) += openrd-setup.o
|
||||
+obj-$(CONFIG_MACH_T5325) += t5325-setup.o
|
||||
obj-$(CONFIG_MACH_NETSPACE_V2) += netspace_v2-setup.o
|
||||
obj-$(CONFIG_MACH_INETSPACE_V2) += netspace_v2-setup.o
|
||||
obj-$(CONFIG_MACH_NET2BIG_V2) += netxbig_v2-setup.o
|
||||
--- /dev/null 2010-05-25 13:42:08.579681378 +0000
|
||||
+++ b/arch/arm/mach-kirkwood/t5325-setup.c 2010-05-24 14:48:44.000000000 +0000
|
||||
@@ -0,0 +1,194 @@
|
||||
+/*
|
||||
+ *
|
||||
+ * HP t5325 Thin Client setup
|
||||
+ *
|
||||
+ * Copyright (C) 2010 Martin Michlmayr <tbm@cyrius.com>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License
|
||||
+ * as published by the Free Software Foundation; either version
|
||||
+ * 2 of the License, or (at your option) any later version.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/mtd/physmap.h>
|
||||
+#include <linux/spi/flash.h>
|
||||
+#include <linux/spi/spi.h>
|
||||
+#include <linux/spi/orion_spi.h>
|
||||
+#include <linux/i2c.h>
|
||||
+#include <linux/mv643xx_eth.h>
|
||||
+#include <linux/ata_platform.h>
|
||||
+#include <linux/gpio.h>
|
||||
+#include <linux/gpio_keys.h>
|
||||
+#include <linux/input.h>
|
||||
+#include <asm/mach-types.h>
|
||||
+#include <asm/mach/arch.h>
|
||||
+#include <mach/kirkwood.h>
|
||||
+#include "common.h"
|
||||
+#include "mpp.h"
|
||||
+
|
||||
+struct mtd_partition hp_t5325_partitions[] = {
|
||||
+ {
|
||||
+ .name = "u-boot env",
|
||||
+ .size = SZ_64K,
|
||||
+ .offset = SZ_512K + SZ_256K,
|
||||
+ },
|
||||
+ {
|
||||
+ .name = "permanent u-boot env",
|
||||
+ .size = SZ_64K,
|
||||
+ .offset = MTDPART_OFS_APPEND,
|
||||
+ .mask_flags = MTD_WRITEABLE,
|
||||
+ },
|
||||
+ {
|
||||
+ .name = "HP env",
|
||||
+ .size = SZ_64K,
|
||||
+ .offset = MTDPART_OFS_APPEND,
|
||||
+ },
|
||||
+ {
|
||||
+ .name = "u-boot",
|
||||
+ .size = SZ_512K,
|
||||
+ .offset = 0,
|
||||
+ .mask_flags = MTD_WRITEABLE,
|
||||
+ },
|
||||
+ {
|
||||
+ .name = "SSD firmware",
|
||||
+ .size = SZ_256K,
|
||||
+ .offset = SZ_512K,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+const struct flash_platform_data hp_t5325_flash = {
|
||||
+ .type = "mx25l8005",
|
||||
+ .name = "spi_flash",
|
||||
+ .parts = hp_t5325_partitions,
|
||||
+ .nr_parts = ARRAY_SIZE(hp_t5325_partitions),
|
||||
+};
|
||||
+
|
||||
+struct spi_board_info __initdata hp_t5325_spi_slave_info[] = {
|
||||
+ {
|
||||
+ .modalias = "m25p80",
|
||||
+ .platform_data = &hp_t5325_flash,
|
||||
+ .irq = -1,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static struct mv643xx_eth_platform_data hp_t5325_ge00_data = {
|
||||
+ .phy_addr = MV643XX_ETH_PHY_ADDR(8),
|
||||
+};
|
||||
+
|
||||
+static struct mv_sata_platform_data hp_t5325_sata_data = {
|
||||
+ .n_ports = 2,
|
||||
+};
|
||||
+
|
||||
+static struct gpio_keys_button hp_t5325_buttons[] = {
|
||||
+ {
|
||||
+ .code = KEY_POWER,
|
||||
+ .gpio = 45,
|
||||
+ .desc = "Power",
|
||||
+ .active_low = 1,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static struct gpio_keys_platform_data hp_t5325_button_data = {
|
||||
+ .buttons = hp_t5325_buttons,
|
||||
+ .nbuttons = ARRAY_SIZE(hp_t5325_buttons),
|
||||
+};
|
||||
+
|
||||
+static struct platform_device hp_t5325_button_device = {
|
||||
+ .name = "gpio-keys",
|
||||
+ .id = -1,
|
||||
+ .num_resources = 0,
|
||||
+ .dev = {
|
||||
+ .platform_data = &hp_t5325_button_data,
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+static unsigned int hp_t5325_mpp_config[] __initdata = {
|
||||
+ MPP0_NF_IO2,
|
||||
+ MPP1_SPI_MOSI,
|
||||
+ MPP2_SPI_SCK,
|
||||
+ MPP3_SPI_MISO,
|
||||
+ MPP4_NF_IO6,
|
||||
+ MPP5_NF_IO7,
|
||||
+ MPP6_SYSRST_OUTn,
|
||||
+ MPP7_SPI_SCn,
|
||||
+ MPP8_TW_SDA,
|
||||
+ MPP9_TW_SCK,
|
||||
+ MPP10_UART0_TXD,
|
||||
+ MPP11_UART0_RXD,
|
||||
+ MPP12_SD_CLK,
|
||||
+ MPP13_GPIO,
|
||||
+ MPP14_GPIO,
|
||||
+ MPP15_GPIO,
|
||||
+ MPP16_GPIO,
|
||||
+ MPP17_GPIO,
|
||||
+ MPP18_NF_IO0,
|
||||
+ MPP19_NF_IO1,
|
||||
+ MPP20_GPIO,
|
||||
+ MPP21_GPIO,
|
||||
+ MPP22_GPIO,
|
||||
+ MPP23_GPIO,
|
||||
+ MPP32_GPIO,
|
||||
+ MPP33_GE1_13,
|
||||
+ MPP39_AUDIO_I2SBCLK,
|
||||
+ MPP40_AUDIO_I2SDO,
|
||||
+ MPP41_AUDIO_I2SLRC,
|
||||
+ MPP42_AUDIO_I2SMCLK,
|
||||
+ MPP45_GPIO, /* Power button */
|
||||
+ MPP48_GPIO, /* Board power off */
|
||||
+ 0
|
||||
+};
|
||||
+
|
||||
+#define HP_T5325_GPIO_POWER_OFF 48
|
||||
+
|
||||
+static void hp_t5325_power_off(void)
|
||||
+{
|
||||
+ gpio_set_value(HP_T5325_GPIO_POWER_OFF, 1);
|
||||
+}
|
||||
+
|
||||
+static void __init hp_t5325_init(void)
|
||||
+{
|
||||
+ /*
|
||||
+ * Basic setup. Needs to be called early.
|
||||
+ */
|
||||
+ kirkwood_init();
|
||||
+ kirkwood_mpp_conf(hp_t5325_mpp_config);
|
||||
+
|
||||
+ kirkwood_uart0_init();
|
||||
+ spi_register_board_info(hp_t5325_spi_slave_info,
|
||||
+ ARRAY_SIZE(hp_t5325_spi_slave_info));
|
||||
+ kirkwood_spi_init();
|
||||
+ kirkwood_i2c_init();
|
||||
+ kirkwood_ge00_init(&hp_t5325_ge00_data);
|
||||
+ kirkwood_sata_init(&hp_t5325_sata_data);
|
||||
+ kirkwood_ehci_init();
|
||||
+ platform_device_register(&hp_t5325_button_device);
|
||||
+
|
||||
+ if (gpio_request(HP_T5325_GPIO_POWER_OFF, "power-off") == 0 &&
|
||||
+ gpio_direction_output(HP_T5325_GPIO_POWER_OFF, 0) == 0)
|
||||
+ pm_power_off = hp_t5325_power_off;
|
||||
+ else
|
||||
+ pr_err("t5325: failed to configure power-off GPIO\n");
|
||||
+}
|
||||
+
|
||||
+static int __init hp_t5325_pci_init(void)
|
||||
+{
|
||||
+ if (machine_is_t5325())
|
||||
+ kirkwood_pcie_init();
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+subsys_initcall(hp_t5325_pci_init);
|
||||
+
|
||||
+MACHINE_START(T5325, "HP t5325 Thin Client")
|
||||
+ /* Maintainer: Martin Michlmayr <tbm@cyrius.com> */
|
||||
+ .phys_io = KIRKWOOD_REGS_PHYS_BASE,
|
||||
+ .io_pg_offst = ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc,
|
||||
+ .boot_params = 0x00000100,
|
||||
+ .init_machine = hp_t5325_init,
|
||||
+ .map_io = kirkwood_map_io,
|
||||
+ .init_irq = kirkwood_init_irq,
|
||||
+ .timer = &kirkwood_timer,
|
||||
+MACHINE_END
|
|
@ -1,102 +0,0 @@
|
|||
Hi!
|
||||
This patch adds support for the OpenRD Ultimate machine(could be found at http://www.arm.linux.org.uk/developer/machines/list.php?id=2884)
|
||||
|
||||
Besides adding machine description this patch adds correction for PHY address for Ultimate version.
|
||||
|
||||
Differences from the previous attempt:
|
||||
- Correctly filled instances of mv643xx_eth_platform_data in case of ultimate version.
|
||||
- Do PCIE initialization for Ultimate version along with Base and Client
|
||||
- Init ge01 if (!openrd-base) to make the code cleaner
|
||||
|
||||
Regards,
|
||||
|
||||
-- Dmytro Milinevskyy
|
||||
|
||||
Signed-off-by: Dmytro Milinevskyy <milinevskyy@gmail.com>
|
||||
|
||||
[bwh: adapted Kconfig]
|
||||
|
||||
---
|
||||
|
||||
arch/arm/mach-kirkwood/Kconfig | 7 +++++++
|
||||
arch/arm/mach-kirkwood/openrd-setup.c | 27 ++++++++++++++++++++++++---
|
||||
2 files changed, 31 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig
|
||||
index 29b2163..110a3b8 100644
|
||||
--- a/arch/arm/mach-kirkwood/Kconfig
|
||||
+++ b/arch/arm/mach-kirkwood/Kconfig
|
||||
@@ -74,6 +74,13 @@
|
||||
Say 'Y' here if you want your kernel to support the
|
||||
Marvell OpenRD Client Board.
|
||||
|
||||
+config MACH_OPENRD_ULTIMATE
|
||||
+ bool "Marvell OpenRD Ultimate Board"
|
||||
+ select MACH_OPENRD
|
||||
+ help
|
||||
+ Say 'Y' here if you want your kernel to support the
|
||||
+ Marvell OpenRD Ultimate Board.
|
||||
+
|
||||
config MACH_NETSPACE_V2
|
||||
bool "LaCie Network Space v2 NAS Board"
|
||||
help
|
||||
diff --git a/arch/arm/mach-kirkwood/openrd-setup.c b/arch/arm/mach-kirkwood/openrd-setup.c
|
||||
index ad3f1ec..284b00f 100644
|
||||
--- a/arch/arm/mach-kirkwood/openrd-setup.c
|
||||
+++ b/arch/arm/mach-kirkwood/openrd-setup.c
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* arch/arm/mach-kirkwood/openrd-setup.c
|
||||
*
|
||||
- * Marvell OpenRD (Base|Client) Board Setup
|
||||
+ * Marvell OpenRD (Base|Client|Ultimate) Board Setup
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
@@ -73,9 +73,15 @@ static void __init openrd_init(void)
|
||||
|
||||
kirkwood_ehci_init();
|
||||
|
||||
+ if (machine_is_openrd_ultimate()) {
|
||||
+ openrd_ge00_data.phy_addr = MV643XX_ETH_PHY_ADDR(0);
|
||||
+ openrd_ge01_data.phy_addr = MV643XX_ETH_PHY_ADDR(1);
|
||||
+ }
|
||||
+
|
||||
kirkwood_ge00_init(&openrd_ge00_data);
|
||||
- if (machine_is_openrd_client())
|
||||
+ if (!machine_is_openrd_base())
|
||||
kirkwood_ge01_init(&openrd_ge01_data);
|
||||
+
|
||||
kirkwood_sata_init(&openrd_sata_data);
|
||||
kirkwood_sdio_init(&openrd_mvsdio_data);
|
||||
|
||||
@@ -84,7 +90,9 @@ static void __init openrd_init(void)
|
||||
|
||||
static int __init openrd_pci_init(void)
|
||||
{
|
||||
- if (machine_is_openrd_base() || machine_is_openrd_client())
|
||||
+ if (machine_is_openrd_base() ||
|
||||
+ machine_is_openrd_client() ||
|
||||
+ machine_is_openrd_ultimate())
|
||||
kirkwood_pcie_init();
|
||||
|
||||
return 0;
|
||||
@@ -116,3 +124,16 @@ MACHINE_START(OPENRD_CLIENT, "Marvell OpenRD Client Board")
|
||||
.timer = &kirkwood_timer,
|
||||
MACHINE_END
|
||||
#endif
|
||||
+
|
||||
+#ifdef CONFIG_MACH_OPENRD_ULTIMATE
|
||||
+MACHINE_START(OPENRD_ULTIMATE, "Marvell OpenRD Ultimate Board")
|
||||
+ /* Maintainer: Dhaval Vasa <dhaval.vasa@einfochips.com> */
|
||||
+ .phys_io = KIRKWOOD_REGS_PHYS_BASE,
|
||||
+ .io_pg_offst = ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc,
|
||||
+ .boot_params = 0x00000100,
|
||||
+ .init_machine = openrd_init,
|
||||
+ .map_io = kirkwood_map_io,
|
||||
+ .init_irq = kirkwood_init_irq,
|
||||
+ .timer = &kirkwood_timer,
|
||||
+MACHINE_END
|
||||
+#endif
|
||||
--
|
||||
1.7.1
|
|
@ -1,21 +0,0 @@
|
|||
Subject: [PATCH] Kirkwood: Add MPP44 (board ID) for QNAP TS-11x/TS-21x
|
||||
|
||||
MPP44 can be used to differentiate between one-bay (TS-11x) and
|
||||
two-bay (TS-21x) devices.
|
||||
|
||||
According to an engineer from QNAP, the setting of MPP44 depends
|
||||
on the firmware rather than hardware. Presumably, this means
|
||||
that you could fake the MPP44 value by changing the boot loader.
|
||||
|
||||
Signed-off-by: Martin Michlmayr <tbm@cyrius.com>
|
||||
|
||||
--- a/arch/arm/mach-kirkwood/ts219-setup.c 2010-06-13 18:31:20.000000000 +0000
|
||||
+++ b/arch/arm/mach-kirkwood/ts219-setup.c 2010-06-13 18:31:54.000000000 +0000
|
||||
@@ -153,6 +153,7 @@
|
||||
MPP15_GPIO, /* USB Copy button */
|
||||
MPP16_GPIO, /* Reset button */
|
||||
MPP36_GPIO, /* RAM: 0: 256 MB, 1: 512 MB */
|
||||
+ MPP44_GPIO, /* Board ID: 0: TS-11x, 1: TS-21x */
|
||||
0
|
||||
};
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
+ bugfix/all/stable/2.6.35.1.patch
|
||||
+ bugfix/all/stable/2.6.35.2.patch
|
||||
+ bugfix/all/mm-fix-page-table-unmap-for-stack-guard-page-properl.patch
|
||||
+ bugfix/all/mm-fix-up-some-user-visible-effects-of-the-stack-gua.patch
|
|
@ -1,6 +0,0 @@
|
|||
+ bugfix/all/netfilter-fix-CONFIG_COMPAT-support.patch
|
||||
- bugfix/all/mm-fix-page-table-unmap-for-stack-guard-page-properl.patch
|
||||
- bugfix/all/mm-fix-up-some-user-visible-effects-of-the-stack-gua.patch
|
||||
+ bugfix/all/stable/2.6.35.3.patch
|
||||
+ bugfix/all/stable/2.6.35.4.patch
|
||||
+ bugfix/mips/octeon-gcc-4.4.patch
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
+ features/all/drivers-media-dvb-usb-af9005-request_firmware.patch
|
||||
|
||||
+ features/all/lgs8gxx-lgs8g75-request_firmware.patch
|
||||
+ features/all/r8169-rtl8168d-1-2-request_firmware-2.patch
|
||||
+ features/all/sound-pci-cs46xx-request_firmware.patch
|
||||
|
||||
|
@ -32,7 +31,7 @@
|
|||
+ bugfix/ia64/hardcode-arch-script-output.patch
|
||||
+ bugfix/mips/disable-advansys.patch
|
||||
+ bugfix/arm/disable-scsi_acard.patch
|
||||
+ bugfix/mips/disable-werror.patch
|
||||
+ debian/mips-disable-werror.patch
|
||||
+ bugfix/powerpc/lpar-console.patch
|
||||
#+ bugfix/all/wireless-regulatory-default-EU.patch
|
||||
|
||||
|
@ -45,16 +44,3 @@
|
|||
+ bugfix/mips/mips-ide-flush-dcache.patch
|
||||
#+ bugfix/all/thinkpad-acpi-fix-backlight.patch
|
||||
+ features/all/revert-ipv4-Make-INET_LRO-a-bool-instead-of-tristate.patch
|
||||
+ bugfix/all/ipr-add-writeq-definition-if-needed.patch
|
||||
+ bugfix/all/mantis-Select-correct-frontends.patch
|
||||
+ features/arm/openrd-ultimate.patch
|
||||
+ features/arm/ts219-mpp44.patch
|
||||
+ features/arm/hp-t5325.patch
|
||||
+ features/all/m25p80-add-support-mx25l8005.patch
|
||||
+ bugfix/all/3c59x-Specify-window-for-access-to-windowed-regs.patch
|
||||
+ bugfix/all/3c59x-Use-fine-grained-locks-for-MII-and-windowed-regs.patch
|
||||
+ bugfix/all/ipv6-Clamp-reported-valid_lft-to-a-minimum-of-0.patch
|
||||
+ bugfix/all/ipv6-Use-interface-max_desync_factor.patch
|
||||
+ bugfix/all/rtl8192su-Clean-up-in-case-of-an-error-in-mo.patch
|
||||
+ bugfix/all/rtl8192su-Fix-procfs-code-for-interfaces-not.patch
|
||||
+ bugfix/all/viafb-Depends-on-X86.patch
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
+ debian/dfsg/drivers-staging-wlags49_h2-disable.patch
|
||||
+ debian/dfsg/drivers-staging-wlags49_h25-disable.patch
|
||||
+ debian/dfsg/firmware-cleanup.patch
|
||||
+ debian/dfsg/lgs8gxx-lgs8g75-disable.patch
|
||||
+ debian/dfsg/r8169-rtl8168d-1-2-disable.patch
|
||||
+ debian/dfsg/sound-pci.patch
|
||||
X debian/dfsg/files-1
|
||||
|
|
Loading…
Reference in New Issue