Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 86000
b: refs/heads/master
c: 60f9268
h: refs/heads/master
v: v3
  • Loading branch information
Maciej Cencora authored and Dave Airlie committed Feb 19, 2008
1 parent 6085d84 commit 0d7e2c1
Show file tree
Hide file tree
Showing 111 changed files with 2,404 additions and 4,442 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cf8c0d1dbcfaba56adde85b63190a8bceda0cd04
refs/heads/master: 60f92683943c5b7a85963b283d6f8a853aa09203
32 changes: 15 additions & 17 deletions trunk/Documentation/i386/IO-APIC.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
Most (all) Intel-MP compliant SMP boards have the so-called 'IO-APIC',
which is an enhanced interrupt controller. It enables us to route
hardware interrupts to multiple CPUs, or to CPU groups. Without an
IO-APIC, interrupts from hardware will be delivered only to the
CPU which boots the operating system (usually CPU#0).
which is an enhanced interrupt controller, it enables us to route
hardware interrupts to multiple CPUs, or to CPU groups.

Linux supports all variants of compliant SMP boards, including ones with
multiple IO-APICs. Multiple IO-APICs are used in high-end servers to
distribute IRQ load further.
multiple IO-APICs. (multiple IO-APICs are used in high-end servers to
distribute IRQ load further).

There are (a few) known breakages in certain older boards, such bugs are
There are (a few) known breakages in certain older boards, which bugs are
usually worked around by the kernel. If your MP-compliant SMP board does
not boot Linux, then consult the linux-smp mailing list archives first.

Expand All @@ -30,18 +28,18 @@ If your box boots fine with enabled IO-APIC IRQs, then your
hell:~>
<----------------------------

Some interrupts are still listed as 'XT PIC', but this is not a problem;
some interrupts are still listed as 'XT PIC', but this is not a problem,
none of those IRQ sources is performance-critical.


In the unlikely case that your board does not create a working mp-table,
in the unlikely case that your board does not create a working mp-table,
you can use the pirq= boot parameter to 'hand-construct' IRQ entries. This
is non-trivial though and cannot be automated. One sample /etc/lilo.conf
is nontrivial though and cannot be automated. One sample /etc/lilo.conf
entry:

append="pirq=15,11,10"

The actual numbers depend on your system, on your PCI cards and on their
the actual numbers depend on your system, on your PCI cards and on their
PCI slot position. Usually PCI slots are 'daisy chained' before they are
connected to the PCI chipset IRQ routing facility (the incoming PIRQ1-4
lines):
Expand All @@ -56,7 +54,7 @@ lines):
PIRQ1 ----| |- `----| |- `----| |- `----| |--------| |
`-' `-' `-' `-' `-'

Every PCI card emits a PCI IRQ, which can be INTA, INTB, INTC or INTD:
every PCI card emits a PCI IRQ, which can be INTA,INTB,INTC,INTD:

,-.
INTD--| |
Expand Down Expand Up @@ -97,21 +95,21 @@ card (IRQ11) in Slot3, and have Slot1 empty:
[value '0' is a generic 'placeholder', reserved for empty (or non-IRQ emitting)
slots.]

Generally, it's always possible to find out the correct pirq= settings, just
generally, it's always possible to find out the correct pirq= settings, just
permute all IRQ numbers properly ... it will take some time though. An
'incorrect' pirq line will cause the booting process to hang, or a device
won't function properly (e.g. if it's inserted as a module).
won't function properly (if it's inserted as eg. a module).

If you have 2 PCI buses, then you can use up to 8 pirq values, although such
If you have 2 PCI buses, then you can use up to 8 pirq values. Although such
boards tend to have a good configuration.

Be prepared that it might happen that you need some strange pirq line:

append="pirq=0,0,0,0,0,0,9,11"

Use smart trial-and-error techniques to find out the correct pirq line ...
use smart try-and-err techniques to find out the correct pirq line ...

Good luck and mail to linux-smp@vger.kernel.org or
good luck and mail to linux-smp@vger.kernel.org or
linux-kernel@vger.kernel.org if you have any problems that are not covered
by this document.

Expand Down
2 changes: 2 additions & 0 deletions trunk/Documentation/kernel-parameters.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1056,6 +1056,8 @@ and is between 256 and 4096 characters. It is defined in the file
[SCSI] Maximum number of LUNs received.
Should be between 1 and 16384.

mca-pentium [BUGS=X86-32]

mcatest= [IA-64]

mce [X86-32] Machine Check Exception
Expand Down
12 changes: 6 additions & 6 deletions trunk/arch/mips/bcm47xx/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,17 +92,17 @@ static int bcm47xx_get_invariants(struct ssb_bus *bus,
iv->sprom.revision = 3;

if (cfe_getenv("et0macaddr", buf, sizeof(buf)) >= 0)
str2eaddr(buf, iv->sprom.et0mac);
str2eaddr(buf, iv->sprom.r1.et0mac);
if (cfe_getenv("et1macaddr", buf, sizeof(buf)) >= 0)
str2eaddr(buf, iv->sprom.et1mac);
str2eaddr(buf, iv->sprom.r1.et1mac);
if (cfe_getenv("et0phyaddr", buf, sizeof(buf)) >= 0)
iv->sprom.et0phyaddr = simple_strtoul(buf, NULL, 10);
iv->sprom.r1.et0phyaddr = simple_strtoul(buf, NULL, 10);
if (cfe_getenv("et1phyaddr", buf, sizeof(buf)) >= 0)
iv->sprom.et1phyaddr = simple_strtoul(buf, NULL, 10);
iv->sprom.r1.et1phyaddr = simple_strtoul(buf, NULL, 10);
if (cfe_getenv("et0mdcport", buf, sizeof(buf)) >= 0)
iv->sprom.et0mdcport = simple_strtoul(buf, NULL, 10);
iv->sprom.r1.et0mdcport = simple_strtoul(buf, NULL, 10);
if (cfe_getenv("et1mdcport", buf, sizeof(buf)) >= 0)
iv->sprom.et1mdcport = simple_strtoul(buf, NULL, 10);
iv->sprom.r1.et1mdcport = simple_strtoul(buf, NULL, 10);

return 0;
}
Expand Down
71 changes: 4 additions & 67 deletions trunk/arch/mips/bcm47xx/wgt634u.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include <linux/platform_device.h>
#include <linux/module.h>
#include <linux/leds.h>
#include <linux/mtd/physmap.h>
#include <linux/ssb/ssb.h>
#include <asm/mach-bcm47xx/bcm47xx.h>

Expand Down Expand Up @@ -44,82 +43,20 @@ static struct platform_device wgt634u_gpio_leds = {
}
};


/* 8MiB flash. The struct mtd_partition matches original Netgear WGT634U
firmware. */
static struct mtd_partition wgt634u_partitions[] = {
{
.name = "cfe",
.offset = 0,
.size = 0x60000, /* 384k */
.mask_flags = MTD_WRITEABLE /* force read-only */
},
{
.name = "config",
.offset = 0x60000,
.size = 0x20000 /* 128k */
},
{
.name = "linux",
.offset = 0x80000,
.size = 0x140000 /* 1280k */
},
{
.name = "jffs",
.offset = 0x1c0000,
.size = 0x620000 /* 6272k */
},
{
.name = "nvram",
.offset = 0x7e0000,
.size = 0x20000 /* 128k */
},
};

static struct physmap_flash_data wgt634u_flash_data = {
.parts = wgt634u_partitions,
.nr_parts = ARRAY_SIZE(wgt634u_partitions)
};

static struct resource wgt634u_flash_resource = {
.flags = IORESOURCE_MEM,
};

static struct platform_device wgt634u_flash = {
.name = "physmap-flash",
.id = 0,
.dev = { .platform_data = &wgt634u_flash_data, },
.resource = &wgt634u_flash_resource,
.num_resources = 1,
};

/* Platform devices */
static struct platform_device *wgt634u_devices[] __initdata = {
&wgt634u_flash,
&wgt634u_gpio_leds,
};

static int __init wgt634u_init(void)
{
/* There is no easy way to detect that we are running on a WGT634U
* machine. Use the MAC address as an heuristic. Netgear Inc. has
* been allocated ranges 00:09:5b:xx:xx:xx and 00:0f:b5:xx:xx:xx.
*/

u8 *et0mac = ssb_bcm47xx.sprom.et0mac;
u8 *et0mac = ssb_bcm47xx.sprom.r1.et0mac;

if (et0mac[0] == 0x00 &&
((et0mac[1] == 0x09 && et0mac[2] == 0x5b) ||
(et0mac[1] == 0x0f && et0mac[2] == 0xb5))) {
struct ssb_mipscore *mcore = &ssb_bcm47xx.mipscore;
wgt634u_flash_data.width = mcore->flash_buswidth;
wgt634u_flash_resource.start = mcore->flash_window;
wgt634u_flash_resource.end = mcore->flash_window
+ mcore->flash_window_size
- 1;
return platform_add_devices(wgt634u_devices,
ARRAY_SIZE(wgt634u_devices));
} else
(et0mac[1] == 0x0f && et0mac[2] == 0xb5)))
return platform_device_register(&wgt634u_gpio_leds);
else
return -ENODEV;
}

Expand Down
Loading

0 comments on commit 0d7e2c1

Please sign in to comment.