aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MAINTAINERS2
-rw-r--r--arch/alpha/kernel/pci_iommu.c1
-rw-r--r--arch/arm/common/dmabounce.c1
-rw-r--r--arch/avr32/boards/atstk1000/atstk1002.c58
-rw-r--r--arch/avr32/mach-at32ap/at32ap7000.c344
-rw-r--r--arch/avr32/mach-at32ap/extint.c2
-rw-r--r--arch/avr32/mach-at32ap/pm.h4
-rw-r--r--arch/avr32/mach-at32ap/time-tc.c2
-rw-r--r--arch/m68knommu/Kconfig13
-rw-r--r--arch/m68knommu/Makefile3
-rw-r--r--arch/m68knommu/defconfig325
-rw-r--r--arch/m68knommu/kernel/setup.c27
-rw-r--r--arch/m68knommu/kernel/signal.c10
-rw-r--r--arch/m68knommu/kernel/time.c22
-rw-r--r--arch/m68knommu/platform/5206/config.c9
-rw-r--r--arch/m68knommu/platform/5206e/config.c10
-rw-r--r--arch/m68knommu/platform/520x/config.c8
-rw-r--r--arch/m68knommu/platform/523x/config.c8
-rw-r--r--arch/m68knommu/platform/5249/config.c10
-rw-r--r--arch/m68knommu/platform/5272/config.c10
-rw-r--r--arch/m68knommu/platform/527x/config.c8
-rw-r--r--arch/m68knommu/platform/528x/config.c8
-rw-r--r--arch/m68knommu/platform/5307/config.c10
-rw-r--r--arch/m68knommu/platform/5307/entry.S5
-rw-r--r--arch/m68knommu/platform/5307/pit.c15
-rw-r--r--arch/m68knommu/platform/5307/timers.c19
-rw-r--r--arch/m68knommu/platform/532x/config.c10
-rw-r--r--arch/m68knommu/platform/5407/config.c10
-rw-r--r--arch/mips/mm/dma-default.c1
-rw-r--r--arch/parisc/kernel/pci-dma.c1
-rw-r--r--arch/powerpc/Kconfig.debug1
-rw-r--r--arch/powerpc/boot/dts/bamboo.dts10
-rw-r--r--arch/powerpc/boot/dts/sequoia.dts14
-rw-r--r--arch/powerpc/boot/dts/walnut.dts12
-rw-r--r--arch/powerpc/boot/treeboot-walnut.c6
-rw-r--r--arch/powerpc/configs/bamboo_defconfig114
-rw-r--r--arch/powerpc/configs/ebony_defconfig115
-rw-r--r--arch/powerpc/configs/walnut_defconfig94
-rw-r--r--arch/powerpc/platforms/40x/Kconfig1
-rw-r--r--arch/powerpc/platforms/44x/Kconfig8
-rw-r--r--arch/powerpc/platforms/Kconfig.cputype1
-rw-r--r--arch/sparc64/kernel/iommu_common.c5
-rw-r--r--block/ll_rw_blk.c16
-rw-r--r--drivers/char/cyclades.c2
-rw-r--r--drivers/ide/ide-probe.c1
-rw-r--r--drivers/infiniband/hw/ehca/ehca_mrmw.c6
-rw-r--r--drivers/md/bitmap.c2
-rw-r--r--drivers/md/raid5.c17
-rw-r--r--drivers/mtd/chips/cfi_cmdset_0001.c146
-rw-r--r--drivers/mtd/nand/Kconfig2
-rw-r--r--drivers/mtd/nand/diskonchip.c4
-rw-r--r--drivers/mtd/nand/nand_base.c6
-rw-r--r--drivers/mtd/nand/nand_ecc.c2
-rw-r--r--drivers/mtd/nand/nandsim.c2
-rw-r--r--drivers/mtd/nand/s3c2410.c14
-rw-r--r--drivers/mtd/onenand/onenand_sim.c50
-rw-r--r--drivers/net/fec.c24
-rw-r--r--drivers/parisc/ccio-dma.c1
-rw-r--r--drivers/parisc/sba_iommu.c1
-rw-r--r--drivers/pci/intel-iommu.c4
-rw-r--r--drivers/s390/scsi/zfcp_aux.c1
-rw-r--r--drivers/s390/scsi/zfcp_def.h4
-rw-r--r--drivers/s390/scsi/zfcp_erp.c10
-rw-r--r--drivers/scsi/ps3rom.c2
-rw-r--r--drivers/serial/mcf.c653
-rw-r--r--fs/jffs2/acl.c101
-rw-r--r--fs/jffs2/acl.h12
-rw-r--r--fs/jffs2/dir.c35
-rw-r--r--fs/jffs2/file.c11
-rw-r--r--fs/jffs2/fs.c21
-rw-r--r--fs/jffs2/os-linux.h4
-rw-r--r--fs/jffs2/write.c8
-rw-r--r--include/asm-arm/dma-mapping.h10
-rw-r--r--include/asm-avr32/arch-at32ap/board.h23
-rw-r--r--include/asm-avr32/dma-mapping.h7
-rw-r--r--include/asm-blackfin/scatterlist.h1
-rw-r--r--include/asm-frv/scatterlist.h8
-rw-r--r--include/asm-m68knommu/module.h12
-rw-r--r--include/asm-m68knommu/scatterlist.h1
-rw-r--r--include/asm-m68knommu/uaccess.h4
-rw-r--r--include/asm-parisc/scatterlist.h2
-rw-r--r--include/asm-powerpc/dma-mapping.h10
-rw-r--r--include/asm-sh/dma-mapping.h12
-rw-r--r--include/asm-sh64/dma-mapping.h12
-rw-r--r--include/sound/version.h2
-rw-r--r--kernel/irq/manage.c20
-rw-r--r--lib/reed_solomon/decode_rs.c5
-rw-r--r--lib/reed_solomon/reed_solomon.c2
-rw-r--r--mm/mmap.c3
-rw-r--r--mm/mprotect.c2
-rw-r--r--net/sctp/sm_make_chunk.c2
-rw-r--r--net/xfrm/xfrm_algo.c1
-rw-r--r--security/selinux/hooks.c6
-rw-r--r--sound/core/control.c5
-rw-r--r--sound/pci/bt87x.c4
-rw-r--r--sound/pci/hda/hda_codec.c9
-rw-r--r--sound/pci/hda/hda_local.h18
-rw-r--r--sound/pci/hda/patch_analog.c5
-rw-r--r--sound/pci/hda/patch_cmedia.c3
-rw-r--r--sound/pci/hda/patch_conexant.c35
-rw-r--r--sound/pci/hda/patch_realtek.c2
-rw-r--r--sound/pci/hda/patch_sigmatel.c6
-rw-r--r--sound/pci/hda/patch_via.c2
-rw-r--r--sound/sh/aica.c31
-rw-r--r--sound/sparc/cs4231.c59
-rw-r--r--sound/usb/usbquirks.h9
106 files changed, 1941 insertions, 891 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 1fd6d02a79b8..40245af2d0e3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2338,6 +2338,8 @@ L: linuxppc-dev@ozlabs.org
2338S: Maintained 2338S: Maintained
2339 2339
2340LINUX FOR POWERPC EMBEDDED PPC8XX 2340LINUX FOR POWERPC EMBEDDED PPC8XX
2341P: Vitaly Bordug
2342M: vitb@kernel.crashing.org
2341P: Marcelo Tosatti 2343P: Marcelo Tosatti
2342M: marcelo@kvack.org 2344M: marcelo@kvack.org
2343W: http://www.penguinppc.org/ 2345W: http://www.penguinppc.org/
diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c
index ee07dceae1d4..2d00a08d3f08 100644
--- a/arch/alpha/kernel/pci_iommu.c
+++ b/arch/alpha/kernel/pci_iommu.c
@@ -7,6 +7,7 @@
7#include <linux/pci.h> 7#include <linux/pci.h>
8#include <linux/slab.h> 8#include <linux/slab.h>
9#include <linux/bootmem.h> 9#include <linux/bootmem.h>
10#include <linux/scatterlist.h>
10#include <linux/log2.h> 11#include <linux/log2.h>
11 12
12#include <asm/io.h> 13#include <asm/io.h>
diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c
index 9d371e476552..52fc6a883281 100644
--- a/arch/arm/common/dmabounce.c
+++ b/arch/arm/common/dmabounce.c
@@ -29,6 +29,7 @@
29#include <linux/dma-mapping.h> 29#include <linux/dma-mapping.h>
30#include <linux/dmapool.h> 30#include <linux/dmapool.h>
31#include <linux/list.h> 31#include <linux/list.h>
32#include <linux/scatterlist.h>
32 33
33#include <asm/cacheflush.h> 34#include <asm/cacheflush.h>
34 35
diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c
index 6b9e466104ad..5be0d13f4b03 100644
--- a/arch/avr32/boards/atstk1000/atstk1002.c
+++ b/arch/avr32/boards/atstk1000/atstk1002.c
@@ -16,6 +16,7 @@
16#include <linux/string.h> 16#include <linux/string.h>
17#include <linux/types.h> 17#include <linux/types.h>
18#include <linux/spi/spi.h> 18#include <linux/spi/spi.h>
19#include <linux/spi/at73c213.h>
19 20
20#include <video/atmel_lcdc.h> 21#include <video/atmel_lcdc.h>
21 22
@@ -49,7 +50,26 @@ static struct eth_platform_data __initdata eth_data[2] = {
49}; 50};
50 51
51#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM 52#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM
53#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM
54static struct at73c213_board_info at73c213_data = {
55 .ssc_id = 0,
56 .shortname = "AVR32 STK1000 external DAC",
57};
58#endif
59#endif
60
61#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM
52static struct spi_board_info spi0_board_info[] __initdata = { 62static struct spi_board_info spi0_board_info[] __initdata = {
63#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM
64 {
65 /* AT73C213 */
66 .modalias = "at73c213",
67 .max_speed_hz = 200000,
68 .chip_select = 0,
69 .mode = SPI_MODE_1,
70 .platform_data = &at73c213_data,
71 },
72#endif
53 { 73 {
54 /* QVGA display */ 74 /* QVGA display */
55 .modalias = "ltv350qv", 75 .modalias = "ltv350qv",
@@ -180,6 +200,38 @@ static void setup_j2_leds(void)
180} 200}
181#endif 201#endif
182 202
203#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM
204#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM
205static void __init at73c213_set_clk(struct at73c213_board_info *info)
206{
207 struct clk *gclk;
208 struct clk *pll;
209
210 gclk = clk_get(NULL, "gclk0");
211 if (IS_ERR(gclk))
212 goto err_gclk;
213 pll = clk_get(NULL, "pll0");
214 if (IS_ERR(pll))
215 goto err_pll;
216
217 if (clk_set_parent(gclk, pll)) {
218 pr_debug("STK1000: failed to set pll0 as parent for DAC clock\n");
219 goto err_set_clk;
220 }
221
222 at32_select_periph(GPIO_PIN_PA(30), GPIO_PERIPH_A, 0);
223 info->dac_clk = gclk;
224
225err_set_clk:
226 clk_put(pll);
227err_pll:
228 clk_put(gclk);
229err_gclk:
230 return;
231}
232#endif
233#endif
234
183void __init setup_board(void) 235void __init setup_board(void)
184{ 236{
185#ifdef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM 237#ifdef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM
@@ -248,6 +300,12 @@ static int __init atstk1002_init(void)
248 300
249 setup_j2_leds(); 301 setup_j2_leds();
250 302
303#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM
304#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM
305 at73c213_set_clk(&at73c213_data);
306#endif
307#endif
308
251 return 0; 309 return 0;
252} 310}
253postcore_initcall(atstk1002_init); 311postcore_initcall(atstk1002_init);
diff --git a/arch/avr32/mach-at32ap/at32ap7000.c b/arch/avr32/mach-at32ap/at32ap7000.c
index f6d154ca4d24..a9d9ec081e3d 100644
--- a/arch/avr32/mach-at32ap/at32ap7000.c
+++ b/arch/avr32/mach-at32ap/at32ap7000.c
@@ -556,6 +556,17 @@ static struct clk pico_clk = {
556 .users = 1, 556 .users = 1,
557}; 557};
558 558
559static struct resource dmaca0_resource[] = {
560 {
561 .start = 0xff200000,
562 .end = 0xff20ffff,
563 .flags = IORESOURCE_MEM,
564 },
565 IRQ(2),
566};
567DEFINE_DEV(dmaca, 0);
568DEV_CLK(hclk, dmaca0, hsb, 10);
569
559/* -------------------------------------------------------------------- 570/* --------------------------------------------------------------------
560 * HMATRIX 571 * HMATRIX
561 * -------------------------------------------------------------------- */ 572 * -------------------------------------------------------------------- */
@@ -655,6 +666,7 @@ void __init at32_add_system_devices(void)
655 platform_device_register(&at32_eic0_device); 666 platform_device_register(&at32_eic0_device);
656 platform_device_register(&smc0_device); 667 platform_device_register(&smc0_device);
657 platform_device_register(&pdc_device); 668 platform_device_register(&pdc_device);
669 platform_device_register(&dmaca0_device);
658 670
659 platform_device_register(&at32_systc0_device); 671 platform_device_register(&at32_systc0_device);
660 672
@@ -960,6 +972,96 @@ at32_add_device_spi(unsigned int id, struct spi_board_info *b, unsigned int n)
960} 972}
961 973
962/* -------------------------------------------------------------------- 974/* --------------------------------------------------------------------
975 * TWI
976 * -------------------------------------------------------------------- */
977static struct resource atmel_twi0_resource[] __initdata = {
978 PBMEM(0xffe00800),
979 IRQ(5),
980};
981static struct clk atmel_twi0_pclk = {
982 .name = "twi_pclk",
983 .parent = &pba_clk,
984 .mode = pba_clk_mode,
985 .get_rate = pba_clk_get_rate,
986 .index = 2,
987};
988
989struct platform_device *__init at32_add_device_twi(unsigned int id)
990{
991 struct platform_device *pdev;
992
993 if (id != 0)
994 return NULL;
995
996 pdev = platform_device_alloc("atmel_twi", id);
997 if (!pdev)
998 return NULL;
999
1000 if (platform_device_add_resources(pdev, atmel_twi0_resource,
1001 ARRAY_SIZE(atmel_twi0_resource)))
1002 goto err_add_resources;
1003
1004 select_peripheral(PA(6), PERIPH_A, 0); /* SDA */
1005 select_peripheral(PA(7), PERIPH_A, 0); /* SDL */
1006
1007 atmel_twi0_pclk.dev = &pdev->dev;
1008
1009 platform_device_add(pdev);
1010 return pdev;
1011
1012err_add_resources:
1013 platform_device_put(pdev);
1014 return NULL;
1015}
1016
1017/* --------------------------------------------------------------------
1018 * MMC
1019 * -------------------------------------------------------------------- */
1020static struct resource atmel_mci0_resource[] __initdata = {
1021 PBMEM(0xfff02400),
1022 IRQ(28),
1023};
1024static struct clk atmel_mci0_pclk = {
1025 .name = "mci_clk",
1026 .parent = &pbb_clk,
1027 .mode = pbb_clk_mode,
1028 .get_rate = pbb_clk_get_rate,
1029 .index = 9,
1030};
1031
1032struct platform_device *__init at32_add_device_mci(unsigned int id)
1033{
1034 struct platform_device *pdev;
1035
1036 if (id != 0)
1037 return NULL;
1038
1039 pdev = platform_device_alloc("atmel_mci", id);
1040 if (!pdev)
1041 return NULL;
1042
1043 if (platform_device_add_resources(pdev, atmel_mci0_resource,
1044 ARRAY_SIZE(atmel_mci0_resource)))
1045 goto err_add_resources;
1046
1047 select_peripheral(PA(10), PERIPH_A, 0); /* CLK */
1048 select_peripheral(PA(11), PERIPH_A, 0); /* CMD */
1049 select_peripheral(PA(12), PERIPH_A, 0); /* DATA0 */
1050 select_peripheral(PA(13), PERIPH_A, 0); /* DATA1 */
1051 select_peripheral(PA(14), PERIPH_A, 0); /* DATA2 */
1052 select_peripheral(PA(15), PERIPH_A, 0); /* DATA3 */
1053
1054 atmel_mci0_pclk.dev = &pdev->dev;
1055
1056 platform_device_add(pdev);
1057 return pdev;
1058
1059err_add_resources:
1060 platform_device_put(pdev);
1061 return NULL;
1062}
1063
1064/* --------------------------------------------------------------------
963 * LCDC 1065 * LCDC
964 * -------------------------------------------------------------------- */ 1066 * -------------------------------------------------------------------- */
965static struct atmel_lcdfb_info atmel_lcdfb0_data; 1067static struct atmel_lcdfb_info atmel_lcdfb0_data;
@@ -1228,6 +1330,241 @@ out_free_pdev:
1228} 1330}
1229 1331
1230/* -------------------------------------------------------------------- 1332/* --------------------------------------------------------------------
1333 * IDE / CompactFlash
1334 * -------------------------------------------------------------------- */
1335static struct resource at32_smc_cs4_resource[] __initdata = {
1336 {
1337 .start = 0x04000000,
1338 .end = 0x07ffffff,
1339 .flags = IORESOURCE_MEM,
1340 },
1341 IRQ(~0UL), /* Magic IRQ will be overridden */
1342};
1343static struct resource at32_smc_cs5_resource[] __initdata = {
1344 {
1345 .start = 0x20000000,
1346 .end = 0x23ffffff,
1347 .flags = IORESOURCE_MEM,
1348 },
1349 IRQ(~0UL), /* Magic IRQ will be overridden */
1350};
1351
1352static int __init at32_init_ide_or_cf(struct platform_device *pdev,
1353 unsigned int cs, unsigned int extint)
1354{
1355 static unsigned int extint_pin_map[4] __initdata = {
1356 GPIO_PIN_PB(25),
1357 GPIO_PIN_PB(26),
1358 GPIO_PIN_PB(27),
1359 GPIO_PIN_PB(28),
1360 };
1361 static bool common_pins_initialized __initdata = false;
1362 unsigned int extint_pin;
1363 int ret;
1364
1365 if (extint >= ARRAY_SIZE(extint_pin_map))
1366 return -EINVAL;
1367 extint_pin = extint_pin_map[extint];
1368
1369 switch (cs) {
1370 case 4:
1371 ret = platform_device_add_resources(pdev,
1372 at32_smc_cs4_resource,
1373 ARRAY_SIZE(at32_smc_cs4_resource));
1374 if (ret)
1375 return ret;
1376
1377 select_peripheral(PE(21), PERIPH_A, 0); /* NCS4 -> OE_N */
1378 set_ebi_sfr_bits(HMATRIX_BIT(CS4A));
1379 break;
1380 case 5:
1381 ret = platform_device_add_resources(pdev,
1382 at32_smc_cs5_resource,
1383 ARRAY_SIZE(at32_smc_cs5_resource));
1384 if (ret)
1385 return ret;
1386
1387 select_peripheral(PE(22), PERIPH_A, 0); /* NCS5 -> OE_N */
1388 set_ebi_sfr_bits(HMATRIX_BIT(CS5A));
1389 break;
1390 default:
1391 return -EINVAL;
1392 }
1393
1394 if (!common_pins_initialized) {
1395 select_peripheral(PE(19), PERIPH_A, 0); /* CFCE1 -> CS0_N */
1396 select_peripheral(PE(20), PERIPH_A, 0); /* CFCE2 -> CS1_N */
1397 select_peripheral(PE(23), PERIPH_A, 0); /* CFRNW -> DIR */
1398 select_peripheral(PE(24), PERIPH_A, 0); /* NWAIT <- IORDY */
1399 common_pins_initialized = true;
1400 }
1401
1402 at32_select_periph(extint_pin, GPIO_PERIPH_A, AT32_GPIOF_DEGLITCH);
1403
1404 pdev->resource[1].start = EIM_IRQ_BASE + extint;
1405 pdev->resource[1].end = pdev->resource[1].start;
1406
1407 return 0;
1408}
1409
1410struct platform_device *__init
1411at32_add_device_ide(unsigned int id, unsigned int extint,
1412 struct ide_platform_data *data)
1413{
1414 struct platform_device *pdev;
1415
1416 pdev = platform_device_alloc("at32_ide", id);
1417 if (!pdev)
1418 goto fail;
1419
1420 if (platform_device_add_data(pdev, data,
1421 sizeof(struct ide_platform_data)))
1422 goto fail;
1423
1424 if (at32_init_ide_or_cf(pdev, data->cs, extint))
1425 goto fail;
1426
1427 platform_device_add(pdev);
1428 return pdev;
1429
1430fail:
1431 platform_device_put(pdev);
1432 return NULL;
1433}
1434
1435struct platform_device *__init
1436at32_add_device_cf(unsigned int id, unsigned int extint,
1437 struct cf_platform_data *data)
1438{
1439 struct platform_device *pdev;
1440
1441 pdev = platform_device_alloc("at32_cf", id);
1442 if (!pdev)
1443 goto fail;
1444
1445 if (platform_device_add_data(pdev, data,
1446 sizeof(struct cf_platform_data)))
1447 goto fail;
1448
1449 if (at32_init_ide_or_cf(pdev, data->cs, extint))
1450 goto fail;
1451
1452 if (data->detect_pin != GPIO_PIN_NONE)
1453 at32_select_gpio(data->detect_pin, AT32_GPIOF_DEGLITCH);
1454 if (data->reset_pin != GPIO_PIN_NONE)
1455 at32_select_gpio(data->reset_pin, 0);
1456 if (data->vcc_pin != GPIO_PIN_NONE)
1457 at32_select_gpio(data->vcc_pin, 0);
1458 /* READY is used as extint, so we can't select it as gpio */
1459
1460 platform_device_add(pdev);
1461 return pdev;
1462
1463fail:
1464 platform_device_put(pdev);
1465 return NULL;
1466}
1467
1468/* --------------------------------------------------------------------
1469 * AC97C
1470 * -------------------------------------------------------------------- */
1471static struct resource atmel_ac97c0_resource[] __initdata = {
1472 PBMEM(0xfff02800),
1473 IRQ(29),
1474};
1475static struct clk atmel_ac97c0_pclk = {
1476 .name = "pclk",
1477 .parent = &pbb_clk,
1478 .mode = pbb_clk_mode,
1479 .get_rate = pbb_clk_get_rate,
1480 .index = 10,
1481};
1482
1483struct platform_device *__init at32_add_device_ac97c(unsigned int id)
1484{
1485 struct platform_device *pdev;
1486
1487 if (id != 0)
1488 return NULL;
1489
1490 pdev = platform_device_alloc("atmel_ac97c", id);
1491 if (!pdev)
1492 return NULL;
1493
1494 if (platform_device_add_resources(pdev, atmel_ac97c0_resource,
1495 ARRAY_SIZE(atmel_ac97c0_resource)))
1496 goto err_add_resources;
1497
1498 select_peripheral(PB(20), PERIPH_B, 0); /* SYNC */
1499 select_peripheral(PB(21), PERIPH_B, 0); /* SDO */
1500 select_peripheral(PB(22), PERIPH_B, 0); /* SDI */
1501 select_peripheral(PB(23), PERIPH_B, 0); /* SCLK */
1502
1503 atmel_ac97c0_pclk.dev = &pdev->dev;
1504
1505 platform_device_add(pdev);
1506 return pdev;
1507
1508err_add_resources:
1509 platform_device_put(pdev);
1510 return NULL;
1511}
1512
1513/* --------------------------------------------------------------------
1514 * ABDAC
1515 * -------------------------------------------------------------------- */
1516static struct resource abdac0_resource[] __initdata = {
1517 PBMEM(0xfff02000),
1518 IRQ(27),
1519};
1520static struct clk abdac0_pclk = {
1521 .name = "pclk",
1522 .parent = &pbb_clk,
1523 .mode = pbb_clk_mode,
1524 .get_rate = pbb_clk_get_rate,
1525 .index = 8,
1526};
1527static struct clk abdac0_sample_clk = {
1528 .name = "sample_clk",
1529 .mode = genclk_mode,
1530 .get_rate = genclk_get_rate,
1531 .set_rate = genclk_set_rate,
1532 .set_parent = genclk_set_parent,
1533 .index = 6,
1534};
1535
1536struct platform_device *__init at32_add_device_abdac(unsigned int id)
1537{
1538 struct platform_device *pdev;
1539
1540 if (id != 0)
1541 return NULL;
1542
1543 pdev = platform_device_alloc("abdac", id);
1544 if (!pdev)
1545 return NULL;
1546
1547 if (platform_device_add_resources(pdev, abdac0_resource,
1548 ARRAY_SIZE(abdac0_resource)))
1549 goto err_add_resources;
1550
1551 select_peripheral(PB(20), PERIPH_A, 0); /* DATA1 */
1552 select_peripheral(PB(21), PERIPH_A, 0); /* DATA0 */
1553 select_peripheral(PB(22), PERIPH_A, 0); /* DATAN1 */
1554 select_peripheral(PB(23), PERIPH_A, 0); /* DATAN0 */
1555
1556 abdac0_pclk.dev = &pdev->dev;
1557 abdac0_sample_clk.dev = &pdev->dev;
1558
1559 platform_device_add(pdev);
1560 return pdev;
1561
1562err_add_resources:
1563 platform_device_put(pdev);
1564 return NULL;
1565}
1566
1567/* --------------------------------------------------------------------
1231 * GCLK 1568 * GCLK
1232 * -------------------------------------------------------------------- */ 1569 * -------------------------------------------------------------------- */
1233static struct clk gclk0 = { 1570static struct clk gclk0 = {
@@ -1290,6 +1627,7 @@ struct clk *at32_clock_list[] = {
1290 &smc0_mck, 1627 &smc0_mck,
1291 &pdc_hclk, 1628 &pdc_hclk,
1292 &pdc_pclk, 1629 &pdc_pclk,
1630 &dmaca0_hclk,
1293 &pico_clk, 1631 &pico_clk,
1294 &pio0_mck, 1632 &pio0_mck,
1295 &pio1_mck, 1633 &pio1_mck,
@@ -1307,6 +1645,8 @@ struct clk *at32_clock_list[] = {
1307 &macb1_pclk, 1645 &macb1_pclk,
1308 &atmel_spi0_spi_clk, 1646 &atmel_spi0_spi_clk,
1309 &atmel_spi1_spi_clk, 1647 &atmel_spi1_spi_clk,
1648 &atmel_twi0_pclk,
1649 &atmel_mci0_pclk,
1310 &atmel_lcdfb0_hck1, 1650 &atmel_lcdfb0_hck1,
1311 &atmel_lcdfb0_pixclk, 1651 &atmel_lcdfb0_pixclk,
1312 &ssc0_pclk, 1652 &ssc0_pclk,
@@ -1314,6 +1654,9 @@ struct clk *at32_clock_list[] = {
1314 &ssc2_pclk, 1654 &ssc2_pclk,
1315 &usba0_hclk, 1655 &usba0_hclk,
1316 &usba0_pclk, 1656 &usba0_pclk,
1657 &atmel_ac97c0_pclk,
1658 &abdac0_pclk,
1659 &abdac0_sample_clk,
1317 &gclk0, 1660 &gclk0,
1318 &gclk1, 1661 &gclk1,
1319 &gclk2, 1662 &gclk2,
@@ -1355,6 +1698,7 @@ void __init at32_clock_init(void)
1355 genclk_init_parent(&gclk3); 1698 genclk_init_parent(&gclk3);
1356 genclk_init_parent(&gclk4); 1699 genclk_init_parent(&gclk4);
1357 genclk_init_parent(&atmel_lcdfb0_pixclk); 1700 genclk_init_parent(&atmel_lcdfb0_pixclk);
1701 genclk_init_parent(&abdac0_sample_clk);
1358 1702
1359 /* 1703 /*
1360 * Turn on all clocks that have at least one user already, and 1704 * Turn on all clocks that have at least one user already, and
diff --git a/arch/avr32/mach-at32ap/extint.c b/arch/avr32/mach-at32ap/extint.c
index 8acd01090031..f5bfd4c81fe7 100644
--- a/arch/avr32/mach-at32ap/extint.c
+++ b/arch/avr32/mach-at32ap/extint.c
@@ -142,7 +142,7 @@ static int eic_set_irq_type(unsigned int irq, unsigned int flow_type)
142 return ret; 142 return ret;
143} 143}
144 144
145struct irq_chip eic_chip = { 145static struct irq_chip eic_chip = {
146 .name = "eic", 146 .name = "eic",
147 .ack = eic_ack_irq, 147 .ack = eic_ack_irq,
148 .mask = eic_mask_irq, 148 .mask = eic_mask_irq,
diff --git a/arch/avr32/mach-at32ap/pm.h b/arch/avr32/mach-at32ap/pm.h
index 47efd0d1951f..694d521edc2f 100644
--- a/arch/avr32/mach-at32ap/pm.h
+++ b/arch/avr32/mach-at32ap/pm.h
@@ -113,8 +113,8 @@
113 113
114/* Register access macros */ 114/* Register access macros */
115#define pm_readl(reg) \ 115#define pm_readl(reg) \
116 __raw_readl((void __iomem *)AT32_PM_BASE + PM_##reg) 116 __raw_readl((void __iomem __force *)AT32_PM_BASE + PM_##reg)
117#define pm_writel(reg,value) \ 117#define pm_writel(reg,value) \
118 __raw_writel((value), (void __iomem *)AT32_PM_BASE + PM_##reg) 118 __raw_writel((value), (void __iomem __force *)AT32_PM_BASE + PM_##reg)
119 119
120#endif /* __ARCH_AVR32_MACH_AT32AP_PM_H__ */ 120#endif /* __ARCH_AVR32_MACH_AT32AP_PM_H__ */
diff --git a/arch/avr32/mach-at32ap/time-tc.c b/arch/avr32/mach-at32ap/time-tc.c
index e3070bdd4bb9..10265863c982 100644
--- a/arch/avr32/mach-at32ap/time-tc.c
+++ b/arch/avr32/mach-at32ap/time-tc.c
@@ -79,7 +79,7 @@ static int avr32_timer_calc_div_and_set_jiffies(struct clk *pclk)
79{ 79{
80 unsigned int cycles_max = (clocksource_avr32.mask + 1) / 2; 80 unsigned int cycles_max = (clocksource_avr32.mask + 1) / 2;
81 unsigned int divs[] = { 4, 8, 16, 32 }; 81 unsigned int divs[] = { 4, 8, 16, 32 };
82 int divs_size = sizeof(divs) / sizeof(*divs); 82 int divs_size = ARRAY_SIZE(divs);
83 int i = 0; 83 int i = 0;
84 unsigned long count_hz; 84 unsigned long count_hz;
85 unsigned long shift; 85 unsigned long shift;
diff --git a/arch/m68knommu/Kconfig b/arch/m68knommu/Kconfig
index f52c627bdadd..f4b582cbb567 100644
--- a/arch/m68knommu/Kconfig
+++ b/arch/m68knommu/Kconfig
@@ -451,6 +451,12 @@ config MOD5272
451 help 451 help
452 Support for the Netburner MOD-5272 board. 452 Support for the Netburner MOD-5272 board.
453 453
454config SAVANTrosie1
455 bool "Savant Rosie1 board support"
456 depends on M523x
457 help
458 Support for the Savant Rosie1 board.
459
454config ROMFS_FROM_ROM 460config ROMFS_FROM_ROM
455 bool "ROMFS image not RAM resident" 461 bool "ROMFS image not RAM resident"
456 depends on (NETtel || SNAPGEAR) 462 depends on (NETtel || SNAPGEAR)
@@ -492,7 +498,12 @@ config SNEHA
492 bool 498 bool
493 default y 499 default y
494 depends on CPU16B 500 depends on CPU16B
495 501
502config SAVANT
503 bool
504 default y
505 depends on SAVANTrosie1
506
496config AVNET 507config AVNET
497 bool 508 bool
498 default y 509 default y
diff --git a/arch/m68knommu/Makefile b/arch/m68knommu/Makefile
index 92227aaaa26e..30aa2553693d 100644
--- a/arch/m68knommu/Makefile
+++ b/arch/m68knommu/Makefile
@@ -48,6 +48,7 @@ board-$(CONFIG_SNEHA) := SNEHA
48board-$(CONFIG_M5208EVB) := M5208EVB 48board-$(CONFIG_M5208EVB) := M5208EVB
49board-$(CONFIG_MOD5272) := MOD5272 49board-$(CONFIG_MOD5272) := MOD5272
50board-$(CONFIG_AVNET) := AVNET 50board-$(CONFIG_AVNET) := AVNET
51board-$(CONFIG_SAVANT) := SAVANT
51BOARD := $(board-y) 52BOARD := $(board-y)
52 53
53model-$(CONFIG_RAMKERNEL) := ram 54model-$(CONFIG_RAMKERNEL) := ram
@@ -117,4 +118,4 @@ core-y += arch/m68knommu/kernel/ \
117libs-y += arch/m68knommu/lib/ 118libs-y += arch/m68knommu/lib/
118 119
119archclean: 120archclean:
120 $(Q)$(MAKE) $(clean)=arch/m68knommu/boot 121
diff --git a/arch/m68knommu/defconfig b/arch/m68knommu/defconfig
index 3891de09ac23..5a0ecaaee3b0 100644
--- a/arch/m68knommu/defconfig
+++ b/arch/m68knommu/defconfig
@@ -1,41 +1,48 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.17 3# Linux kernel version: 2.6.23
4# Tue Jun 27 12:57:06 2006 4# Thu Oct 18 13:17:38 2007
5# 5#
6CONFIG_M68K=y 6CONFIG_M68K=y
7# CONFIG_MMU is not set 7# CONFIG_MMU is not set
8# CONFIG_FPU is not set 8# CONFIG_FPU is not set
9CONFIG_ZONE_DMA=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y 10CONFIG_RWSEM_GENERIC_SPINLOCK=y
10# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set 11# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
12# CONFIG_ARCH_HAS_ILOG2_U32 is not set
13# CONFIG_ARCH_HAS_ILOG2_U64 is not set
11CONFIG_GENERIC_FIND_NEXT_BIT=y 14CONFIG_GENERIC_FIND_NEXT_BIT=y
12CONFIG_GENERIC_HWEIGHT=y 15CONFIG_GENERIC_HWEIGHT=y
16CONFIG_GENERIC_HARDIRQS=y
13CONFIG_GENERIC_CALIBRATE_DELAY=y 17CONFIG_GENERIC_CALIBRATE_DELAY=y
14CONFIG_TIME_LOW_RES=y 18CONFIG_TIME_LOW_RES=y
19CONFIG_NO_IOPORT=y
20CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
15 21
16# 22#
17# Code maturity level options 23# General setup
18# 24#
19CONFIG_EXPERIMENTAL=y 25CONFIG_EXPERIMENTAL=y
20CONFIG_BROKEN_ON_SMP=y 26CONFIG_BROKEN_ON_SMP=y
21CONFIG_INIT_ENV_ARG_LIMIT=32 27CONFIG_INIT_ENV_ARG_LIMIT=32
22
23#
24# General setup
25#
26CONFIG_LOCALVERSION="" 28CONFIG_LOCALVERSION=""
27CONFIG_LOCALVERSION_AUTO=y 29CONFIG_LOCALVERSION_AUTO=y
28# CONFIG_SYSVIPC is not set 30# CONFIG_SYSVIPC is not set
29# CONFIG_POSIX_MQUEUE is not set 31# CONFIG_POSIX_MQUEUE is not set
30# CONFIG_BSD_PROCESS_ACCT is not set 32# CONFIG_BSD_PROCESS_ACCT is not set
31# CONFIG_SYSCTL is not set 33# CONFIG_TASKSTATS is not set
34# CONFIG_USER_NS is not set
32# CONFIG_AUDIT is not set 35# CONFIG_AUDIT is not set
33# CONFIG_IKCONFIG is not set 36# CONFIG_IKCONFIG is not set
37CONFIG_LOG_BUF_SHIFT=14
38# CONFIG_SYSFS_DEPRECATED is not set
34# CONFIG_RELAY is not set 39# CONFIG_RELAY is not set
35CONFIG_INITRAMFS_SOURCE="" 40# CONFIG_BLK_DEV_INITRD is not set
36CONFIG_UID16=y
37# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 41# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
42CONFIG_SYSCTL=y
38CONFIG_EMBEDDED=y 43CONFIG_EMBEDDED=y
44CONFIG_UID16=y
45CONFIG_SYSCTL_SYSCALL=y
39# CONFIG_KALLSYMS is not set 46# CONFIG_KALLSYMS is not set
40# CONFIG_HOTPLUG is not set 47# CONFIG_HOTPLUG is not set
41CONFIG_PRINTK=y 48CONFIG_PRINTK=y
@@ -44,20 +51,25 @@ CONFIG_ELF_CORE=y
44CONFIG_BASE_FULL=y 51CONFIG_BASE_FULL=y
45# CONFIG_FUTEX is not set 52# CONFIG_FUTEX is not set
46# CONFIG_EPOLL is not set 53# CONFIG_EPOLL is not set
54# CONFIG_SIGNALFD is not set
55# CONFIG_EVENTFD is not set
56# CONFIG_VM_EVENT_COUNTERS is not set
47CONFIG_SLAB=y 57CONFIG_SLAB=y
58# CONFIG_SLUB is not set
59# CONFIG_SLOB is not set
48CONFIG_TINY_SHMEM=y 60CONFIG_TINY_SHMEM=y
49CONFIG_BASE_SMALL=0 61CONFIG_BASE_SMALL=0
50# CONFIG_SLOB is not set 62CONFIG_MODULES=y
51 63CONFIG_MODULE_UNLOAD=y
52# 64# CONFIG_MODULE_FORCE_UNLOAD is not set
53# Loadable module support 65# CONFIG_MODVERSIONS is not set
54# 66# CONFIG_MODULE_SRCVERSION_ALL is not set
55# CONFIG_MODULES is not set 67# CONFIG_KMOD is not set
56 68CONFIG_BLOCK=y
57# 69# CONFIG_LBD is not set
58# Block layer
59#
60# CONFIG_BLK_DEV_IO_TRACE is not set 70# CONFIG_BLK_DEV_IO_TRACE is not set
71# CONFIG_LSF is not set
72# CONFIG_BLK_DEV_BSG is not set
61 73
62# 74#
63# IO Schedulers 75# IO Schedulers
@@ -99,6 +111,7 @@ CONFIG_CLOCK_DIV=1
99# 111#
100# Platform 112# Platform
101# 113#
114# CONFIG_UC5272 is not set
102CONFIG_M5272C3=y 115CONFIG_M5272C3=y
103# CONFIG_COBRA5272 is not set 116# CONFIG_COBRA5272 is not set
104# CONFIG_CANCam is not set 117# CONFIG_CANCam is not set
@@ -107,7 +120,6 @@ CONFIG_M5272C3=y
107# CONFIG_CPU16B is not set 120# CONFIG_CPU16B is not set
108# CONFIG_MOD5272 is not set 121# CONFIG_MOD5272 is not set
109CONFIG_FREESCALE=y 122CONFIG_FREESCALE=y
110# CONFIG_LARGE_ALLOCS is not set
111CONFIG_4KSTACKS=y 123CONFIG_4KSTACKS=y
112 124
113# 125#
@@ -121,6 +133,11 @@ CONFIG_RAMAUTOBIT=y
121# CONFIG_RAM8BIT is not set 133# CONFIG_RAM8BIT is not set
122# CONFIG_RAM16BIT is not set 134# CONFIG_RAM16BIT is not set
123# CONFIG_RAM32BIT is not set 135# CONFIG_RAM32BIT is not set
136
137#
138# ROM configuration
139#
140# CONFIG_ROM is not set
124CONFIG_RAMKERNEL=y 141CONFIG_RAMKERNEL=y
125# CONFIG_ROMKERNEL is not set 142# CONFIG_ROMKERNEL is not set
126CONFIG_SELECT_MEMORY_MODEL=y 143CONFIG_SELECT_MEMORY_MODEL=y
@@ -131,20 +148,19 @@ CONFIG_FLATMEM=y
131CONFIG_FLAT_NODE_MEM_MAP=y 148CONFIG_FLAT_NODE_MEM_MAP=y
132# CONFIG_SPARSEMEM_STATIC is not set 149# CONFIG_SPARSEMEM_STATIC is not set
133CONFIG_SPLIT_PTLOCK_CPUS=4 150CONFIG_SPLIT_PTLOCK_CPUS=4
151# CONFIG_RESOURCES_64BIT is not set
152CONFIG_ZONE_DMA_FLAG=1
153CONFIG_VIRT_TO_BUS=y
134 154
135# 155#
136# Bus options (PCI, PCMCIA, EISA, MCA, ISA) 156# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
137# 157#
138# CONFIG_PCI is not set 158# CONFIG_PCI is not set
159# CONFIG_ARCH_SUPPORTS_MSI is not set
139 160
140# 161#
141# PCCARD (PCMCIA/CardBus) support 162# PCCARD (PCMCIA/CardBus) support
142# 163#
143# CONFIG_PCCARD is not set
144
145#
146# PCI Hotplug Support
147#
148 164
149# 165#
150# Executable file formats 166# Executable file formats
@@ -168,7 +184,6 @@ CONFIG_NET=y
168# 184#
169# Networking options 185# Networking options
170# 186#
171# CONFIG_NETDEBUG is not set
172CONFIG_PACKET=y 187CONFIG_PACKET=y
173# CONFIG_PACKET_MMAP is not set 188# CONFIG_PACKET_MMAP is not set
174CONFIG_UNIX=y 189CONFIG_UNIX=y
@@ -187,27 +202,21 @@ CONFIG_IP_FIB_HASH=y
187# CONFIG_INET_IPCOMP is not set 202# CONFIG_INET_IPCOMP is not set
188# CONFIG_INET_XFRM_TUNNEL is not set 203# CONFIG_INET_XFRM_TUNNEL is not set
189# CONFIG_INET_TUNNEL is not set 204# CONFIG_INET_TUNNEL is not set
205# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
206# CONFIG_INET_XFRM_MODE_TUNNEL is not set
207# CONFIG_INET_XFRM_MODE_BEET is not set
190# CONFIG_INET_DIAG is not set 208# CONFIG_INET_DIAG is not set
191# CONFIG_TCP_CONG_ADVANCED is not set 209# CONFIG_TCP_CONG_ADVANCED is not set
192CONFIG_TCP_CONG_BIC=y 210CONFIG_TCP_CONG_CUBIC=y
211CONFIG_DEFAULT_TCP_CONG="cubic"
212# CONFIG_TCP_MD5SIG is not set
193# CONFIG_IPV6 is not set 213# CONFIG_IPV6 is not set
194# CONFIG_INET6_XFRM_TUNNEL is not set 214# CONFIG_INET6_XFRM_TUNNEL is not set
195# CONFIG_INET6_TUNNEL is not set 215# CONFIG_INET6_TUNNEL is not set
216# CONFIG_NETWORK_SECMARK is not set
196# CONFIG_NETFILTER is not set 217# CONFIG_NETFILTER is not set
197
198#
199# DCCP Configuration (EXPERIMENTAL)
200#
201# CONFIG_IP_DCCP is not set 218# CONFIG_IP_DCCP is not set
202
203#
204# SCTP Configuration (EXPERIMENTAL)
205#
206# CONFIG_IP_SCTP is not set 219# CONFIG_IP_SCTP is not set
207
208#
209# TIPC Configuration (EXPERIMENTAL)
210#
211# CONFIG_TIPC is not set 220# CONFIG_TIPC is not set
212# CONFIG_ATM is not set 221# CONFIG_ATM is not set
213# CONFIG_BRIDGE is not set 222# CONFIG_BRIDGE is not set
@@ -218,7 +227,6 @@ CONFIG_TCP_CONG_BIC=y
218# CONFIG_ATALK is not set 227# CONFIG_ATALK is not set
219# CONFIG_X25 is not set 228# CONFIG_X25 is not set
220# CONFIG_LAPB is not set 229# CONFIG_LAPB is not set
221# CONFIG_NET_DIVERT is not set
222# CONFIG_ECONET is not set 230# CONFIG_ECONET is not set
223# CONFIG_WAN_ROUTER is not set 231# CONFIG_WAN_ROUTER is not set
224 232
@@ -234,7 +242,17 @@ CONFIG_TCP_CONG_BIC=y
234# CONFIG_HAMRADIO is not set 242# CONFIG_HAMRADIO is not set
235# CONFIG_IRDA is not set 243# CONFIG_IRDA is not set
236# CONFIG_BT is not set 244# CONFIG_BT is not set
245# CONFIG_AF_RXRPC is not set
246
247#
248# Wireless
249#
250# CONFIG_CFG80211 is not set
251# CONFIG_WIRELESS_EXT is not set
252# CONFIG_MAC80211 is not set
237# CONFIG_IEEE80211 is not set 253# CONFIG_IEEE80211 is not set
254# CONFIG_RFKILL is not set
255# CONFIG_NET_9P is not set
238 256
239# 257#
240# Device Drivers 258# Device Drivers
@@ -245,16 +263,8 @@ CONFIG_TCP_CONG_BIC=y
245# 263#
246CONFIG_STANDALONE=y 264CONFIG_STANDALONE=y
247CONFIG_PREVENT_FIRMWARE_BUILD=y 265CONFIG_PREVENT_FIRMWARE_BUILD=y
248# CONFIG_FW_LOADER is not set 266# CONFIG_SYS_HYPERVISOR is not set
249
250#
251# Connector - unified userspace <-> kernelspace linker
252#
253# CONFIG_CONNECTOR is not set 267# CONFIG_CONNECTOR is not set
254
255#
256# Memory Technology Devices (MTD)
257#
258CONFIG_MTD=y 268CONFIG_MTD=y
259# CONFIG_MTD_DEBUG is not set 269# CONFIG_MTD_DEBUG is not set
260# CONFIG_MTD_CONCAT is not set 270# CONFIG_MTD_CONCAT is not set
@@ -266,11 +276,13 @@ CONFIG_MTD_PARTITIONS=y
266# User Modules And Translation Layers 276# User Modules And Translation Layers
267# 277#
268CONFIG_MTD_CHAR=y 278CONFIG_MTD_CHAR=y
279CONFIG_MTD_BLKDEVS=y
269CONFIG_MTD_BLOCK=y 280CONFIG_MTD_BLOCK=y
270# CONFIG_FTL is not set 281# CONFIG_FTL is not set
271# CONFIG_NFTL is not set 282# CONFIG_NFTL is not set
272# CONFIG_INFTL is not set 283# CONFIG_INFTL is not set
273# CONFIG_RFD_FTL is not set 284# CONFIG_RFD_FTL is not set
285# CONFIG_SSFDC is not set
274 286
275# 287#
276# RAM/ROM/Flash chip drivers 288# RAM/ROM/Flash chip drivers
@@ -290,7 +302,6 @@ CONFIG_MTD_CFI_I2=y
290CONFIG_MTD_RAM=y 302CONFIG_MTD_RAM=y
291# CONFIG_MTD_ROM is not set 303# CONFIG_MTD_ROM is not set
292# CONFIG_MTD_ABSENT is not set 304# CONFIG_MTD_ABSENT is not set
293# CONFIG_MTD_OBSOLETE_CHIPS is not set
294 305
295# 306#
296# Mapping drivers for chip access 307# Mapping drivers for chip access
@@ -313,42 +324,25 @@ CONFIG_MTD_UCLINUX=y
313# CONFIG_MTD_DOC2000 is not set 324# CONFIG_MTD_DOC2000 is not set
314# CONFIG_MTD_DOC2001 is not set 325# CONFIG_MTD_DOC2001 is not set
315# CONFIG_MTD_DOC2001PLUS is not set 326# CONFIG_MTD_DOC2001PLUS is not set
316
317#
318# NAND Flash Device Drivers
319#
320# CONFIG_MTD_NAND is not set 327# CONFIG_MTD_NAND is not set
321
322#
323# OneNAND Flash Device Drivers
324#
325# CONFIG_MTD_ONENAND is not set 328# CONFIG_MTD_ONENAND is not set
326 329
327# 330#
328# Parallel port support 331# UBI - Unsorted block images
329# 332#
333# CONFIG_MTD_UBI is not set
330# CONFIG_PARPORT is not set 334# CONFIG_PARPORT is not set
331 335CONFIG_BLK_DEV=y
332#
333# Plug and Play support
334#
335
336#
337# Block devices
338#
339# CONFIG_BLK_DEV_COW_COMMON is not set 336# CONFIG_BLK_DEV_COW_COMMON is not set
340# CONFIG_BLK_DEV_LOOP is not set 337# CONFIG_BLK_DEV_LOOP is not set
341# CONFIG_BLK_DEV_NBD is not set 338# CONFIG_BLK_DEV_NBD is not set
342CONFIG_BLK_DEV_RAM=y 339CONFIG_BLK_DEV_RAM=y
343CONFIG_BLK_DEV_RAM_COUNT=16 340CONFIG_BLK_DEV_RAM_COUNT=16
344CONFIG_BLK_DEV_RAM_SIZE=4096 341CONFIG_BLK_DEV_RAM_SIZE=4096
345# CONFIG_BLK_DEV_INITRD is not set 342CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
346# CONFIG_CDROM_PKTCDVD is not set 343# CONFIG_CDROM_PKTCDVD is not set
347# CONFIG_ATA_OVER_ETH is not set 344# CONFIG_ATA_OVER_ETH is not set
348 345# CONFIG_MISC_DEVICES is not set
349#
350# ATA/ATAPI/MFM/RLL support
351#
352# CONFIG_IDE is not set 346# CONFIG_IDE is not set
353 347
354# 348#
@@ -356,67 +350,29 @@ CONFIG_BLK_DEV_RAM_SIZE=4096
356# 350#
357# CONFIG_RAID_ATTRS is not set 351# CONFIG_RAID_ATTRS is not set
358# CONFIG_SCSI is not set 352# CONFIG_SCSI is not set
359 353# CONFIG_SCSI_DMA is not set
360# 354# CONFIG_SCSI_NETLINK is not set
361# Multi-device support (RAID and LVM)
362#
363# CONFIG_MD is not set 355# CONFIG_MD is not set
364
365#
366# Fusion MPT device support
367#
368# CONFIG_FUSION is not set
369
370#
371# IEEE 1394 (FireWire) support
372#
373
374#
375# I2O device support
376#
377
378#
379# Network device support
380#
381CONFIG_NETDEVICES=y 356CONFIG_NETDEVICES=y
357# CONFIG_NETDEVICES_MULTIQUEUE is not set
382# CONFIG_DUMMY is not set 358# CONFIG_DUMMY is not set
383# CONFIG_BONDING is not set 359# CONFIG_BONDING is not set
360# CONFIG_MACVLAN is not set
384# CONFIG_EQUALIZER is not set 361# CONFIG_EQUALIZER is not set
385# CONFIG_TUN is not set 362# CONFIG_TUN is not set
386
387#
388# PHY device support
389#
390# CONFIG_PHYLIB is not set 363# CONFIG_PHYLIB is not set
391
392#
393# Ethernet (10 or 100Mbit)
394#
395CONFIG_NET_ETHERNET=y 364CONFIG_NET_ETHERNET=y
396# CONFIG_MII is not set 365# CONFIG_MII is not set
397CONFIG_FEC=y 366CONFIG_FEC=y
398# CONFIG_FEC2 is not set 367# CONFIG_FEC2 is not set
368# CONFIG_NETDEV_1000 is not set
369# CONFIG_NETDEV_10000 is not set
399 370
400# 371#
401# Ethernet (1000 Mbit) 372# Wireless LAN
402#
403
404#
405# Ethernet (10000 Mbit)
406#
407
408#
409# Token Ring devices
410#
411
412#
413# Wireless LAN (non-hamradio)
414#
415# CONFIG_NET_RADIO is not set
416
417#
418# Wan interfaces
419# 373#
374# CONFIG_WLAN_PRE80211 is not set
375# CONFIG_WLAN_80211 is not set
420# CONFIG_WAN is not set 376# CONFIG_WAN is not set
421CONFIG_PPP=y 377CONFIG_PPP=y
422# CONFIG_PPP_MULTILINK is not set 378# CONFIG_PPP_MULTILINK is not set
@@ -427,20 +383,14 @@ CONFIG_PPP=y
427# CONFIG_PPP_BSDCOMP is not set 383# CONFIG_PPP_BSDCOMP is not set
428# CONFIG_PPP_MPPE is not set 384# CONFIG_PPP_MPPE is not set
429# CONFIG_PPPOE is not set 385# CONFIG_PPPOE is not set
386# CONFIG_PPPOL2TP is not set
430# CONFIG_SLIP is not set 387# CONFIG_SLIP is not set
388CONFIG_SLHC=y
431# CONFIG_SHAPER is not set 389# CONFIG_SHAPER is not set
432# CONFIG_NETCONSOLE is not set 390# CONFIG_NETCONSOLE is not set
433# CONFIG_NETPOLL is not set 391# CONFIG_NETPOLL is not set
434# CONFIG_NET_POLL_CONTROLLER is not set 392# CONFIG_NET_POLL_CONTROLLER is not set
435
436#
437# ISDN subsystem
438#
439# CONFIG_ISDN is not set 393# CONFIG_ISDN is not set
440
441#
442# Telephony Support
443#
444# CONFIG_PHONE is not set 394# CONFIG_PHONE is not set
445 395
446# 396#
@@ -472,34 +422,13 @@ CONFIG_SERIAL_COLDFIRE=y
472# CONFIG_UNIX98_PTYS is not set 422# CONFIG_UNIX98_PTYS is not set
473CONFIG_LEGACY_PTYS=y 423CONFIG_LEGACY_PTYS=y
474CONFIG_LEGACY_PTY_COUNT=256 424CONFIG_LEGACY_PTY_COUNT=256
475
476#
477# IPMI
478#
479# CONFIG_IPMI_HANDLER is not set 425# CONFIG_IPMI_HANDLER is not set
480
481#
482# Watchdog Cards
483#
484# CONFIG_WATCHDOG is not set 426# CONFIG_WATCHDOG is not set
427# CONFIG_HW_RANDOM is not set
485# CONFIG_GEN_RTC is not set 428# CONFIG_GEN_RTC is not set
486# CONFIG_DTLK is not set
487# CONFIG_R3964 is not set 429# CONFIG_R3964 is not set
488
489#
490# Ftape, the floppy tape device driver
491#
492# CONFIG_RAW_DRIVER is not set 430# CONFIG_RAW_DRIVER is not set
493
494#
495# TPM devices
496#
497# CONFIG_TCG_TPM is not set 431# CONFIG_TCG_TPM is not set
498# CONFIG_TELCLOCK is not set
499
500#
501# I2C support
502#
503# CONFIG_I2C is not set 432# CONFIG_I2C is not set
504 433
505# 434#
@@ -507,101 +436,74 @@ CONFIG_LEGACY_PTY_COUNT=256
507# 436#
508# CONFIG_SPI is not set 437# CONFIG_SPI is not set
509# CONFIG_SPI_MASTER is not set 438# CONFIG_SPI_MASTER is not set
510
511#
512# Dallas's 1-wire bus
513#
514# CONFIG_W1 is not set 439# CONFIG_W1 is not set
515 440# CONFIG_POWER_SUPPLY is not set
516#
517# Hardware Monitoring support
518#
519# CONFIG_HWMON is not set 441# CONFIG_HWMON is not set
520# CONFIG_HWMON_VID is not set
521 442
522# 443#
523# Misc devices 444# Multifunction device drivers
524# 445#
446# CONFIG_MFD_SM501 is not set
525 447
526# 448#
527# Multimedia devices 449# Multimedia devices
528# 450#
529# CONFIG_VIDEO_DEV is not set 451# CONFIG_VIDEO_DEV is not set
530CONFIG_VIDEO_V4L2=y 452# CONFIG_DVB_CORE is not set
453CONFIG_DAB=y
531 454
532# 455#
533# Digital Video Broadcasting Devices 456# Graphics support
534# 457#
535# CONFIG_DVB is not set 458# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
536 459
537# 460#
538# Graphics support 461# Display device support
539# 462#
463# CONFIG_DISPLAY_SUPPORT is not set
464# CONFIG_VGASTATE is not set
465CONFIG_VIDEO_OUTPUT_CONTROL=y
540# CONFIG_FB is not set 466# CONFIG_FB is not set
541 467
542# 468#
543# Sound 469# Sound
544# 470#
545# CONFIG_SOUND is not set 471# CONFIG_SOUND is not set
546 472# CONFIG_USB_SUPPORT is not set
547#
548# USB support
549#
550# CONFIG_USB_ARCH_HAS_HCD is not set
551# CONFIG_USB_ARCH_HAS_OHCI is not set
552# CONFIG_USB_ARCH_HAS_EHCI is not set
553
554#
555# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
556#
557
558#
559# USB Gadget Support
560#
561# CONFIG_USB_GADGET is not set
562
563#
564# MMC/SD Card support
565#
566# CONFIG_MMC is not set 473# CONFIG_MMC is not set
567
568#
569# LED devices
570#
571# CONFIG_NEW_LEDS is not set 474# CONFIG_NEW_LEDS is not set
475# CONFIG_RTC_CLASS is not set
572 476
573# 477#
574# LED drivers 478# DMA Engine support
575# 479#
480# CONFIG_DMA_ENGINE is not set
576 481
577# 482#
578# LED Triggers 483# DMA Clients
579# 484#
580 485
581# 486#
582# InfiniBand support 487# DMA Devices
583# 488#
584 489
585# 490#
586# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) 491# Userspace I/O
587# 492#
588 493# CONFIG_UIO is not set
589#
590# Real Time Clock
591#
592# CONFIG_RTC_CLASS is not set
593 494
594# 495#
595# File systems 496# File systems
596# 497#
597CONFIG_EXT2_FS=y 498CONFIG_EXT2_FS=y
598# CONFIG_EXT2_FS_XATTR is not set 499# CONFIG_EXT2_FS_XATTR is not set
599# CONFIG_EXT2_FS_XIP is not set
600# CONFIG_EXT3_FS is not set 500# CONFIG_EXT3_FS is not set
501# CONFIG_EXT4DEV_FS is not set
601# CONFIG_REISERFS_FS is not set 502# CONFIG_REISERFS_FS is not set
602# CONFIG_JFS_FS is not set 503# CONFIG_JFS_FS is not set
603# CONFIG_FS_POSIX_ACL is not set 504# CONFIG_FS_POSIX_ACL is not set
604# CONFIG_XFS_FS is not set 505# CONFIG_XFS_FS is not set
506# CONFIG_GFS2_FS is not set
605# CONFIG_OCFS2_FS is not set 507# CONFIG_OCFS2_FS is not set
606# CONFIG_MINIX_FS is not set 508# CONFIG_MINIX_FS is not set
607CONFIG_ROMFS_FS=y 509CONFIG_ROMFS_FS=y
@@ -629,6 +531,7 @@ CONFIG_ROMFS_FS=y
629# Pseudo filesystems 531# Pseudo filesystems
630# 532#
631CONFIG_PROC_FS=y 533CONFIG_PROC_FS=y
534CONFIG_PROC_SYSCTL=y
632CONFIG_SYSFS=y 535CONFIG_SYSFS=y
633# CONFIG_TMPFS is not set 536# CONFIG_TMPFS is not set
634# CONFIG_HUGETLB_PAGE is not set 537# CONFIG_HUGETLB_PAGE is not set
@@ -645,7 +548,6 @@ CONFIG_RAMFS=y
645# CONFIG_BEFS_FS is not set 548# CONFIG_BEFS_FS is not set
646# CONFIG_BFS_FS is not set 549# CONFIG_BFS_FS is not set
647# CONFIG_EFS_FS is not set 550# CONFIG_EFS_FS is not set
648# CONFIG_JFFS_FS is not set
649# CONFIG_JFFS2_FS is not set 551# CONFIG_JFFS2_FS is not set
650# CONFIG_CRAMFS is not set 552# CONFIG_CRAMFS is not set
651# CONFIG_VXFS_FS is not set 553# CONFIG_VXFS_FS is not set
@@ -664,7 +566,6 @@ CONFIG_RAMFS=y
664# CONFIG_NCP_FS is not set 566# CONFIG_NCP_FS is not set
665# CONFIG_CODA_FS is not set 567# CONFIG_CODA_FS is not set
666# CONFIG_AFS_FS is not set 568# CONFIG_AFS_FS is not set
667# CONFIG_9P_FS is not set
668 569
669# 570#
670# Partition Types 571# Partition Types
@@ -678,15 +579,21 @@ CONFIG_MSDOS_PARTITION=y
678# CONFIG_NLS is not set 579# CONFIG_NLS is not set
679 580
680# 581#
582# Distributed Lock Manager
583#
584# CONFIG_DLM is not set
585
586#
681# Kernel hacking 587# Kernel hacking
682# 588#
683# CONFIG_PRINTK_TIME is not set 589# CONFIG_PRINTK_TIME is not set
590# CONFIG_ENABLE_MUST_CHECK is not set
684# CONFIG_MAGIC_SYSRQ is not set 591# CONFIG_MAGIC_SYSRQ is not set
592# CONFIG_UNUSED_SYMBOLS is not set
593# CONFIG_DEBUG_FS is not set
594# CONFIG_HEADERS_CHECK is not set
685# CONFIG_DEBUG_KERNEL is not set 595# CONFIG_DEBUG_KERNEL is not set
686CONFIG_LOG_BUF_SHIFT=14
687# CONFIG_DEBUG_BUGVERBOSE is not set 596# CONFIG_DEBUG_BUGVERBOSE is not set
688# CONFIG_DEBUG_FS is not set
689# CONFIG_UNWIND_INFO is not set
690# CONFIG_FULLDEBUG is not set 597# CONFIG_FULLDEBUG is not set
691# CONFIG_HIGHPROFILE is not set 598# CONFIG_HIGHPROFILE is not set
692# CONFIG_BOOTPARAM is not set 599# CONFIG_BOOTPARAM is not set
@@ -699,20 +606,16 @@ CONFIG_LOG_BUF_SHIFT=14
699# 606#
700# CONFIG_KEYS is not set 607# CONFIG_KEYS is not set
701# CONFIG_SECURITY is not set 608# CONFIG_SECURITY is not set
702
703#
704# Cryptographic options
705#
706# CONFIG_CRYPTO is not set 609# CONFIG_CRYPTO is not set
707 610
708# 611#
709# Hardware crypto devices
710#
711
712#
713# Library routines 612# Library routines
714# 613#
715# CONFIG_CRC_CCITT is not set 614# CONFIG_CRC_CCITT is not set
716# CONFIG_CRC16 is not set 615# CONFIG_CRC16 is not set
616# CONFIG_CRC_ITU_T is not set
717# CONFIG_CRC32 is not set 617# CONFIG_CRC32 is not set
618# CONFIG_CRC7 is not set
718# CONFIG_LIBCRC32C is not set 619# CONFIG_LIBCRC32C is not set
620CONFIG_HAS_IOMEM=y
621CONFIG_HAS_DMA=y
diff --git a/arch/m68knommu/kernel/setup.c b/arch/m68knommu/kernel/setup.c
index 3f86ade3a22a..74bf94948ec2 100644
--- a/arch/m68knommu/kernel/setup.c
+++ b/arch/m68knommu/kernel/setup.c
@@ -151,27 +151,15 @@ void setup_arch(char **cmdline_p)
151#ifdef CONFIG_ELITE 151#ifdef CONFIG_ELITE
152 printk(KERN_INFO "Modified for M5206eLITE by Rob Scott, rscott@mtrob.fdns.net\n"); 152 printk(KERN_INFO "Modified for M5206eLITE by Rob Scott, rscott@mtrob.fdns.net\n");
153#endif 153#endif
154#ifdef CONFIG_TELOS
155 printk(KERN_INFO "Modified for Omnia ToolVox by James D. Schettine, james@telos-systems.com\n");
156#endif
157#endif 154#endif
158 printk(KERN_INFO "Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne\n"); 155 printk(KERN_INFO "Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne\n");
159 156
160#if defined( CONFIG_PILOT ) && defined( CONFIG_M68328 ) 157#if defined( CONFIG_PILOT ) && defined( CONFIG_M68328 )
161 printk(KERN_INFO "TRG SuperPilot FLASH card support <info@trgnet.com>\n"); 158 printk(KERN_INFO "TRG SuperPilot FLASH card support <info@trgnet.com>\n");
162#endif 159#endif
163
164#if defined( CONFIG_PILOT ) && defined( CONFIG_M68EZ328 ) 160#if defined( CONFIG_PILOT ) && defined( CONFIG_M68EZ328 )
165 printk(KERN_INFO "PalmV support by Lineo Inc. <jeff@uclinux.com>\n"); 161 printk(KERN_INFO "PalmV support by Lineo Inc. <jeff@uclinux.com>\n");
166#endif 162#endif
167
168#ifdef CONFIG_M68EZ328ADS
169 printk(KERN_INFO "M68EZ328ADS board support (C) 1999 Vladimir Gurevich <vgurevic@cisco.com>\n");
170#endif
171
172#ifdef CONFIG_ALMA_ANS
173 printk(KERN_INFO "Alma Electronics board support (C) 1999 Vladimir Gurevich <vgurevic@cisco.com>\n");
174#endif
175#if defined (CONFIG_M68360) 163#if defined (CONFIG_M68360)
176 printk(KERN_INFO "QUICC port done by SED Systems <hamilton@sedsystems.ca>,\n"); 164 printk(KERN_INFO "QUICC port done by SED Systems <hamilton@sedsystems.ca>,\n");
177 printk(KERN_INFO "based on 2.0.38 port by Lineo Inc. <mleslie@lineo.com>.\n"); 165 printk(KERN_INFO "based on 2.0.38 port by Lineo Inc. <mleslie@lineo.com>.\n");
@@ -188,11 +176,9 @@ void setup_arch(char **cmdline_p)
188 "BSS=0x%06x-0x%06x\n", (int) &_stext, (int) &_etext, 176 "BSS=0x%06x-0x%06x\n", (int) &_stext, (int) &_etext,
189 (int) &_sdata, (int) &_edata, 177 (int) &_sdata, (int) &_edata,
190 (int) &_sbss, (int) &_ebss); 178 (int) &_sbss, (int) &_ebss);
191 printk(KERN_DEBUG "KERNEL -> ROMFS=0x%06x-0x%06x MEM=0x%06x-0x%06x " 179 printk(KERN_DEBUG "MEMORY -> ROMFS=0x%06x-0x%06x MEM=0x%06x-0x%06x\n ",
192 "STACK=0x%06x-0x%06x\n",
193 (int) &_ebss, (int) memory_start, 180 (int) &_ebss, (int) memory_start,
194 (int) memory_start, (int) memory_end, 181 (int) memory_start, (int) memory_end);
195 (int) memory_end, (int) _ramend);
196#endif 182#endif
197 183
198 /* Keep a copy of command line */ 184 /* Keep a copy of command line */
@@ -287,12 +273,3 @@ struct seq_operations cpuinfo_op = {
287 .show = show_cpuinfo, 273 .show = show_cpuinfo,
288}; 274};
289 275
290void arch_gettod(int *year, int *mon, int *day, int *hour,
291 int *min, int *sec)
292{
293 if (mach_gettod)
294 mach_gettod(year, mon, day, hour, min, sec);
295 else
296 *year = *mon = *day = *hour = *min = *sec = 0;
297}
298
diff --git a/arch/m68knommu/kernel/signal.c b/arch/m68knommu/kernel/signal.c
index 437f8c6c14a0..70371378db86 100644
--- a/arch/m68knommu/kernel/signal.c
+++ b/arch/m68knommu/kernel/signal.c
@@ -781,15 +781,7 @@ asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs)
781 /* Did we come from a system call? */ 781 /* Did we come from a system call? */
782 if (regs->orig_d0 >= 0) { 782 if (regs->orig_d0 >= 0) {
783 /* Restart the system call - no handlers present */ 783 /* Restart the system call - no handlers present */
784 if (regs->d0 == -ERESTARTNOHAND 784 handle_restart(regs, NULL, 0);
785 || regs->d0 == -ERESTARTSYS
786 || regs->d0 == -ERESTARTNOINTR) {
787 regs->d0 = regs->orig_d0;
788 regs->pc -= 2;
789 } else if (regs->d0 == -ERESTART_RESTARTBLOCK) {
790 regs->d0 = __NR_restart_syscall;
791 regs->pc -= 2;
792 }
793 } 785 }
794 return 0; 786 return 0;
795} 787}
diff --git a/arch/m68knommu/kernel/time.c b/arch/m68knommu/kernel/time.c
index 467053da2d08..77e5375a2dd5 100644
--- a/arch/m68knommu/kernel/time.c
+++ b/arch/m68knommu/kernel/time.c
@@ -27,7 +27,6 @@
27 27
28#define TICK_SIZE (tick_nsec / 1000) 28#define TICK_SIZE (tick_nsec / 1000)
29 29
30
31static inline int set_rtc_mmss(unsigned long nowtime) 30static inline int set_rtc_mmss(unsigned long nowtime)
32{ 31{
33 if (mach_set_clock_mmss) 32 if (mach_set_clock_mmss)
@@ -39,15 +38,11 @@ static inline int set_rtc_mmss(unsigned long nowtime)
39 * timer_interrupt() needs to keep up the real-time clock, 38 * timer_interrupt() needs to keep up the real-time clock,
40 * as well as call the "do_timer()" routine every clocktick 39 * as well as call the "do_timer()" routine every clocktick
41 */ 40 */
42static irqreturn_t timer_interrupt(int irq, void *dummy) 41irqreturn_t arch_timer_interrupt(int irq, void *dummy)
43{ 42{
44 /* last time the cmos clock got updated */ 43 /* last time the cmos clock got updated */
45 static long last_rtc_update=0; 44 static long last_rtc_update=0;
46 45
47 /* may need to kick the hardware timer */
48 if (mach_tick)
49 mach_tick();
50
51 write_seqlock(&xtime_lock); 46 write_seqlock(&xtime_lock);
52 47
53 do_timer(1); 48 do_timer(1);
@@ -103,10 +98,10 @@ void time_init(void)
103{ 98{
104 unsigned int year, mon, day, hour, min, sec; 99 unsigned int year, mon, day, hour, min, sec;
105 100
106 extern void arch_gettod(int *year, int *mon, int *day, int *hour, 101 if (mach_gettod)
107 int *min, int *sec); 102 mach_gettod(&year, &mon, &day, &hour, &min, &sec);
108 103 else
109 arch_gettod(&year, &mon, &day, &hour, &min, &sec); 104 year = mon = day = hour = min = sec = 0;
110 105
111 if ((year += 1900) < 1970) 106 if ((year += 1900) < 1970)
112 year += 100; 107 year += 100;
@@ -114,7 +109,7 @@ void time_init(void)
114 xtime.tv_nsec = 0; 109 xtime.tv_nsec = 0;
115 wall_to_monotonic.tv_sec = -xtime.tv_sec; 110 wall_to_monotonic.tv_sec = -xtime.tv_sec;
116 111
117 mach_sched_init(timer_interrupt); 112 hw_timer_init();
118} 113}
119 114
120/* 115/*
@@ -128,7 +123,7 @@ void do_gettimeofday(struct timeval *tv)
128 123
129 do { 124 do {
130 seq = read_seqbegin_irqsave(&xtime_lock, flags); 125 seq = read_seqbegin_irqsave(&xtime_lock, flags);
131 usec = mach_gettimeoffset ? mach_gettimeoffset() : 0; 126 usec = hw_timer_offset();
132 sec = xtime.tv_sec; 127 sec = xtime.tv_sec;
133 usec += (xtime.tv_nsec / 1000); 128 usec += (xtime.tv_nsec / 1000);
134 } while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); 129 } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
@@ -160,8 +155,7 @@ int do_settimeofday(struct timespec *tv)
160 * Discover what correction gettimeofday 155 * Discover what correction gettimeofday
161 * would have done, and then undo it! 156 * would have done, and then undo it!
162 */ 157 */
163 if (mach_gettimeoffset) 158 nsec -= (hw_timer_offset() * 1000);
164 nsec -= (mach_gettimeoffset() * 1000);
165 159
166 wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); 160 wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
167 wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); 161 wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
diff --git a/arch/m68knommu/platform/5206/config.c b/arch/m68knommu/platform/5206/config.c
index d0f2dc5cb5a1..b3c4dd4cc135 100644
--- a/arch/m68knommu/platform/5206/config.c
+++ b/arch/m68knommu/platform/5206/config.c
@@ -10,13 +10,10 @@
10/***************************************************************************/ 10/***************************************************************************/
11 11
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/sched.h>
14#include <linux/param.h> 13#include <linux/param.h>
15#include <linux/init.h> 14#include <linux/init.h>
16#include <linux/interrupt.h> 15#include <linux/interrupt.h>
17#include <asm/irq.h>
18#include <asm/dma.h> 16#include <asm/dma.h>
19#include <asm/traps.h>
20#include <asm/machdep.h> 17#include <asm/machdep.h>
21#include <asm/coldfire.h> 18#include <asm/coldfire.h>
22#include <asm/mcftimer.h> 19#include <asm/mcftimer.h>
@@ -25,9 +22,6 @@
25 22
26/***************************************************************************/ 23/***************************************************************************/
27 24
28void coldfire_tick(void);
29void coldfire_timer_init(irq_handler_t handler);
30unsigned long coldfire_timer_offset(void);
31void coldfire_reset(void); 25void coldfire_reset(void);
32 26
33/***************************************************************************/ 27/***************************************************************************/
@@ -97,9 +91,6 @@ int mcf_timerirqpending(int timer)
97void config_BSP(char *commandp, int size) 91void config_BSP(char *commandp, int size)
98{ 92{
99 mcf_setimr(MCFSIM_IMR_MASKALL); 93 mcf_setimr(MCFSIM_IMR_MASKALL);
100 mach_sched_init = coldfire_timer_init;
101 mach_tick = coldfire_tick;
102 mach_gettimeoffset = coldfire_timer_offset;
103 mach_reset = coldfire_reset; 94 mach_reset = coldfire_reset;
104} 95}
105 96
diff --git a/arch/m68knommu/platform/5206e/config.c b/arch/m68knommu/platform/5206e/config.c
index 425703fb6cee..f84a4aea8cb6 100644
--- a/arch/m68knommu/platform/5206e/config.c
+++ b/arch/m68knommu/platform/5206e/config.c
@@ -9,23 +9,16 @@
9/***************************************************************************/ 9/***************************************************************************/
10 10
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/sched.h>
13#include <linux/param.h> 12#include <linux/param.h>
14#include <linux/interrupt.h> 13#include <linux/interrupt.h>
15#include <asm/irq.h>
16#include <asm/dma.h> 14#include <asm/dma.h>
17#include <asm/traps.h>
18#include <asm/machdep.h> 15#include <asm/machdep.h>
19#include <asm/coldfire.h> 16#include <asm/coldfire.h>
20#include <asm/mcftimer.h>
21#include <asm/mcfsim.h> 17#include <asm/mcfsim.h>
22#include <asm/mcfdma.h> 18#include <asm/mcfdma.h>
23 19
24/***************************************************************************/ 20/***************************************************************************/
25 21
26void coldfire_tick(void);
27void coldfire_timer_init(irq_handler_t handler);
28unsigned long coldfire_timer_offset(void);
29void coldfire_reset(void); 22void coldfire_reset(void);
30 23
31/***************************************************************************/ 24/***************************************************************************/
@@ -102,9 +95,6 @@ void config_BSP(char *commandp, int size)
102 commandp[size-1] = 0; 95 commandp[size-1] = 0;
103#endif /* CONFIG_NETtel */ 96#endif /* CONFIG_NETtel */
104 97
105 mach_sched_init = coldfire_timer_init;
106 mach_tick = coldfire_tick;
107 mach_gettimeoffset = coldfire_timer_offset;
108 mach_reset = coldfire_reset; 98 mach_reset = coldfire_reset;
109} 99}
110 100
diff --git a/arch/m68knommu/platform/520x/config.c b/arch/m68knommu/platform/520x/config.c
index a2c95bebd004..6edbd41261cc 100644
--- a/arch/m68knommu/platform/520x/config.c
+++ b/arch/m68knommu/platform/520x/config.c
@@ -27,9 +27,6 @@ unsigned int dma_device_address[MAX_M68K_DMA_CHANNELS];
27 27
28/***************************************************************************/ 28/***************************************************************************/
29 29
30void coldfire_pit_tick(void);
31void coldfire_pit_init(irq_handler_t handler);
32unsigned long coldfire_pit_offset(void);
33void coldfire_reset(void); 30void coldfire_reset(void);
34 31
35/***************************************************************************/ 32/***************************************************************************/
@@ -47,10 +44,7 @@ void mcf_autovector(unsigned int vec)
47 44
48void config_BSP(char *commandp, int size) 45void config_BSP(char *commandp, int size)
49{ 46{
50 mach_sched_init = coldfire_pit_init; 47 mach_reset = coldfire_reset;
51 mach_tick = coldfire_pit_tick;
52 mach_gettimeoffset = coldfire_pit_offset;
53 mach_reset = coldfire_reset;
54} 48}
55 49
56/***************************************************************************/ 50/***************************************************************************/
diff --git a/arch/m68knommu/platform/523x/config.c b/arch/m68knommu/platform/523x/config.c
index 0a3af05a434b..e7f80c8e8636 100644
--- a/arch/m68knommu/platform/523x/config.c
+++ b/arch/m68knommu/platform/523x/config.c
@@ -13,12 +13,10 @@
13/***************************************************************************/ 13/***************************************************************************/
14 14
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/sched.h>
17#include <linux/param.h> 16#include <linux/param.h>
18#include <linux/init.h> 17#include <linux/init.h>
19#include <linux/interrupt.h> 18#include <linux/interrupt.h>
20#include <asm/dma.h> 19#include <asm/dma.h>
21#include <asm/traps.h>
22#include <asm/machdep.h> 20#include <asm/machdep.h>
23#include <asm/coldfire.h> 21#include <asm/coldfire.h>
24#include <asm/mcfsim.h> 22#include <asm/mcfsim.h>
@@ -26,9 +24,6 @@
26 24
27/***************************************************************************/ 25/***************************************************************************/
28 26
29void coldfire_pit_tick(void);
30void coldfire_pit_init(irq_handler_t handler);
31unsigned long coldfire_pit_offset(void);
32void coldfire_reset(void); 27void coldfire_reset(void);
33 28
34/***************************************************************************/ 29/***************************************************************************/
@@ -62,9 +57,6 @@ void mcf_autovector(unsigned int vec)
62void config_BSP(char *commandp, int size) 57void config_BSP(char *commandp, int size)
63{ 58{
64 mcf_disableall(); 59 mcf_disableall();
65 mach_sched_init = coldfire_pit_init;
66 mach_tick = coldfire_pit_tick;
67 mach_gettimeoffset = coldfire_pit_offset;
68 mach_reset = coldfire_reset; 60 mach_reset = coldfire_reset;
69} 61}
70 62
diff --git a/arch/m68knommu/platform/5249/config.c b/arch/m68knommu/platform/5249/config.c
index dc2c362590c2..d4d39435cb15 100644
--- a/arch/m68knommu/platform/5249/config.c
+++ b/arch/m68knommu/platform/5249/config.c
@@ -9,24 +9,17 @@
9/***************************************************************************/ 9/***************************************************************************/
10 10
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/sched.h>
13#include <linux/param.h> 12#include <linux/param.h>
14#include <linux/init.h> 13#include <linux/init.h>
15#include <linux/interrupt.h> 14#include <linux/interrupt.h>
16#include <asm/irq.h>
17#include <asm/dma.h> 15#include <asm/dma.h>
18#include <asm/traps.h>
19#include <asm/machdep.h> 16#include <asm/machdep.h>
20#include <asm/coldfire.h> 17#include <asm/coldfire.h>
21#include <asm/mcftimer.h>
22#include <asm/mcfsim.h> 18#include <asm/mcfsim.h>
23#include <asm/mcfdma.h> 19#include <asm/mcfdma.h>
24 20
25/***************************************************************************/ 21/***************************************************************************/
26 22
27void coldfire_tick(void);
28void coldfire_timer_init(irq_handler_t handler);
29unsigned long coldfire_timer_offset(void);
30void coldfire_reset(void); 23void coldfire_reset(void);
31 24
32/***************************************************************************/ 25/***************************************************************************/
@@ -95,9 +88,6 @@ int mcf_timerirqpending(int timer)
95void config_BSP(char *commandp, int size) 88void config_BSP(char *commandp, int size)
96{ 89{
97 mcf_setimr(MCFSIM_IMR_MASKALL); 90 mcf_setimr(MCFSIM_IMR_MASKALL);
98 mach_sched_init = coldfire_timer_init;
99 mach_tick = coldfire_tick;
100 mach_gettimeoffset = coldfire_timer_offset;
101 mach_reset = coldfire_reset; 91 mach_reset = coldfire_reset;
102} 92}
103 93
diff --git a/arch/m68knommu/platform/5272/config.c b/arch/m68knommu/platform/5272/config.c
index 1365a8300d5d..634a6375e4a5 100644
--- a/arch/m68knommu/platform/5272/config.c
+++ b/arch/m68knommu/platform/5272/config.c
@@ -10,24 +10,17 @@
10/***************************************************************************/ 10/***************************************************************************/
11 11
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/sched.h>
14#include <linux/param.h> 13#include <linux/param.h>
15#include <linux/init.h> 14#include <linux/init.h>
16#include <linux/interrupt.h> 15#include <linux/interrupt.h>
17#include <asm/irq.h>
18#include <asm/dma.h> 16#include <asm/dma.h>
19#include <asm/traps.h>
20#include <asm/machdep.h> 17#include <asm/machdep.h>
21#include <asm/coldfire.h> 18#include <asm/coldfire.h>
22#include <asm/mcftimer.h>
23#include <asm/mcfsim.h> 19#include <asm/mcfsim.h>
24#include <asm/mcfdma.h> 20#include <asm/mcfdma.h>
25 21
26/***************************************************************************/ 22/***************************************************************************/
27 23
28void coldfire_tick(void);
29void coldfire_timer_init(irq_handler_t handler);
30unsigned long coldfire_timer_offset(void);
31void coldfire_reset(void); 24void coldfire_reset(void);
32 25
33extern unsigned int mcf_timervector; 26extern unsigned int mcf_timervector;
@@ -128,9 +121,6 @@ void config_BSP(char *commandp, int size)
128 121
129 mcf_timervector = 69; 122 mcf_timervector = 69;
130 mcf_profilevector = 70; 123 mcf_profilevector = 70;
131 mach_sched_init = coldfire_timer_init;
132 mach_tick = coldfire_tick;
133 mach_gettimeoffset = coldfire_timer_offset;
134 mach_reset = coldfire_reset; 124 mach_reset = coldfire_reset;
135} 125}
136 126
diff --git a/arch/m68knommu/platform/527x/config.c b/arch/m68knommu/platform/527x/config.c
index 1b820441419a..9cbfbc68ae4f 100644
--- a/arch/m68knommu/platform/527x/config.c
+++ b/arch/m68knommu/platform/527x/config.c
@@ -13,12 +13,10 @@
13/***************************************************************************/ 13/***************************************************************************/
14 14
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/sched.h>
17#include <linux/param.h> 16#include <linux/param.h>
18#include <linux/init.h> 17#include <linux/init.h>
19#include <linux/interrupt.h> 18#include <linux/interrupt.h>
20#include <asm/dma.h> 19#include <asm/dma.h>
21#include <asm/traps.h>
22#include <asm/machdep.h> 20#include <asm/machdep.h>
23#include <asm/coldfire.h> 21#include <asm/coldfire.h>
24#include <asm/mcfsim.h> 22#include <asm/mcfsim.h>
@@ -26,9 +24,6 @@
26 24
27/***************************************************************************/ 25/***************************************************************************/
28 26
29void coldfire_pit_tick(void);
30void coldfire_pit_init(irq_handler_t handler);
31unsigned long coldfire_pit_offset(void);
32void coldfire_reset(void); 27void coldfire_reset(void);
33 28
34/***************************************************************************/ 29/***************************************************************************/
@@ -62,9 +57,6 @@ void mcf_autovector(unsigned int vec)
62void config_BSP(char *commandp, int size) 57void config_BSP(char *commandp, int size)
63{ 58{
64 mcf_disableall(); 59 mcf_disableall();
65 mach_sched_init = coldfire_pit_init;
66 mach_tick = coldfire_pit_tick;
67 mach_gettimeoffset = coldfire_pit_offset;
68 mach_reset = coldfire_reset; 60 mach_reset = coldfire_reset;
69} 61}
70 62
diff --git a/arch/m68knommu/platform/528x/config.c b/arch/m68knommu/platform/528x/config.c
index a089e9513699..acbd43486d97 100644
--- a/arch/m68knommu/platform/528x/config.c
+++ b/arch/m68knommu/platform/528x/config.c
@@ -13,12 +13,10 @@
13/***************************************************************************/ 13/***************************************************************************/
14 14
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/sched.h>
17#include <linux/param.h> 16#include <linux/param.h>
18#include <linux/init.h> 17#include <linux/init.h>
19#include <linux/interrupt.h> 18#include <linux/interrupt.h>
20#include <asm/dma.h> 19#include <asm/dma.h>
21#include <asm/traps.h>
22#include <asm/machdep.h> 20#include <asm/machdep.h>
23#include <asm/coldfire.h> 21#include <asm/coldfire.h>
24#include <asm/mcfsim.h> 22#include <asm/mcfsim.h>
@@ -26,9 +24,6 @@
26 24
27/***************************************************************************/ 25/***************************************************************************/
28 26
29void coldfire_pit_tick(void);
30void coldfire_pit_init(irq_handler_t handler);
31unsigned long coldfire_pit_offset(void);
32void coldfire_reset(void); 27void coldfire_reset(void);
33 28
34/***************************************************************************/ 29/***************************************************************************/
@@ -62,9 +57,6 @@ void mcf_autovector(unsigned int vec)
62void config_BSP(char *commandp, int size) 57void config_BSP(char *commandp, int size)
63{ 58{
64 mcf_disableall(); 59 mcf_disableall();
65 mach_sched_init = coldfire_pit_init;
66 mach_tick = coldfire_pit_tick;
67 mach_gettimeoffset = coldfire_pit_offset;
68 mach_reset = coldfire_reset; 60 mach_reset = coldfire_reset;
69} 61}
70 62
diff --git a/arch/m68knommu/platform/5307/config.c b/arch/m68knommu/platform/5307/config.c
index e3461619fd65..6040821e637d 100644
--- a/arch/m68knommu/platform/5307/config.c
+++ b/arch/m68knommu/platform/5307/config.c
@@ -10,25 +10,18 @@
10/***************************************************************************/ 10/***************************************************************************/
11 11
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/sched.h>
14#include <linux/param.h> 13#include <linux/param.h>
15#include <linux/init.h> 14#include <linux/init.h>
16#include <linux/interrupt.h> 15#include <linux/interrupt.h>
17#include <asm/irq.h>
18#include <asm/dma.h> 16#include <asm/dma.h>
19#include <asm/traps.h>
20#include <asm/machdep.h> 17#include <asm/machdep.h>
21#include <asm/coldfire.h> 18#include <asm/coldfire.h>
22#include <asm/mcftimer.h>
23#include <asm/mcfsim.h> 19#include <asm/mcfsim.h>
24#include <asm/mcfdma.h> 20#include <asm/mcfdma.h>
25#include <asm/mcfwdebug.h> 21#include <asm/mcfwdebug.h>
26 22
27/***************************************************************************/ 23/***************************************************************************/
28 24
29void coldfire_tick(void);
30void coldfire_timer_init(irq_handler_t handler);
31unsigned long coldfire_timer_offset(void);
32void coldfire_reset(void); 25void coldfire_reset(void);
33 26
34extern unsigned int mcf_timervector; 27extern unsigned int mcf_timervector;
@@ -122,9 +115,6 @@ void config_BSP(char *commandp, int size)
122 mcf_timerlevel = 6; 115 mcf_timerlevel = 6;
123#endif 116#endif
124 117
125 mach_sched_init = coldfire_timer_init;
126 mach_tick = coldfire_tick;
127 mach_gettimeoffset = coldfire_timer_offset;
128 mach_reset = coldfire_reset; 118 mach_reset = coldfire_reset;
129 119
130#ifdef MCF_BDM_DISABLE 120#ifdef MCF_BDM_DISABLE
diff --git a/arch/m68knommu/platform/5307/entry.S b/arch/m68knommu/platform/5307/entry.S
index a8cd867805ca..b333731b875a 100644
--- a/arch/m68knommu/platform/5307/entry.S
+++ b/arch/m68knommu/platform/5307/entry.S
@@ -74,7 +74,8 @@ ENTRY(system_call)
74 movel %sp,%d2 /* get thread_info pointer */ 74 movel %sp,%d2 /* get thread_info pointer */
75 andl #-THREAD_SIZE,%d2 /* at start of kernel stack */ 75 andl #-THREAD_SIZE,%d2 /* at start of kernel stack */
76 movel %d2,%a0 76 movel %d2,%a0
77 movel %sp,%a0@(THREAD_ESP0) /* save top of frame */ 77 movel %a0@,%a1 /* save top of frame */
78 movel %sp,%a1@(TASK_THREAD+THREAD_ESP0)
78 btst #(TIF_SYSCALL_TRACE%8),%a0@(TI_FLAGS+(31-TIF_SYSCALL_TRACE)/8) 79 btst #(TIF_SYSCALL_TRACE%8),%a0@(TI_FLAGS+(31-TIF_SYSCALL_TRACE)/8)
79 bnes 1f 80 bnes 1f
80 81
@@ -83,6 +84,8 @@ ENTRY(system_call)
83 movel %d0,%sp@(PT_D0) /* save the return value */ 84 movel %d0,%sp@(PT_D0) /* save the return value */
84 jra ret_from_exception 85 jra ret_from_exception
851: 861:
87 movel #-ENOSYS,%d2 /* strace needs -ENOSYS in PT_D0 */
88 movel %d2,PT_D0(%sp) /* on syscall entry */
86 subql #4,%sp 89 subql #4,%sp
87 SAVE_SWITCH_STACK 90 SAVE_SWITCH_STACK
88 jbsr syscall_trace 91 jbsr syscall_trace
diff --git a/arch/m68knommu/platform/5307/pit.c b/arch/m68knommu/platform/5307/pit.c
index f18352fa35a6..173b754d1cda 100644
--- a/arch/m68knommu/platform/5307/pit.c
+++ b/arch/m68knommu/platform/5307/pit.c
@@ -17,6 +17,7 @@
17#include <linux/init.h> 17#include <linux/init.h>
18#include <linux/interrupt.h> 18#include <linux/interrupt.h>
19#include <linux/irq.h> 19#include <linux/irq.h>
20#include <asm/machdep.h>
20#include <asm/io.h> 21#include <asm/io.h>
21#include <asm/coldfire.h> 22#include <asm/coldfire.h>
22#include <asm/mcfpit.h> 23#include <asm/mcfpit.h>
@@ -31,28 +32,30 @@
31 32
32/***************************************************************************/ 33/***************************************************************************/
33 34
34void coldfire_pit_tick(void) 35static irqreturn_t hw_tick(int irq, void *dummy)
35{ 36{
36 unsigned short pcsr; 37 unsigned short pcsr;
37 38
38 /* Reset the ColdFire timer */ 39 /* Reset the ColdFire timer */
39 pcsr = __raw_readw(TA(MCFPIT_PCSR)); 40 pcsr = __raw_readw(TA(MCFPIT_PCSR));
40 __raw_writew(pcsr | MCFPIT_PCSR_PIF, TA(MCFPIT_PCSR)); 41 __raw_writew(pcsr | MCFPIT_PCSR_PIF, TA(MCFPIT_PCSR));
42
43 return arch_timer_interrupt(irq, dummy);
41} 44}
42 45
43/***************************************************************************/ 46/***************************************************************************/
44 47
45static struct irqaction coldfire_pit_irq = { 48static struct irqaction coldfire_pit_irq = {
46 .name = "timer", 49 .name = "timer",
47 .flags = IRQF_DISABLED | IRQF_TIMER, 50 .flags = IRQF_DISABLED | IRQF_TIMER,
51 .handler = hw_tick,
48}; 52};
49 53
50void coldfire_pit_init(irq_handler_t handler) 54void hw_timer_init(void)
51{ 55{
52 volatile unsigned char *icrp; 56 volatile unsigned char *icrp;
53 volatile unsigned long *imrp; 57 volatile unsigned long *imrp;
54 58
55 coldfire_pit_irq.handler = handler;
56 setup_irq(MCFINT_VECBASE + MCFINT_PIT1, &coldfire_pit_irq); 59 setup_irq(MCFINT_VECBASE + MCFINT_PIT1, &coldfire_pit_irq);
57 60
58 icrp = (volatile unsigned char *) (MCF_IPSBAR + MCFICM_INTC0 + 61 icrp = (volatile unsigned char *) (MCF_IPSBAR + MCFICM_INTC0 +
@@ -71,7 +74,7 @@ void coldfire_pit_init(irq_handler_t handler)
71 74
72/***************************************************************************/ 75/***************************************************************************/
73 76
74unsigned long coldfire_pit_offset(void) 77unsigned long hw_timer_offset(void)
75{ 78{
76 volatile unsigned long *ipr; 79 volatile unsigned long *ipr;
77 unsigned long pmr, pcntr, offset; 80 unsigned long pmr, pcntr, offset;
diff --git a/arch/m68knommu/platform/5307/timers.c b/arch/m68knommu/platform/5307/timers.c
index 64bd0ff9029e..489dec85c859 100644
--- a/arch/m68knommu/platform/5307/timers.c
+++ b/arch/m68knommu/platform/5307/timers.c
@@ -9,10 +9,9 @@
9/***************************************************************************/ 9/***************************************************************************/
10 10
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/init.h>
12#include <linux/sched.h> 13#include <linux/sched.h>
13#include <linux/param.h>
14#include <linux/interrupt.h> 14#include <linux/interrupt.h>
15#include <linux/init.h>
16#include <linux/irq.h> 15#include <linux/irq.h>
17#include <asm/io.h> 16#include <asm/io.h>
18#include <asm/traps.h> 17#include <asm/traps.h>
@@ -54,24 +53,28 @@ extern int mcf_timerirqpending(int timer);
54 53
55/***************************************************************************/ 54/***************************************************************************/
56 55
57void coldfire_tick(void) 56static irqreturn_t hw_tick(int irq, void *dummy)
58{ 57{
59 /* Reset the ColdFire timer */ 58 /* Reset the ColdFire timer */
60 __raw_writeb(MCFTIMER_TER_CAP | MCFTIMER_TER_REF, TA(MCFTIMER_TER)); 59 __raw_writeb(MCFTIMER_TER_CAP | MCFTIMER_TER_REF, TA(MCFTIMER_TER));
60
61 return arch_timer_interrupt(irq, dummy);
61} 62}
62 63
63/***************************************************************************/ 64/***************************************************************************/
64 65
65static struct irqaction coldfire_timer_irq = { 66static struct irqaction coldfire_timer_irq = {
66 .name = "timer", 67 .name = "timer",
67 .flags = IRQF_DISABLED | IRQF_TIMER, 68 .flags = IRQF_DISABLED | IRQF_TIMER,
69 .handler = hw_tick,
68}; 70};
69 71
72/***************************************************************************/
73
70static int ticks_per_intr; 74static int ticks_per_intr;
71 75
72void coldfire_timer_init(irq_handler_t handler) 76void hw_timer_init(void)
73{ 77{
74 coldfire_timer_irq.handler = handler;
75 setup_irq(mcf_timervector, &coldfire_timer_irq); 78 setup_irq(mcf_timervector, &coldfire_timer_irq);
76 79
77 __raw_writew(MCFTIMER_TMR_DISABLE, TA(MCFTIMER_TMR)); 80 __raw_writew(MCFTIMER_TMR_DISABLE, TA(MCFTIMER_TMR));
@@ -89,7 +92,7 @@ void coldfire_timer_init(irq_handler_t handler)
89 92
90/***************************************************************************/ 93/***************************************************************************/
91 94
92unsigned long coldfire_timer_offset(void) 95unsigned long hw_timer_offset(void)
93{ 96{
94 unsigned long tcn, offset; 97 unsigned long tcn, offset;
95 98
diff --git a/arch/m68knommu/platform/532x/config.c b/arch/m68knommu/platform/532x/config.c
index b32c6425f821..f77328b7b6db 100644
--- a/arch/m68knommu/platform/532x/config.c
+++ b/arch/m68knommu/platform/532x/config.c
@@ -18,25 +18,18 @@
18/***************************************************************************/ 18/***************************************************************************/
19 19
20#include <linux/kernel.h> 20#include <linux/kernel.h>
21#include <linux/sched.h>
22#include <linux/param.h> 21#include <linux/param.h>
23#include <linux/init.h> 22#include <linux/init.h>
24#include <linux/interrupt.h> 23#include <linux/interrupt.h>
25#include <asm/irq.h>
26#include <asm/dma.h> 24#include <asm/dma.h>
27#include <asm/traps.h>
28#include <asm/machdep.h> 25#include <asm/machdep.h>
29#include <asm/coldfire.h> 26#include <asm/coldfire.h>
30#include <asm/mcftimer.h>
31#include <asm/mcfsim.h> 27#include <asm/mcfsim.h>
32#include <asm/mcfdma.h> 28#include <asm/mcfdma.h>
33#include <asm/mcfwdebug.h> 29#include <asm/mcfwdebug.h>
34 30
35/***************************************************************************/ 31/***************************************************************************/
36 32
37void coldfire_tick(void);
38void coldfire_timer_init(irq_handler_t handler);
39unsigned long coldfire_timer_offset(void);
40void coldfire_reset(void); 33void coldfire_reset(void);
41 34
42extern unsigned int mcf_timervector; 35extern unsigned int mcf_timervector;
@@ -104,9 +97,6 @@ void config_BSP(char *commandp, int size)
104 97
105 mcf_timervector = 64+32; 98 mcf_timervector = 64+32;
106 mcf_profilevector = 64+33; 99 mcf_profilevector = 64+33;
107 mach_sched_init = coldfire_timer_init;
108 mach_tick = coldfire_tick;
109 mach_gettimeoffset = coldfire_timer_offset;
110 mach_reset = coldfire_reset; 100 mach_reset = coldfire_reset;
111 101
112#ifdef MCF_BDM_DISABLE 102#ifdef MCF_BDM_DISABLE
diff --git a/arch/m68knommu/platform/5407/config.c b/arch/m68knommu/platform/5407/config.c
index e692536817d8..2d3b62eba7ca 100644
--- a/arch/m68knommu/platform/5407/config.c
+++ b/arch/m68knommu/platform/5407/config.c
@@ -10,24 +10,17 @@
10/***************************************************************************/ 10/***************************************************************************/
11 11
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/sched.h>
14#include <linux/param.h> 13#include <linux/param.h>
15#include <linux/init.h> 14#include <linux/init.h>
16#include <linux/interrupt.h> 15#include <linux/interrupt.h>
17#include <asm/irq.h>
18#include <asm/dma.h> 16#include <asm/dma.h>
19#include <asm/traps.h>
20#include <asm/machdep.h> 17#include <asm/machdep.h>
21#include <asm/coldfire.h> 18#include <asm/coldfire.h>
22#include <asm/mcftimer.h>
23#include <asm/mcfsim.h> 19#include <asm/mcfsim.h>
24#include <asm/mcfdma.h> 20#include <asm/mcfdma.h>
25 21
26/***************************************************************************/ 22/***************************************************************************/
27 23
28void coldfire_tick(void);
29void coldfire_timer_init(irq_handler_t handler);
30unsigned long coldfire_timer_offset(void);
31void coldfire_reset(void); 24void coldfire_reset(void);
32 25
33extern unsigned int mcf_timervector; 26extern unsigned int mcf_timervector;
@@ -108,9 +101,6 @@ void config_BSP(char *commandp, int size)
108 mcf_timerlevel = 6; 101 mcf_timerlevel = 6;
109#endif 102#endif
110 103
111 mach_sched_init = coldfire_timer_init;
112 mach_tick = coldfire_tick;
113 mach_gettimeoffset = coldfire_timer_offset;
114 mach_reset = coldfire_reset; 104 mach_reset = coldfire_reset;
115} 105}
116 106
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
index b0b034c4654f..b1b40527658b 100644
--- a/arch/mips/mm/dma-default.c
+++ b/arch/mips/mm/dma-default.c
@@ -13,6 +13,7 @@
13#include <linux/mm.h> 13#include <linux/mm.h>
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/string.h> 15#include <linux/string.h>
16#include <linux/scatterlist.h>
16 17
17#include <asm/cache.h> 18#include <asm/cache.h>
18#include <asm/io.h> 19#include <asm/io.h>
diff --git a/arch/parisc/kernel/pci-dma.c b/arch/parisc/kernel/pci-dma.c
index 41f8e321e34c..9448d4e91142 100644
--- a/arch/parisc/kernel/pci-dma.c
+++ b/arch/parisc/kernel/pci-dma.c
@@ -25,6 +25,7 @@
25#include <linux/slab.h> 25#include <linux/slab.h>
26#include <linux/string.h> 26#include <linux/string.h>
27#include <linux/types.h> 27#include <linux/types.h>
28#include <linux/scatterlist.h>
28 29
29#include <asm/cacheflush.h> 30#include <asm/cacheflush.h>
30#include <asm/dma.h> /* for DMA_CHUNK_SIZE */ 31#include <asm/dma.h> /* for DMA_CHUNK_SIZE */
diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug
index c939fe86a9e0..6a79fe43e229 100644
--- a/arch/powerpc/Kconfig.debug
+++ b/arch/powerpc/Kconfig.debug
@@ -216,7 +216,6 @@ config PPC_EARLY_DEBUG_BEAT
216config PPC_EARLY_DEBUG_44x 216config PPC_EARLY_DEBUG_44x
217 bool "Early serial debugging for IBM/AMCC 44x CPUs" 217 bool "Early serial debugging for IBM/AMCC 44x CPUs"
218 depends on 44x 218 depends on 44x
219 select PPC_UDBG_16550
220 help 219 help
221 Select this to enable early debugging for IBM 44x chips via the 220 Select this to enable early debugging for IBM 44x chips via the
222 inbuilt serial port. 221 inbuilt serial port.
diff --git a/arch/powerpc/boot/dts/bamboo.dts b/arch/powerpc/boot/dts/bamboo.dts
index a88ae3d218a5..cb2fb50a281c 100644
--- a/arch/powerpc/boot/dts/bamboo.dts
+++ b/arch/powerpc/boot/dts/bamboo.dts
@@ -98,11 +98,13 @@
98 interrupt-parent = <&MAL0>; 98 interrupt-parent = <&MAL0>;
99 interrupts = <0 1 2 3 4>; 99 interrupts = <0 1 2 3 4>;
100 #interrupt-cells = <1>; 100 #interrupt-cells = <1>;
101 #address-cells = <0>;
102 #size-cells = <0>;
101 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4 103 interrupt-map = </*TXEOB*/ 0 &UIC0 a 4
102 /*RXEOB*/ 1 &UIC0 b 4 104 /*RXEOB*/ 1 &UIC0 b 4
103 /*SERR*/ 2 &UIC1 0 4 105 /*SERR*/ 2 &UIC1 0 4
104 /*TXDE*/ 3 &UIC1 1 4 106 /*TXDE*/ 3 &UIC1 1 4
105 /*RXDE*/ 4 &UIC1 3 4>; 107 /*RXDE*/ 4 &UIC1 2 4>;
106 }; 108 };
107 109
108 POB0: opb { 110 POB0: opb {
@@ -196,6 +198,7 @@
196 }; 198 };
197 199
198 EMAC0: ethernet@ef600e00 { 200 EMAC0: ethernet@ef600e00 {
201 linux,network-index = <0>;
199 device_type = "network"; 202 device_type = "network";
200 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac"; 203 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
201 interrupt-parent = <&UIC1>; 204 interrupt-parent = <&UIC1>;
@@ -210,12 +213,13 @@
210 rx-fifo-size = <1000>; 213 rx-fifo-size = <1000>;
211 tx-fifo-size = <800>; 214 tx-fifo-size = <800>;
212 phy-mode = "rmii"; 215 phy-mode = "rmii";
213 phy-map = <00000001>; 216 phy-map = <00000000>;
214 zmii-device = <&ZMII0>; 217 zmii-device = <&ZMII0>;
215 zmii-channel = <0>; 218 zmii-channel = <0>;
216 }; 219 };
217 220
218 EMAC1: ethernet@ef600f00 { 221 EMAC1: ethernet@ef600f00 {
222 linux,network-index = <1>;
219 device_type = "network"; 223 device_type = "network";
220 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac"; 224 compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
221 interrupt-parent = <&UIC1>; 225 interrupt-parent = <&UIC1>;
@@ -230,7 +234,7 @@
230 rx-fifo-size = <1000>; 234 rx-fifo-size = <1000>;
231 tx-fifo-size = <800>; 235 tx-fifo-size = <800>;
232 phy-mode = "rmii"; 236 phy-mode = "rmii";
233 phy-map = <00000001>; 237 phy-map = <00000000>;
234 zmii-device = <&ZMII0>; 238 zmii-device = <&ZMII0>;
235 zmii-channel = <1>; 239 zmii-channel = <1>;
236 }; 240 };
diff --git a/arch/powerpc/boot/dts/sequoia.dts b/arch/powerpc/boot/dts/sequoia.dts
index 36be75b04de1..8833dfe2e8b4 100644
--- a/arch/powerpc/boot/dts/sequoia.dts
+++ b/arch/powerpc/boot/dts/sequoia.dts
@@ -241,6 +241,12 @@
241 reg = <ef600d00 c>; 241 reg = <ef600d00 c>;
242 }; 242 };
243 243
244 RGMII0: emac-rgmii@ef601000 {
245 device_type = "rgmii-interface";
246 compatible = "ibm,rgmii-440epx", "ibm,rgmii";
247 reg = <ef601000 8>;
248 };
249
244 EMAC0: ethernet@ef600e00 { 250 EMAC0: ethernet@ef600e00 {
245 linux,network-index = <0>; 251 linux,network-index = <0>;
246 device_type = "network"; 252 device_type = "network";
@@ -261,10 +267,12 @@
261 max-frame-size = <5dc>; 267 max-frame-size = <5dc>;
262 rx-fifo-size = <1000>; 268 rx-fifo-size = <1000>;
263 tx-fifo-size = <800>; 269 tx-fifo-size = <800>;
264 phy-mode = "rmii"; 270 phy-mode = "rgmii";
265 phy-map = <00000000>; 271 phy-map = <00000000>;
266 zmii-device = <&ZMII0>; 272 zmii-device = <&ZMII0>;
267 zmii-channel = <0>; 273 zmii-channel = <0>;
274 rgmii-device = <&RGMII0>;
275 rgmii-channel = <0>;
268 }; 276 };
269 277
270 EMAC1: ethernet@ef600f00 { 278 EMAC1: ethernet@ef600f00 {
@@ -287,10 +295,12 @@
287 max-frame-size = <5dc>; 295 max-frame-size = <5dc>;
288 rx-fifo-size = <1000>; 296 rx-fifo-size = <1000>;
289 tx-fifo-size = <800>; 297 tx-fifo-size = <800>;
290 phy-mode = "rmii"; 298 phy-mode = "rgmii";
291 phy-map = <00000000>; 299 phy-map = <00000000>;
292 zmii-device = <&ZMII0>; 300 zmii-device = <&ZMII0>;
293 zmii-channel = <1>; 301 zmii-channel = <1>;
302 rgmii-device = <&RGMII0>;
303 rgmii-channel = <1>;
294 }; 304 };
295 }; 305 };
296 }; 306 };
diff --git a/arch/powerpc/boot/dts/walnut.dts b/arch/powerpc/boot/dts/walnut.dts
index ec54f4e04ad6..fa681f5343fe 100644
--- a/arch/powerpc/boot/dts/walnut.dts
+++ b/arch/powerpc/boot/dts/walnut.dts
@@ -64,10 +64,15 @@
64 MAL: mcmal { 64 MAL: mcmal {
65 compatible = "ibm,mcmal-405gp", "ibm,mcmal"; 65 compatible = "ibm,mcmal-405gp", "ibm,mcmal";
66 dcr-reg = <180 62>; 66 dcr-reg = <180 62>;
67 num-tx-chans = <2>; 67 num-tx-chans = <1>;
68 num-rx-chans = <1>; 68 num-rx-chans = <1>;
69 interrupt-parent = <&UIC0>; 69 interrupt-parent = <&UIC0>;
70 interrupts = <a 4 b 4 c 4 d 4 e 4>; 70 interrupts = <
71 b 4 /* TXEOB */
72 c 4 /* RXEOB */
73 a 4 /* SERR */
74 d 4 /* TXDE */
75 e 4 /* RXDE */>;
71 }; 76 };
72 77
73 POB0: opb { 78 POB0: opb {
@@ -118,9 +123,10 @@
118 compatible = "ibm,emac-405gp", "ibm,emac"; 123 compatible = "ibm,emac-405gp", "ibm,emac";
119 interrupt-parent = <&UIC0>; 124 interrupt-parent = <&UIC0>;
120 interrupts = <9 4 f 4>; 125 interrupts = <9 4 f 4>;
126 local-mac-address = [000000000000]; /* Filled in by zImage */
121 reg = <ef600800 70>; 127 reg = <ef600800 70>;
122 mal-device = <&MAL>; 128 mal-device = <&MAL>;
123 mal-tx-channel = <0 1>; 129 mal-tx-channel = <0>;
124 mal-rx-channel = <0>; 130 mal-rx-channel = <0>;
125 cell-index = <0>; 131 cell-index = <0>;
126 max-frame-size = <5dc>; 132 max-frame-size = <5dc>;
diff --git a/arch/powerpc/boot/treeboot-walnut.c b/arch/powerpc/boot/treeboot-walnut.c
index 3adf2d08a230..bb2c309d70fc 100644
--- a/arch/powerpc/boot/treeboot-walnut.c
+++ b/arch/powerpc/boot/treeboot-walnut.c
@@ -57,8 +57,8 @@ void ibm405gp_fixup_clocks(unsigned int sysclk, unsigned int ser_clk)
57 } 57 }
58 58
59 /* setup the timebase clock to tick at the cpu frequency */ 59 /* setup the timebase clock to tick at the cpu frequency */
60 cpc0_cr1 = cpc0_cr1 & ~ 0x00800000; 60 cpc0_cr1 = cpc0_cr1 & ~0x00800000;
61 mtdcr(DCRN_CPC0_CR1, cpc0_cr1); 61 mtdcr(DCRN_405_CPC0_CR1, cpc0_cr1);
62 tb = cpu; 62 tb = cpu;
63 63
64 dt_fixup_cpu_clocks(cpu, tb, 0); 64 dt_fixup_cpu_clocks(cpu, tb, 0);
@@ -109,6 +109,7 @@ static void walnut_flashsel_fixup(void)
109 setprop(sram, "reg", reg_sram, sizeof(reg_sram)); 109 setprop(sram, "reg", reg_sram, sizeof(reg_sram));
110} 110}
111 111
112#define WALNUT_OPENBIOS_MAC_OFF 0xfffffe0b
112static void walnut_fixups(void) 113static void walnut_fixups(void)
113{ 114{
114 ibm4xx_fixup_memsize(); 115 ibm4xx_fixup_memsize();
@@ -116,6 +117,7 @@ static void walnut_fixups(void)
116 ibm4xx_quiesce_eth((u32 *)0xef600800, NULL); 117 ibm4xx_quiesce_eth((u32 *)0xef600800, NULL);
117 ibm4xx_fixup_ebc_ranges("/plb/ebc"); 118 ibm4xx_fixup_ebc_ranges("/plb/ebc");
118 walnut_flashsel_fixup(); 119 walnut_flashsel_fixup();
120 dt_fixup_mac_addresses((u8 *) WALNUT_OPENBIOS_MAC_OFF);
119} 121}
120 122
121void platform_init(void) 123void platform_init(void)
diff --git a/arch/powerpc/configs/bamboo_defconfig b/arch/powerpc/configs/bamboo_defconfig
index d22fed6d2cd9..844808ebf245 100644
--- a/arch/powerpc/configs/bamboo_defconfig
+++ b/arch/powerpc/configs/bamboo_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.23-rc1 3# Linux kernel version: 2.6.23
4# Fri Aug 3 10:46:53 2007 4# Fri Oct 19 09:01:11 2007
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -22,8 +22,13 @@ CONFIG_PHYS_64BIT=y
22# CONFIG_PPC_MM_SLICES is not set 22# CONFIG_PPC_MM_SLICES is not set
23CONFIG_NOT_COHERENT_CACHE=y 23CONFIG_NOT_COHERENT_CACHE=y
24CONFIG_PPC32=y 24CONFIG_PPC32=y
25CONFIG_WORD_SIZE=32
25CONFIG_PPC_MERGE=y 26CONFIG_PPC_MERGE=y
26CONFIG_MMU=y 27CONFIG_MMU=y
28CONFIG_GENERIC_CMOS_UPDATE=y
29CONFIG_GENERIC_TIME=y
30CONFIG_GENERIC_TIME_VSYSCALL=y
31CONFIG_GENERIC_CLOCKEVENTS=y
27CONFIG_GENERIC_HARDIRQS=y 32CONFIG_GENERIC_HARDIRQS=y
28CONFIG_IRQ_PER_CPU=y 33CONFIG_IRQ_PER_CPU=y
29CONFIG_RWSEM_XCHGADD_ALGORITHM=y 34CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -67,6 +72,8 @@ CONFIG_POSIX_MQUEUE=y
67# CONFIG_AUDIT is not set 72# CONFIG_AUDIT is not set
68# CONFIG_IKCONFIG is not set 73# CONFIG_IKCONFIG is not set
69CONFIG_LOG_BUF_SHIFT=14 74CONFIG_LOG_BUF_SHIFT=14
75CONFIG_FAIR_GROUP_SCHED=y
76CONFIG_FAIR_USER_SCHED=y
70CONFIG_SYSFS_DEPRECATED=y 77CONFIG_SYSFS_DEPRECATED=y
71# CONFIG_RELAY is not set 78# CONFIG_RELAY is not set
72CONFIG_BLK_DEV_INITRD=y 79CONFIG_BLK_DEV_INITRD=y
@@ -87,7 +94,6 @@ CONFIG_FUTEX=y
87CONFIG_ANON_INODES=y 94CONFIG_ANON_INODES=y
88CONFIG_EPOLL=y 95CONFIG_EPOLL=y
89CONFIG_SIGNALFD=y 96CONFIG_SIGNALFD=y
90CONFIG_TIMERFD=y
91CONFIG_EVENTFD=y 97CONFIG_EVENTFD=y
92CONFIG_SHMEM=y 98CONFIG_SHMEM=y
93CONFIG_VM_EVENT_COUNTERS=y 99CONFIG_VM_EVENT_COUNTERS=y
@@ -133,6 +139,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
133# CONFIG_PQ2ADS is not set 139# CONFIG_PQ2ADS is not set
134CONFIG_BAMBOO=y 140CONFIG_BAMBOO=y
135# CONFIG_EBONY is not set 141# CONFIG_EBONY is not set
142# CONFIG_SEQUOIA is not set
136CONFIG_440EP=y 143CONFIG_440EP=y
137CONFIG_IBM440EP_ERR42=y 144CONFIG_IBM440EP_ERR42=y
138# CONFIG_MPIC is not set 145# CONFIG_MPIC is not set
@@ -146,11 +153,16 @@ CONFIG_IBM440EP_ERR42=y
146# CONFIG_GENERIC_IOMAP is not set 153# CONFIG_GENERIC_IOMAP is not set
147# CONFIG_CPU_FREQ is not set 154# CONFIG_CPU_FREQ is not set
148# CONFIG_CPM2 is not set 155# CONFIG_CPM2 is not set
156# CONFIG_FSL_ULI1575 is not set
149 157
150# 158#
151# Kernel options 159# Kernel options
152# 160#
153# CONFIG_HIGHMEM is not set 161# CONFIG_HIGHMEM is not set
162# CONFIG_TICK_ONESHOT is not set
163# CONFIG_NO_HZ is not set
164# CONFIG_HIGH_RES_TIMERS is not set
165CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
154# CONFIG_HZ_100 is not set 166# CONFIG_HZ_100 is not set
155CONFIG_HZ_250=y 167CONFIG_HZ_250=y
156# CONFIG_HZ_300 is not set 168# CONFIG_HZ_300 is not set
@@ -172,6 +184,7 @@ CONFIG_FLATMEM_MANUAL=y
172CONFIG_FLATMEM=y 184CONFIG_FLATMEM=y
173CONFIG_FLAT_NODE_MEM_MAP=y 185CONFIG_FLAT_NODE_MEM_MAP=y
174# CONFIG_SPARSEMEM_STATIC is not set 186# CONFIG_SPARSEMEM_STATIC is not set
187# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
175CONFIG_SPLIT_PTLOCK_CPUS=4 188CONFIG_SPLIT_PTLOCK_CPUS=4
176CONFIG_RESOURCES_64BIT=y 189CONFIG_RESOURCES_64BIT=y
177CONFIG_ZONE_DMA_FLAG=1 190CONFIG_ZONE_DMA_FLAG=1
@@ -197,10 +210,6 @@ CONFIG_PCI_SYSCALL=y
197CONFIG_ARCH_SUPPORTS_MSI=y 210CONFIG_ARCH_SUPPORTS_MSI=y
198# CONFIG_PCI_MSI is not set 211# CONFIG_PCI_MSI is not set
199# CONFIG_PCI_DEBUG is not set 212# CONFIG_PCI_DEBUG is not set
200
201#
202# PCCARD (PCMCIA/CardBus) support
203#
204# CONFIG_PCCARD is not set 213# CONFIG_PCCARD is not set
205# CONFIG_HOTPLUG_PCI is not set 214# CONFIG_HOTPLUG_PCI is not set
206 215
@@ -215,7 +224,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
215CONFIG_HIGHMEM_START=0xfe000000 224CONFIG_HIGHMEM_START=0xfe000000
216CONFIG_LOWMEM_SIZE=0x30000000 225CONFIG_LOWMEM_SIZE=0x30000000
217CONFIG_KERNEL_START=0xc0000000 226CONFIG_KERNEL_START=0xc0000000
218CONFIG_TASK_SIZE=0x80000000 227CONFIG_TASK_SIZE=0xc0000000
219CONFIG_CONSISTENT_START=0xff100000 228CONFIG_CONSISTENT_START=0xff100000
220CONFIG_CONSISTENT_SIZE=0x00200000 229CONFIG_CONSISTENT_SIZE=0x00200000
221CONFIG_BOOT_LOAD=0x01000000 230CONFIG_BOOT_LOAD=0x01000000
@@ -252,6 +261,7 @@ CONFIG_IP_PNP_BOOTP=y
252# CONFIG_INET_XFRM_MODE_TRANSPORT is not set 261# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
253# CONFIG_INET_XFRM_MODE_TUNNEL is not set 262# CONFIG_INET_XFRM_MODE_TUNNEL is not set
254# CONFIG_INET_XFRM_MODE_BEET is not set 263# CONFIG_INET_XFRM_MODE_BEET is not set
264# CONFIG_INET_LRO is not set
255CONFIG_INET_DIAG=y 265CONFIG_INET_DIAG=y
256CONFIG_INET_TCP_DIAG=y 266CONFIG_INET_TCP_DIAG=y
257# CONFIG_TCP_CONG_ADVANCED is not set 267# CONFIG_TCP_CONG_ADVANCED is not set
@@ -309,6 +319,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
309# 319#
310# Generic Driver Options 320# Generic Driver Options
311# 321#
322CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
312CONFIG_STANDALONE=y 323CONFIG_STANDALONE=y
313CONFIG_PREVENT_FIRMWARE_BUILD=y 324CONFIG_PREVENT_FIRMWARE_BUILD=y
314CONFIG_FW_LOADER=y 325CONFIG_FW_LOADER=y
@@ -353,10 +364,6 @@ CONFIG_MISC_DEVICES=y
353# CONFIG_SCSI_NETLINK is not set 364# CONFIG_SCSI_NETLINK is not set
354# CONFIG_ATA is not set 365# CONFIG_ATA is not set
355# CONFIG_MD is not set 366# CONFIG_MD is not set
356
357#
358# Fusion MPT device support
359#
360# CONFIG_FUSION is not set 367# CONFIG_FUSION is not set
361 368
362# 369#
@@ -375,12 +382,36 @@ CONFIG_NETDEVICES=y
375# CONFIG_MACVLAN is not set 382# CONFIG_MACVLAN is not set
376# CONFIG_EQUALIZER is not set 383# CONFIG_EQUALIZER is not set
377# CONFIG_TUN is not set 384# CONFIG_TUN is not set
385# CONFIG_VETH is not set
386# CONFIG_IP1000 is not set
378# CONFIG_ARCNET is not set 387# CONFIG_ARCNET is not set
379# CONFIG_NET_ETHERNET is not set 388# CONFIG_PHYLIB is not set
389CONFIG_NET_ETHERNET=y
390# CONFIG_MII is not set
391# CONFIG_HAPPYMEAL is not set
392# CONFIG_SUNGEM is not set
393# CONFIG_CASSINI is not set
394# CONFIG_NET_VENDOR_3COM is not set
395# CONFIG_NET_TULIP is not set
396# CONFIG_HP100 is not set
397CONFIG_IBM_NEW_EMAC=y
398CONFIG_IBM_NEW_EMAC_RXB=128
399CONFIG_IBM_NEW_EMAC_TXB=64
400CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
401CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
402CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
403# CONFIG_IBM_NEW_EMAC_DEBUG is not set
404CONFIG_IBM_NEW_EMAC_ZMII=y
405# CONFIG_IBM_NEW_EMAC_RGMII is not set
406# CONFIG_IBM_NEW_EMAC_TAH is not set
407# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
408# CONFIG_NET_PCI is not set
409# CONFIG_B44 is not set
380CONFIG_NETDEV_1000=y 410CONFIG_NETDEV_1000=y
381# CONFIG_ACENIC is not set 411# CONFIG_ACENIC is not set
382# CONFIG_DL2K is not set 412# CONFIG_DL2K is not set
383# CONFIG_E1000 is not set 413# CONFIG_E1000 is not set
414# CONFIG_E1000E is not set
384# CONFIG_NS83820 is not set 415# CONFIG_NS83820 is not set
385# CONFIG_HAMACHI is not set 416# CONFIG_HAMACHI is not set
386# CONFIG_YELLOWFIN is not set 417# CONFIG_YELLOWFIN is not set
@@ -388,6 +419,7 @@ CONFIG_NETDEV_1000=y
388# CONFIG_SIS190 is not set 419# CONFIG_SIS190 is not set
389# CONFIG_SKGE is not set 420# CONFIG_SKGE is not set
390# CONFIG_SKY2 is not set 421# CONFIG_SKY2 is not set
422# CONFIG_SK98LIN is not set
391# CONFIG_VIA_VELOCITY is not set 423# CONFIG_VIA_VELOCITY is not set
392# CONFIG_TIGON3 is not set 424# CONFIG_TIGON3 is not set
393# CONFIG_BNX2 is not set 425# CONFIG_BNX2 is not set
@@ -396,11 +428,14 @@ CONFIG_NETDEV_1000=y
396CONFIG_NETDEV_10000=y 428CONFIG_NETDEV_10000=y
397# CONFIG_CHELSIO_T1 is not set 429# CONFIG_CHELSIO_T1 is not set
398# CONFIG_CHELSIO_T3 is not set 430# CONFIG_CHELSIO_T3 is not set
431# CONFIG_IXGBE is not set
399# CONFIG_IXGB is not set 432# CONFIG_IXGB is not set
400# CONFIG_S2IO is not set 433# CONFIG_S2IO is not set
401# CONFIG_MYRI10GE is not set 434# CONFIG_MYRI10GE is not set
402# CONFIG_NETXEN_NIC is not set 435# CONFIG_NETXEN_NIC is not set
436# CONFIG_NIU is not set
403# CONFIG_MLX4_CORE is not set 437# CONFIG_MLX4_CORE is not set
438# CONFIG_TEHUTI is not set
404# CONFIG_TR is not set 439# CONFIG_TR is not set
405 440
406# 441#
@@ -463,14 +498,11 @@ CONFIG_UNIX98_PTYS=y
463CONFIG_LEGACY_PTYS=y 498CONFIG_LEGACY_PTYS=y
464CONFIG_LEGACY_PTY_COUNT=256 499CONFIG_LEGACY_PTY_COUNT=256
465# CONFIG_IPMI_HANDLER is not set 500# CONFIG_IPMI_HANDLER is not set
466# CONFIG_WATCHDOG is not set
467# CONFIG_HW_RANDOM is not set 501# CONFIG_HW_RANDOM is not set
468# CONFIG_NVRAM is not set 502# CONFIG_NVRAM is not set
469# CONFIG_GEN_RTC is not set 503# CONFIG_GEN_RTC is not set
470# CONFIG_R3964 is not set 504# CONFIG_R3964 is not set
471# CONFIG_APPLICOM is not set 505# CONFIG_APPLICOM is not set
472# CONFIG_AGP is not set
473# CONFIG_DRM is not set
474# CONFIG_RAW_DRIVER is not set 506# CONFIG_RAW_DRIVER is not set
475# CONFIG_TCG_TPM is not set 507# CONFIG_TCG_TPM is not set
476CONFIG_DEVPORT=y 508CONFIG_DEVPORT=y
@@ -484,6 +516,13 @@ CONFIG_DEVPORT=y
484# CONFIG_W1 is not set 516# CONFIG_W1 is not set
485# CONFIG_POWER_SUPPLY is not set 517# CONFIG_POWER_SUPPLY is not set
486# CONFIG_HWMON is not set 518# CONFIG_HWMON is not set
519# CONFIG_WATCHDOG is not set
520
521#
522# Sonics Silicon Backplane
523#
524CONFIG_SSB_POSSIBLE=y
525# CONFIG_SSB is not set
487 526
488# 527#
489# Multifunction device drivers 528# Multifunction device drivers
@@ -500,16 +539,17 @@ CONFIG_DAB=y
500# 539#
501# Graphics support 540# Graphics support
502# 541#
542# CONFIG_AGP is not set
543# CONFIG_DRM is not set
544# CONFIG_VGASTATE is not set
545CONFIG_VIDEO_OUTPUT_CONTROL=m
546# CONFIG_FB is not set
503# CONFIG_BACKLIGHT_LCD_SUPPORT is not set 547# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
504 548
505# 549#
506# Display device support 550# Display device support
507# 551#
508# CONFIG_DISPLAY_SUPPORT is not set 552# CONFIG_DISPLAY_SUPPORT is not set
509# CONFIG_VGASTATE is not set
510CONFIG_VIDEO_OUTPUT_CONTROL=m
511# CONFIG_FB is not set
512# CONFIG_FB_IBM_GXT4500 is not set
513 553
514# 554#
515# Sound 555# Sound
@@ -536,19 +576,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
536# CONFIG_RTC_CLASS is not set 576# CONFIG_RTC_CLASS is not set
537 577
538# 578#
539# DMA Engine support
540#
541# CONFIG_DMA_ENGINE is not set
542
543#
544# DMA Clients
545#
546
547#
548# DMA Devices
549#
550
551#
552# Userspace I/O 579# Userspace I/O
553# 580#
554# CONFIG_UIO is not set 581# CONFIG_UIO is not set
@@ -600,7 +627,6 @@ CONFIG_SYSFS=y
600CONFIG_TMPFS=y 627CONFIG_TMPFS=y
601# CONFIG_TMPFS_POSIX_ACL is not set 628# CONFIG_TMPFS_POSIX_ACL is not set
602# CONFIG_HUGETLB_PAGE is not set 629# CONFIG_HUGETLB_PAGE is not set
603CONFIG_RAMFS=y
604# CONFIG_CONFIGFS_FS is not set 630# CONFIG_CONFIGFS_FS is not set
605 631
606# 632#
@@ -619,10 +645,7 @@ CONFIG_CRAMFS=y
619# CONFIG_QNX4FS_FS is not set 645# CONFIG_QNX4FS_FS is not set
620# CONFIG_SYSV_FS is not set 646# CONFIG_SYSV_FS is not set
621# CONFIG_UFS_FS is not set 647# CONFIG_UFS_FS is not set
622 648CONFIG_NETWORK_FILESYSTEMS=y
623#
624# Network File Systems
625#
626CONFIG_NFS_FS=y 649CONFIG_NFS_FS=y
627CONFIG_NFS_V3=y 650CONFIG_NFS_V3=y
628# CONFIG_NFS_V3_ACL is not set 651# CONFIG_NFS_V3_ACL is not set
@@ -648,15 +671,7 @@ CONFIG_SUNRPC=y
648# 671#
649# CONFIG_PARTITION_ADVANCED is not set 672# CONFIG_PARTITION_ADVANCED is not set
650CONFIG_MSDOS_PARTITION=y 673CONFIG_MSDOS_PARTITION=y
651
652#
653# Native Language Support
654#
655# CONFIG_NLS is not set 674# CONFIG_NLS is not set
656
657#
658# Distributed Lock Manager
659#
660# CONFIG_DLM is not set 675# CONFIG_DLM is not set
661# CONFIG_UCC_SLOW is not set 676# CONFIG_UCC_SLOW is not set
662 677
@@ -709,6 +724,7 @@ CONFIG_SCHED_DEBUG=y
709# CONFIG_DEBUG_VM is not set 724# CONFIG_DEBUG_VM is not set
710# CONFIG_DEBUG_LIST is not set 725# CONFIG_DEBUG_LIST is not set
711CONFIG_FORCED_INLINING=y 726CONFIG_FORCED_INLINING=y
727# CONFIG_BOOT_PRINTK_DELAY is not set
712# CONFIG_RCU_TORTURE_TEST is not set 728# CONFIG_RCU_TORTURE_TEST is not set
713# CONFIG_FAULT_INJECTION is not set 729# CONFIG_FAULT_INJECTION is not set
714# CONFIG_DEBUG_STACKOVERFLOW is not set 730# CONFIG_DEBUG_STACKOVERFLOW is not set
@@ -728,6 +744,7 @@ CONFIG_PPC_EARLY_DEBUG=y
728# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set 744# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
729# CONFIG_PPC_EARLY_DEBUG_BEAT is not set 745# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
730CONFIG_PPC_EARLY_DEBUG_44x=y 746CONFIG_PPC_EARLY_DEBUG_44x=y
747# CONFIG_PPC_EARLY_DEBUG_CPM is not set
731CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0xef600300 748CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0xef600300
732CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x0 749CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x0
733 750
@@ -736,6 +753,7 @@ CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x0
736# 753#
737# CONFIG_KEYS is not set 754# CONFIG_KEYS is not set
738# CONFIG_SECURITY is not set 755# CONFIG_SECURITY is not set
756# CONFIG_SECURITY_FILE_CAPABILITIES is not set
739CONFIG_CRYPTO=y 757CONFIG_CRYPTO=y
740CONFIG_CRYPTO_ALGAPI=y 758CONFIG_CRYPTO_ALGAPI=y
741CONFIG_CRYPTO_BLKCIPHER=y 759CONFIG_CRYPTO_BLKCIPHER=y
@@ -755,6 +773,7 @@ CONFIG_CRYPTO_ECB=y
755CONFIG_CRYPTO_CBC=y 773CONFIG_CRYPTO_CBC=y
756CONFIG_CRYPTO_PCBC=y 774CONFIG_CRYPTO_PCBC=y
757# CONFIG_CRYPTO_LRW is not set 775# CONFIG_CRYPTO_LRW is not set
776# CONFIG_CRYPTO_XTS is not set
758# CONFIG_CRYPTO_CRYPTD is not set 777# CONFIG_CRYPTO_CRYPTD is not set
759CONFIG_CRYPTO_DES=y 778CONFIG_CRYPTO_DES=y
760# CONFIG_CRYPTO_FCRYPT is not set 779# CONFIG_CRYPTO_FCRYPT is not set
@@ -768,9 +787,12 @@ CONFIG_CRYPTO_DES=y
768# CONFIG_CRYPTO_ARC4 is not set 787# CONFIG_CRYPTO_ARC4 is not set
769# CONFIG_CRYPTO_KHAZAD is not set 788# CONFIG_CRYPTO_KHAZAD is not set
770# CONFIG_CRYPTO_ANUBIS is not set 789# CONFIG_CRYPTO_ANUBIS is not set
790# CONFIG_CRYPTO_SEED is not set
771# CONFIG_CRYPTO_DEFLATE is not set 791# CONFIG_CRYPTO_DEFLATE is not set
772# CONFIG_CRYPTO_MICHAEL_MIC is not set 792# CONFIG_CRYPTO_MICHAEL_MIC is not set
773# CONFIG_CRYPTO_CRC32C is not set 793# CONFIG_CRYPTO_CRC32C is not set
774# CONFIG_CRYPTO_CAMELLIA is not set 794# CONFIG_CRYPTO_CAMELLIA is not set
775# CONFIG_CRYPTO_TEST is not set 795# CONFIG_CRYPTO_TEST is not set
796# CONFIG_CRYPTO_AUTHENC is not set
776CONFIG_CRYPTO_HW=y 797CONFIG_CRYPTO_HW=y
798# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/ebony_defconfig b/arch/powerpc/configs/ebony_defconfig
index 35a95dda681e..d3ef642811ef 100644
--- a/arch/powerpc/configs/ebony_defconfig
+++ b/arch/powerpc/configs/ebony_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.23-rc4 3# Linux kernel version: 2.6.23
4# Thu Aug 30 16:34:11 2007 4# Thu Oct 18 08:01:57 2007
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -21,8 +21,13 @@ CONFIG_PHYS_64BIT=y
21# CONFIG_PPC_MM_SLICES is not set 21# CONFIG_PPC_MM_SLICES is not set
22CONFIG_NOT_COHERENT_CACHE=y 22CONFIG_NOT_COHERENT_CACHE=y
23CONFIG_PPC32=y 23CONFIG_PPC32=y
24CONFIG_WORD_SIZE=32
24CONFIG_PPC_MERGE=y 25CONFIG_PPC_MERGE=y
25CONFIG_MMU=y 26CONFIG_MMU=y
27CONFIG_GENERIC_CMOS_UPDATE=y
28CONFIG_GENERIC_TIME=y
29CONFIG_GENERIC_TIME_VSYSCALL=y
30CONFIG_GENERIC_CLOCKEVENTS=y
26CONFIG_GENERIC_HARDIRQS=y 31CONFIG_GENERIC_HARDIRQS=y
27CONFIG_IRQ_PER_CPU=y 32CONFIG_IRQ_PER_CPU=y
28CONFIG_RWSEM_XCHGADD_ALGORITHM=y 33CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -66,6 +71,8 @@ CONFIG_POSIX_MQUEUE=y
66# CONFIG_AUDIT is not set 71# CONFIG_AUDIT is not set
67# CONFIG_IKCONFIG is not set 72# CONFIG_IKCONFIG is not set
68CONFIG_LOG_BUF_SHIFT=14 73CONFIG_LOG_BUF_SHIFT=14
74CONFIG_FAIR_GROUP_SCHED=y
75CONFIG_FAIR_USER_SCHED=y
69CONFIG_SYSFS_DEPRECATED=y 76CONFIG_SYSFS_DEPRECATED=y
70# CONFIG_RELAY is not set 77# CONFIG_RELAY is not set
71CONFIG_BLK_DEV_INITRD=y 78CONFIG_BLK_DEV_INITRD=y
@@ -86,7 +93,6 @@ CONFIG_FUTEX=y
86CONFIG_ANON_INODES=y 93CONFIG_ANON_INODES=y
87CONFIG_EPOLL=y 94CONFIG_EPOLL=y
88CONFIG_SIGNALFD=y 95CONFIG_SIGNALFD=y
89CONFIG_TIMERFD=y
90CONFIG_EVENTFD=y 96CONFIG_EVENTFD=y
91CONFIG_SHMEM=y 97CONFIG_SHMEM=y
92CONFIG_VM_EVENT_COUNTERS=y 98CONFIG_VM_EVENT_COUNTERS=y
@@ -130,7 +136,9 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
130# CONFIG_PPC_CELL is not set 136# CONFIG_PPC_CELL is not set
131# CONFIG_PPC_CELL_NATIVE is not set 137# CONFIG_PPC_CELL_NATIVE is not set
132# CONFIG_PQ2ADS is not set 138# CONFIG_PQ2ADS is not set
139# CONFIG_BAMBOO is not set
133CONFIG_EBONY=y 140CONFIG_EBONY=y
141# CONFIG_SEQUOIA is not set
134CONFIG_440GP=y 142CONFIG_440GP=y
135# CONFIG_MPIC is not set 143# CONFIG_MPIC is not set
136# CONFIG_MPIC_WEIRD is not set 144# CONFIG_MPIC_WEIRD is not set
@@ -149,6 +157,10 @@ CONFIG_440GP=y
149# Kernel options 157# Kernel options
150# 158#
151# CONFIG_HIGHMEM is not set 159# CONFIG_HIGHMEM is not set
160# CONFIG_TICK_ONESHOT is not set
161# CONFIG_NO_HZ is not set
162# CONFIG_HIGH_RES_TIMERS is not set
163CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
152# CONFIG_HZ_100 is not set 164# CONFIG_HZ_100 is not set
153CONFIG_HZ_250=y 165CONFIG_HZ_250=y
154# CONFIG_HZ_300 is not set 166# CONFIG_HZ_300 is not set
@@ -170,6 +182,7 @@ CONFIG_FLATMEM_MANUAL=y
170CONFIG_FLATMEM=y 182CONFIG_FLATMEM=y
171CONFIG_FLAT_NODE_MEM_MAP=y 183CONFIG_FLAT_NODE_MEM_MAP=y
172# CONFIG_SPARSEMEM_STATIC is not set 184# CONFIG_SPARSEMEM_STATIC is not set
185# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
173CONFIG_SPLIT_PTLOCK_CPUS=4 186CONFIG_SPLIT_PTLOCK_CPUS=4
174CONFIG_RESOURCES_64BIT=y 187CONFIG_RESOURCES_64BIT=y
175CONFIG_ZONE_DMA_FLAG=1 188CONFIG_ZONE_DMA_FLAG=1
@@ -194,10 +207,6 @@ CONFIG_PCI_SYSCALL=y
194CONFIG_ARCH_SUPPORTS_MSI=y 207CONFIG_ARCH_SUPPORTS_MSI=y
195# CONFIG_PCI_MSI is not set 208# CONFIG_PCI_MSI is not set
196# CONFIG_PCI_DEBUG is not set 209# CONFIG_PCI_DEBUG is not set
197
198#
199# PCCARD (PCMCIA/CardBus) support
200#
201# CONFIG_PCCARD is not set 210# CONFIG_PCCARD is not set
202# CONFIG_HOTPLUG_PCI is not set 211# CONFIG_HOTPLUG_PCI is not set
203 212
@@ -212,7 +221,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
212CONFIG_HIGHMEM_START=0xfe000000 221CONFIG_HIGHMEM_START=0xfe000000
213CONFIG_LOWMEM_SIZE=0x30000000 222CONFIG_LOWMEM_SIZE=0x30000000
214CONFIG_KERNEL_START=0xc0000000 223CONFIG_KERNEL_START=0xc0000000
215CONFIG_TASK_SIZE=0x80000000 224CONFIG_TASK_SIZE=0xc0000000
216CONFIG_CONSISTENT_START=0xff100000 225CONFIG_CONSISTENT_START=0xff100000
217CONFIG_CONSISTENT_SIZE=0x00200000 226CONFIG_CONSISTENT_SIZE=0x00200000
218CONFIG_BOOT_LOAD=0x01000000 227CONFIG_BOOT_LOAD=0x01000000
@@ -249,6 +258,7 @@ CONFIG_IP_PNP_BOOTP=y
249# CONFIG_INET_XFRM_MODE_TRANSPORT is not set 258# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
250# CONFIG_INET_XFRM_MODE_TUNNEL is not set 259# CONFIG_INET_XFRM_MODE_TUNNEL is not set
251# CONFIG_INET_XFRM_MODE_BEET is not set 260# CONFIG_INET_XFRM_MODE_BEET is not set
261# CONFIG_INET_LRO is not set
252CONFIG_INET_DIAG=y 262CONFIG_INET_DIAG=y
253CONFIG_INET_TCP_DIAG=y 263CONFIG_INET_TCP_DIAG=y
254# CONFIG_TCP_CONG_ADVANCED is not set 264# CONFIG_TCP_CONG_ADVANCED is not set
@@ -306,6 +316,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
306# 316#
307# Generic Driver Options 317# Generic Driver Options
308# 318#
319CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
309CONFIG_STANDALONE=y 320CONFIG_STANDALONE=y
310CONFIG_PREVENT_FIRMWARE_BUILD=y 321CONFIG_PREVENT_FIRMWARE_BUILD=y
311CONFIG_FW_LOADER=y 322CONFIG_FW_LOADER=y
@@ -332,6 +343,7 @@ CONFIG_MTD_BLOCK=y
332# CONFIG_INFTL is not set 343# CONFIG_INFTL is not set
333# CONFIG_RFD_FTL is not set 344# CONFIG_RFD_FTL is not set
334# CONFIG_SSFDC is not set 345# CONFIG_SSFDC is not set
346# CONFIG_MTD_OOPS is not set
335 347
336# 348#
337# RAM/ROM/Flash chip drivers 349# RAM/ROM/Flash chip drivers
@@ -364,6 +376,7 @@ CONFIG_MTD_CFI_UTIL=y
364# CONFIG_MTD_COMPLEX_MAPPINGS is not set 376# CONFIG_MTD_COMPLEX_MAPPINGS is not set
365# CONFIG_MTD_PHYSMAP is not set 377# CONFIG_MTD_PHYSMAP is not set
366CONFIG_MTD_PHYSMAP_OF=y 378CONFIG_MTD_PHYSMAP_OF=y
379# CONFIG_MTD_INTEL_VR_NOR is not set
367# CONFIG_MTD_PLATRAM is not set 380# CONFIG_MTD_PLATRAM is not set
368 381
369# 382#
@@ -423,10 +436,6 @@ CONFIG_MISC_DEVICES=y
423# CONFIG_SCSI_NETLINK is not set 436# CONFIG_SCSI_NETLINK is not set
424# CONFIG_ATA is not set 437# CONFIG_ATA is not set
425# CONFIG_MD is not set 438# CONFIG_MD is not set
426
427#
428# Fusion MPT device support
429#
430# CONFIG_FUSION is not set 439# CONFIG_FUSION is not set
431 440
432# 441#
@@ -443,12 +452,36 @@ CONFIG_NETDEVICES=y
443# CONFIG_MACVLAN is not set 452# CONFIG_MACVLAN is not set
444# CONFIG_EQUALIZER is not set 453# CONFIG_EQUALIZER is not set
445# CONFIG_TUN is not set 454# CONFIG_TUN is not set
455# CONFIG_VETH is not set
456# CONFIG_IP1000 is not set
446# CONFIG_ARCNET is not set 457# CONFIG_ARCNET is not set
447# CONFIG_NET_ETHERNET is not set 458# CONFIG_PHYLIB is not set
459CONFIG_NET_ETHERNET=y
460# CONFIG_MII is not set
461# CONFIG_HAPPYMEAL is not set
462# CONFIG_SUNGEM is not set
463# CONFIG_CASSINI is not set
464# CONFIG_NET_VENDOR_3COM is not set
465# CONFIG_NET_TULIP is not set
466# CONFIG_HP100 is not set
467CONFIG_IBM_NEW_EMAC=y
468CONFIG_IBM_NEW_EMAC_RXB=128
469CONFIG_IBM_NEW_EMAC_TXB=64
470CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
471CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
472CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
473# CONFIG_IBM_NEW_EMAC_DEBUG is not set
474CONFIG_IBM_NEW_EMAC_ZMII=y
475# CONFIG_IBM_NEW_EMAC_RGMII is not set
476# CONFIG_IBM_NEW_EMAC_TAH is not set
477# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
478# CONFIG_NET_PCI is not set
479# CONFIG_B44 is not set
448CONFIG_NETDEV_1000=y 480CONFIG_NETDEV_1000=y
449# CONFIG_ACENIC is not set 481# CONFIG_ACENIC is not set
450# CONFIG_DL2K is not set 482# CONFIG_DL2K is not set
451# CONFIG_E1000 is not set 483# CONFIG_E1000 is not set
484# CONFIG_E1000E is not set
452# CONFIG_NS83820 is not set 485# CONFIG_NS83820 is not set
453# CONFIG_HAMACHI is not set 486# CONFIG_HAMACHI is not set
454# CONFIG_YELLOWFIN is not set 487# CONFIG_YELLOWFIN is not set
@@ -456,6 +489,7 @@ CONFIG_NETDEV_1000=y
456# CONFIG_SIS190 is not set 489# CONFIG_SIS190 is not set
457# CONFIG_SKGE is not set 490# CONFIG_SKGE is not set
458# CONFIG_SKY2 is not set 491# CONFIG_SKY2 is not set
492# CONFIG_SK98LIN is not set
459# CONFIG_VIA_VELOCITY is not set 493# CONFIG_VIA_VELOCITY is not set
460# CONFIG_TIGON3 is not set 494# CONFIG_TIGON3 is not set
461# CONFIG_BNX2 is not set 495# CONFIG_BNX2 is not set
@@ -464,11 +498,14 @@ CONFIG_NETDEV_1000=y
464CONFIG_NETDEV_10000=y 498CONFIG_NETDEV_10000=y
465# CONFIG_CHELSIO_T1 is not set 499# CONFIG_CHELSIO_T1 is not set
466# CONFIG_CHELSIO_T3 is not set 500# CONFIG_CHELSIO_T3 is not set
501# CONFIG_IXGBE is not set
467# CONFIG_IXGB is not set 502# CONFIG_IXGB is not set
468# CONFIG_S2IO is not set 503# CONFIG_S2IO is not set
469# CONFIG_MYRI10GE is not set 504# CONFIG_MYRI10GE is not set
470# CONFIG_NETXEN_NIC is not set 505# CONFIG_NETXEN_NIC is not set
506# CONFIG_NIU is not set
471# CONFIG_MLX4_CORE is not set 507# CONFIG_MLX4_CORE is not set
508# CONFIG_TEHUTI is not set
472# CONFIG_TR is not set 509# CONFIG_TR is not set
473 510
474# 511#
@@ -537,8 +574,6 @@ CONFIG_LEGACY_PTY_COUNT=256
537# CONFIG_GEN_RTC is not set 574# CONFIG_GEN_RTC is not set
538# CONFIG_R3964 is not set 575# CONFIG_R3964 is not set
539# CONFIG_APPLICOM is not set 576# CONFIG_APPLICOM is not set
540# CONFIG_AGP is not set
541# CONFIG_DRM is not set
542# CONFIG_RAW_DRIVER is not set 577# CONFIG_RAW_DRIVER is not set
543# CONFIG_TCG_TPM is not set 578# CONFIG_TCG_TPM is not set
544CONFIG_DEVPORT=y 579CONFIG_DEVPORT=y
@@ -554,6 +589,12 @@ CONFIG_DEVPORT=y
554# CONFIG_HWMON is not set 589# CONFIG_HWMON is not set
555 590
556# 591#
592# Sonics Silicon Backplane
593#
594CONFIG_SSB_POSSIBLE=y
595# CONFIG_SSB is not set
596
597#
557# Multifunction device drivers 598# Multifunction device drivers
558# 599#
559# CONFIG_MFD_SM501 is not set 600# CONFIG_MFD_SM501 is not set
@@ -568,16 +609,17 @@ CONFIG_DEVPORT=y
568# 609#
569# Graphics support 610# Graphics support
570# 611#
612# CONFIG_AGP is not set
613# CONFIG_DRM is not set
614# CONFIG_VGASTATE is not set
615# CONFIG_VIDEO_OUTPUT_CONTROL is not set
616# CONFIG_FB is not set
571# CONFIG_BACKLIGHT_LCD_SUPPORT is not set 617# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
572 618
573# 619#
574# Display device support 620# Display device support
575# 621#
576# CONFIG_DISPLAY_SUPPORT is not set 622# CONFIG_DISPLAY_SUPPORT is not set
577# CONFIG_VGASTATE is not set
578# CONFIG_VIDEO_OUTPUT_CONTROL is not set
579# CONFIG_FB is not set
580# CONFIG_FB_IBM_GXT4500 is not set
581 623
582# 624#
583# Sound 625# Sound
@@ -604,19 +646,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
604# CONFIG_RTC_CLASS is not set 646# CONFIG_RTC_CLASS is not set
605 647
606# 648#
607# DMA Engine support
608#
609# CONFIG_DMA_ENGINE is not set
610
611#
612# DMA Clients
613#
614
615#
616# DMA Devices
617#
618
619#
620# Userspace I/O 649# Userspace I/O
621# 650#
622# CONFIG_UIO is not set 651# CONFIG_UIO is not set
@@ -668,7 +697,6 @@ CONFIG_SYSFS=y
668CONFIG_TMPFS=y 697CONFIG_TMPFS=y
669# CONFIG_TMPFS_POSIX_ACL is not set 698# CONFIG_TMPFS_POSIX_ACL is not set
670# CONFIG_HUGETLB_PAGE is not set 699# CONFIG_HUGETLB_PAGE is not set
671CONFIG_RAMFS=y
672# CONFIG_CONFIGFS_FS is not set 700# CONFIG_CONFIGFS_FS is not set
673 701
674# 702#
@@ -684,10 +712,12 @@ CONFIG_RAMFS=y
684CONFIG_JFFS2_FS=y 712CONFIG_JFFS2_FS=y
685CONFIG_JFFS2_FS_DEBUG=0 713CONFIG_JFFS2_FS_DEBUG=0
686CONFIG_JFFS2_FS_WRITEBUFFER=y 714CONFIG_JFFS2_FS_WRITEBUFFER=y
715# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
687# CONFIG_JFFS2_SUMMARY is not set 716# CONFIG_JFFS2_SUMMARY is not set
688# CONFIG_JFFS2_FS_XATTR is not set 717# CONFIG_JFFS2_FS_XATTR is not set
689# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set 718# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
690CONFIG_JFFS2_ZLIB=y 719CONFIG_JFFS2_ZLIB=y
720# CONFIG_JFFS2_LZO is not set
691CONFIG_JFFS2_RTIME=y 721CONFIG_JFFS2_RTIME=y
692# CONFIG_JFFS2_RUBIN is not set 722# CONFIG_JFFS2_RUBIN is not set
693CONFIG_CRAMFS=y 723CONFIG_CRAMFS=y
@@ -696,10 +726,7 @@ CONFIG_CRAMFS=y
696# CONFIG_QNX4FS_FS is not set 726# CONFIG_QNX4FS_FS is not set
697# CONFIG_SYSV_FS is not set 727# CONFIG_SYSV_FS is not set
698# CONFIG_UFS_FS is not set 728# CONFIG_UFS_FS is not set
699 729CONFIG_NETWORK_FILESYSTEMS=y
700#
701# Network File Systems
702#
703CONFIG_NFS_FS=y 730CONFIG_NFS_FS=y
704CONFIG_NFS_V3=y 731CONFIG_NFS_V3=y
705# CONFIG_NFS_V3_ACL is not set 732# CONFIG_NFS_V3_ACL is not set
@@ -725,15 +752,7 @@ CONFIG_SUNRPC=y
725# 752#
726# CONFIG_PARTITION_ADVANCED is not set 753# CONFIG_PARTITION_ADVANCED is not set
727CONFIG_MSDOS_PARTITION=y 754CONFIG_MSDOS_PARTITION=y
728
729#
730# Native Language Support
731#
732# CONFIG_NLS is not set 755# CONFIG_NLS is not set
733
734#
735# Distributed Lock Manager
736#
737# CONFIG_DLM is not set 756# CONFIG_DLM is not set
738# CONFIG_UCC_SLOW is not set 757# CONFIG_UCC_SLOW is not set
739 758
@@ -787,6 +806,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
787# CONFIG_DEBUG_VM is not set 806# CONFIG_DEBUG_VM is not set
788# CONFIG_DEBUG_LIST is not set 807# CONFIG_DEBUG_LIST is not set
789CONFIG_FORCED_INLINING=y 808CONFIG_FORCED_INLINING=y
809# CONFIG_BOOT_PRINTK_DELAY is not set
790# CONFIG_RCU_TORTURE_TEST is not set 810# CONFIG_RCU_TORTURE_TEST is not set
791# CONFIG_FAULT_INJECTION is not set 811# CONFIG_FAULT_INJECTION is not set
792# CONFIG_DEBUG_STACKOVERFLOW is not set 812# CONFIG_DEBUG_STACKOVERFLOW is not set
@@ -801,6 +821,7 @@ CONFIG_FORCED_INLINING=y
801# 821#
802# CONFIG_KEYS is not set 822# CONFIG_KEYS is not set
803# CONFIG_SECURITY is not set 823# CONFIG_SECURITY is not set
824# CONFIG_SECURITY_FILE_CAPABILITIES is not set
804CONFIG_CRYPTO=y 825CONFIG_CRYPTO=y
805CONFIG_CRYPTO_ALGAPI=y 826CONFIG_CRYPTO_ALGAPI=y
806CONFIG_CRYPTO_BLKCIPHER=y 827CONFIG_CRYPTO_BLKCIPHER=y
@@ -820,6 +841,7 @@ CONFIG_CRYPTO_ECB=y
820CONFIG_CRYPTO_CBC=y 841CONFIG_CRYPTO_CBC=y
821CONFIG_CRYPTO_PCBC=y 842CONFIG_CRYPTO_PCBC=y
822# CONFIG_CRYPTO_LRW is not set 843# CONFIG_CRYPTO_LRW is not set
844# CONFIG_CRYPTO_XTS is not set
823# CONFIG_CRYPTO_CRYPTD is not set 845# CONFIG_CRYPTO_CRYPTD is not set
824CONFIG_CRYPTO_DES=y 846CONFIG_CRYPTO_DES=y
825# CONFIG_CRYPTO_FCRYPT is not set 847# CONFIG_CRYPTO_FCRYPT is not set
@@ -833,9 +855,12 @@ CONFIG_CRYPTO_DES=y
833# CONFIG_CRYPTO_ARC4 is not set 855# CONFIG_CRYPTO_ARC4 is not set
834# CONFIG_CRYPTO_KHAZAD is not set 856# CONFIG_CRYPTO_KHAZAD is not set
835# CONFIG_CRYPTO_ANUBIS is not set 857# CONFIG_CRYPTO_ANUBIS is not set
858# CONFIG_CRYPTO_SEED is not set
836# CONFIG_CRYPTO_DEFLATE is not set 859# CONFIG_CRYPTO_DEFLATE is not set
837# CONFIG_CRYPTO_MICHAEL_MIC is not set 860# CONFIG_CRYPTO_MICHAEL_MIC is not set
838# CONFIG_CRYPTO_CRC32C is not set 861# CONFIG_CRYPTO_CRC32C is not set
839# CONFIG_CRYPTO_CAMELLIA is not set 862# CONFIG_CRYPTO_CAMELLIA is not set
840# CONFIG_CRYPTO_TEST is not set 863# CONFIG_CRYPTO_TEST is not set
864# CONFIG_CRYPTO_AUTHENC is not set
841# CONFIG_CRYPTO_HW is not set 865# CONFIG_CRYPTO_HW is not set
866# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/walnut_defconfig b/arch/powerpc/configs/walnut_defconfig
index 7724292cc06d..02896ecba490 100644
--- a/arch/powerpc/configs/walnut_defconfig
+++ b/arch/powerpc/configs/walnut_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.23-rc4 3# Linux kernel version: 2.6.23
4# Wed Sep 5 12:06:37 2007 4# Thu Oct 18 12:54:18 2007
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -18,8 +18,13 @@ CONFIG_4xx=y
18# CONFIG_PPC_MM_SLICES is not set 18# CONFIG_PPC_MM_SLICES is not set
19CONFIG_NOT_COHERENT_CACHE=y 19CONFIG_NOT_COHERENT_CACHE=y
20CONFIG_PPC32=y 20CONFIG_PPC32=y
21CONFIG_WORD_SIZE=32
21CONFIG_PPC_MERGE=y 22CONFIG_PPC_MERGE=y
22CONFIG_MMU=y 23CONFIG_MMU=y
24CONFIG_GENERIC_CMOS_UPDATE=y
25CONFIG_GENERIC_TIME=y
26CONFIG_GENERIC_TIME_VSYSCALL=y
27CONFIG_GENERIC_CLOCKEVENTS=y
23CONFIG_GENERIC_HARDIRQS=y 28CONFIG_GENERIC_HARDIRQS=y
24CONFIG_IRQ_PER_CPU=y 29CONFIG_IRQ_PER_CPU=y
25CONFIG_RWSEM_XCHGADD_ALGORITHM=y 30CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -63,6 +68,8 @@ CONFIG_POSIX_MQUEUE=y
63# CONFIG_AUDIT is not set 68# CONFIG_AUDIT is not set
64# CONFIG_IKCONFIG is not set 69# CONFIG_IKCONFIG is not set
65CONFIG_LOG_BUF_SHIFT=14 70CONFIG_LOG_BUF_SHIFT=14
71CONFIG_FAIR_GROUP_SCHED=y
72CONFIG_FAIR_USER_SCHED=y
66CONFIG_SYSFS_DEPRECATED=y 73CONFIG_SYSFS_DEPRECATED=y
67# CONFIG_RELAY is not set 74# CONFIG_RELAY is not set
68CONFIG_BLK_DEV_INITRD=y 75CONFIG_BLK_DEV_INITRD=y
@@ -83,7 +90,6 @@ CONFIG_FUTEX=y
83CONFIG_ANON_INODES=y 90CONFIG_ANON_INODES=y
84CONFIG_EPOLL=y 91CONFIG_EPOLL=y
85CONFIG_SIGNALFD=y 92CONFIG_SIGNALFD=y
86CONFIG_TIMERFD=y
87CONFIG_EVENTFD=y 93CONFIG_EVENTFD=y
88CONFIG_SHMEM=y 94CONFIG_SHMEM=y
89CONFIG_VM_EVENT_COUNTERS=y 95CONFIG_VM_EVENT_COUNTERS=y
@@ -127,7 +133,9 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
127# CONFIG_PPC_CELL is not set 133# CONFIG_PPC_CELL is not set
128# CONFIG_PPC_CELL_NATIVE is not set 134# CONFIG_PPC_CELL_NATIVE is not set
129# CONFIG_PQ2ADS is not set 135# CONFIG_PQ2ADS is not set
136# CONFIG_KILAUEA is not set
130CONFIG_WALNUT=y 137CONFIG_WALNUT=y
138# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
131CONFIG_405GP=y 139CONFIG_405GP=y
132CONFIG_IBM405_ERR77=y 140CONFIG_IBM405_ERR77=y
133CONFIG_IBM405_ERR51=y 141CONFIG_IBM405_ERR51=y
@@ -148,6 +156,10 @@ CONFIG_IBM405_ERR51=y
148# Kernel options 156# Kernel options
149# 157#
150# CONFIG_HIGHMEM is not set 158# CONFIG_HIGHMEM is not set
159# CONFIG_TICK_ONESHOT is not set
160# CONFIG_NO_HZ is not set
161# CONFIG_HIGH_RES_TIMERS is not set
162CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
151# CONFIG_HZ_100 is not set 163# CONFIG_HZ_100 is not set
152CONFIG_HZ_250=y 164CONFIG_HZ_250=y
153# CONFIG_HZ_300 is not set 165# CONFIG_HZ_300 is not set
@@ -169,6 +181,7 @@ CONFIG_FLATMEM_MANUAL=y
169CONFIG_FLATMEM=y 181CONFIG_FLATMEM=y
170CONFIG_FLAT_NODE_MEM_MAP=y 182CONFIG_FLAT_NODE_MEM_MAP=y
171# CONFIG_SPARSEMEM_STATIC is not set 183# CONFIG_SPARSEMEM_STATIC is not set
184# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
172CONFIG_SPLIT_PTLOCK_CPUS=4 185CONFIG_SPLIT_PTLOCK_CPUS=4
173CONFIG_RESOURCES_64BIT=y 186CONFIG_RESOURCES_64BIT=y
174CONFIG_ZONE_DMA_FLAG=1 187CONFIG_ZONE_DMA_FLAG=1
@@ -177,6 +190,8 @@ CONFIG_VIRT_TO_BUS=y
177CONFIG_PROC_DEVICETREE=y 190CONFIG_PROC_DEVICETREE=y
178# CONFIG_CMDLINE_BOOL is not set 191# CONFIG_CMDLINE_BOOL is not set
179# CONFIG_PM is not set 192# CONFIG_PM is not set
193CONFIG_SUSPEND_UP_POSSIBLE=y
194CONFIG_HIBERNATION_UP_POSSIBLE=y
180CONFIG_SECCOMP=y 195CONFIG_SECCOMP=y
181CONFIG_WANT_DEVICE_TREE=y 196CONFIG_WANT_DEVICE_TREE=y
182CONFIG_DEVICE_TREE="walnut.dts" 197CONFIG_DEVICE_TREE="walnut.dts"
@@ -190,10 +205,6 @@ CONFIG_ZONE_DMA=y
190# CONFIG_PCI_DOMAINS is not set 205# CONFIG_PCI_DOMAINS is not set
191# CONFIG_PCI_SYSCALL is not set 206# CONFIG_PCI_SYSCALL is not set
192# CONFIG_ARCH_SUPPORTS_MSI is not set 207# CONFIG_ARCH_SUPPORTS_MSI is not set
193
194#
195# PCCARD (PCMCIA/CardBus) support
196#
197# CONFIG_PCCARD is not set 208# CONFIG_PCCARD is not set
198 209
199# 210#
@@ -207,7 +218,7 @@ CONFIG_ZONE_DMA=y
207CONFIG_HIGHMEM_START=0xfe000000 218CONFIG_HIGHMEM_START=0xfe000000
208CONFIG_LOWMEM_SIZE=0x30000000 219CONFIG_LOWMEM_SIZE=0x30000000
209CONFIG_KERNEL_START=0xc0000000 220CONFIG_KERNEL_START=0xc0000000
210CONFIG_TASK_SIZE=0x80000000 221CONFIG_TASK_SIZE=0xc0000000
211CONFIG_CONSISTENT_START=0xff100000 222CONFIG_CONSISTENT_START=0xff100000
212CONFIG_CONSISTENT_SIZE=0x00200000 223CONFIG_CONSISTENT_SIZE=0x00200000
213CONFIG_BOOT_LOAD=0x00400000 224CONFIG_BOOT_LOAD=0x00400000
@@ -244,6 +255,7 @@ CONFIG_IP_PNP_BOOTP=y
244# CONFIG_INET_XFRM_MODE_TRANSPORT is not set 255# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
245# CONFIG_INET_XFRM_MODE_TUNNEL is not set 256# CONFIG_INET_XFRM_MODE_TUNNEL is not set
246# CONFIG_INET_XFRM_MODE_BEET is not set 257# CONFIG_INET_XFRM_MODE_BEET is not set
258# CONFIG_INET_LRO is not set
247CONFIG_INET_DIAG=y 259CONFIG_INET_DIAG=y
248CONFIG_INET_TCP_DIAG=y 260CONFIG_INET_TCP_DIAG=y
249# CONFIG_TCP_CONG_ADVANCED is not set 261# CONFIG_TCP_CONG_ADVANCED is not set
@@ -301,6 +313,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
301# 313#
302# Generic Driver Options 314# Generic Driver Options
303# 315#
316CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
304CONFIG_STANDALONE=y 317CONFIG_STANDALONE=y
305CONFIG_PREVENT_FIRMWARE_BUILD=y 318CONFIG_PREVENT_FIRMWARE_BUILD=y
306CONFIG_FW_LOADER=y 319CONFIG_FW_LOADER=y
@@ -328,6 +341,7 @@ CONFIG_MTD_BLOCK=m
328# CONFIG_INFTL is not set 341# CONFIG_INFTL is not set
329# CONFIG_RFD_FTL is not set 342# CONFIG_RFD_FTL is not set
330# CONFIG_SSFDC is not set 343# CONFIG_SSFDC is not set
344# CONFIG_MTD_OOPS is not set
331 345
332# 346#
333# RAM/ROM/Flash chip drivers 347# RAM/ROM/Flash chip drivers
@@ -360,7 +374,6 @@ CONFIG_MTD_CFI_UTIL=y
360# CONFIG_MTD_COMPLEX_MAPPINGS is not set 374# CONFIG_MTD_COMPLEX_MAPPINGS is not set
361# CONFIG_MTD_PHYSMAP is not set 375# CONFIG_MTD_PHYSMAP is not set
362CONFIG_MTD_PHYSMAP_OF=y 376CONFIG_MTD_PHYSMAP_OF=y
363# CONFIG_MTD_WALNUT is not set
364# CONFIG_MTD_PLATRAM is not set 377# CONFIG_MTD_PLATRAM is not set
365 378
366# 379#
@@ -419,7 +432,22 @@ CONFIG_NETDEVICES=y
419# CONFIG_MACVLAN is not set 432# CONFIG_MACVLAN is not set
420# CONFIG_EQUALIZER is not set 433# CONFIG_EQUALIZER is not set
421# CONFIG_TUN is not set 434# CONFIG_TUN is not set
422# CONFIG_NET_ETHERNET is not set 435# CONFIG_VETH is not set
436# CONFIG_PHYLIB is not set
437CONFIG_NET_ETHERNET=y
438# CONFIG_MII is not set
439CONFIG_IBM_NEW_EMAC=y
440CONFIG_IBM_NEW_EMAC_RXB=128
441CONFIG_IBM_NEW_EMAC_TXB=64
442CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
443CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
444CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
445# CONFIG_IBM_NEW_EMAC_DEBUG is not set
446CONFIG_IBM_NEW_EMAC_ZMII=y
447# CONFIG_IBM_NEW_EMAC_RGMII is not set
448# CONFIG_IBM_NEW_EMAC_TAH is not set
449# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
450# CONFIG_B44 is not set
423CONFIG_NETDEV_1000=y 451CONFIG_NETDEV_1000=y
424CONFIG_NETDEV_10000=y 452CONFIG_NETDEV_10000=y
425 453
@@ -498,6 +526,12 @@ CONFIG_LEGACY_PTY_COUNT=256
498# CONFIG_HWMON is not set 526# CONFIG_HWMON is not set
499 527
500# 528#
529# Sonics Silicon Backplane
530#
531CONFIG_SSB_POSSIBLE=y
532# CONFIG_SSB is not set
533
534#
501# Multifunction device drivers 535# Multifunction device drivers
502# 536#
503# CONFIG_MFD_SM501 is not set 537# CONFIG_MFD_SM501 is not set
@@ -512,16 +546,15 @@ CONFIG_LEGACY_PTY_COUNT=256
512# 546#
513# Graphics support 547# Graphics support
514# 548#
549# CONFIG_VGASTATE is not set
550CONFIG_VIDEO_OUTPUT_CONTROL=m
551# CONFIG_FB is not set
515# CONFIG_BACKLIGHT_LCD_SUPPORT is not set 552# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
516 553
517# 554#
518# Display device support 555# Display device support
519# 556#
520# CONFIG_DISPLAY_SUPPORT is not set 557# CONFIG_DISPLAY_SUPPORT is not set
521# CONFIG_VGASTATE is not set
522CONFIG_VIDEO_OUTPUT_CONTROL=m
523# CONFIG_FB is not set
524# CONFIG_FB_IBM_GXT4500 is not set
525 558
526# 559#
527# Sound 560# Sound
@@ -546,19 +579,6 @@ CONFIG_USB_SUPPORT=y
546# CONFIG_RTC_CLASS is not set 579# CONFIG_RTC_CLASS is not set
547 580
548# 581#
549# DMA Engine support
550#
551# CONFIG_DMA_ENGINE is not set
552
553#
554# DMA Clients
555#
556
557#
558# DMA Devices
559#
560
561#
562# Userspace I/O 582# Userspace I/O
563# 583#
564# CONFIG_UIO is not set 584# CONFIG_UIO is not set
@@ -610,7 +630,6 @@ CONFIG_SYSFS=y
610CONFIG_TMPFS=y 630CONFIG_TMPFS=y
611# CONFIG_TMPFS_POSIX_ACL is not set 631# CONFIG_TMPFS_POSIX_ACL is not set
612# CONFIG_HUGETLB_PAGE is not set 632# CONFIG_HUGETLB_PAGE is not set
613CONFIG_RAMFS=y
614# CONFIG_CONFIGFS_FS is not set 633# CONFIG_CONFIGFS_FS is not set
615 634
616# 635#
@@ -630,10 +649,7 @@ CONFIG_CRAMFS=y
630# CONFIG_QNX4FS_FS is not set 649# CONFIG_QNX4FS_FS is not set
631# CONFIG_SYSV_FS is not set 650# CONFIG_SYSV_FS is not set
632# CONFIG_UFS_FS is not set 651# CONFIG_UFS_FS is not set
633 652CONFIG_NETWORK_FILESYSTEMS=y
634#
635# Network File Systems
636#
637CONFIG_NFS_FS=y 653CONFIG_NFS_FS=y
638CONFIG_NFS_V3=y 654CONFIG_NFS_V3=y
639# CONFIG_NFS_V3_ACL is not set 655# CONFIG_NFS_V3_ACL is not set
@@ -659,15 +675,7 @@ CONFIG_SUNRPC=y
659# 675#
660# CONFIG_PARTITION_ADVANCED is not set 676# CONFIG_PARTITION_ADVANCED is not set
661CONFIG_MSDOS_PARTITION=y 677CONFIG_MSDOS_PARTITION=y
662
663#
664# Native Language Support
665#
666# CONFIG_NLS is not set 678# CONFIG_NLS is not set
667
668#
669# Distributed Lock Manager
670#
671# CONFIG_DLM is not set 679# CONFIG_DLM is not set
672# CONFIG_UCC_SLOW is not set 680# CONFIG_UCC_SLOW is not set
673 681
@@ -720,6 +728,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
720# CONFIG_DEBUG_VM is not set 728# CONFIG_DEBUG_VM is not set
721# CONFIG_DEBUG_LIST is not set 729# CONFIG_DEBUG_LIST is not set
722CONFIG_FORCED_INLINING=y 730CONFIG_FORCED_INLINING=y
731# CONFIG_BOOT_PRINTK_DELAY is not set
723# CONFIG_RCU_TORTURE_TEST is not set 732# CONFIG_RCU_TORTURE_TEST is not set
724# CONFIG_FAULT_INJECTION is not set 733# CONFIG_FAULT_INJECTION is not set
725# CONFIG_DEBUG_STACKOVERFLOW is not set 734# CONFIG_DEBUG_STACKOVERFLOW is not set
@@ -734,6 +743,7 @@ CONFIG_FORCED_INLINING=y
734# 743#
735# CONFIG_KEYS is not set 744# CONFIG_KEYS is not set
736# CONFIG_SECURITY is not set 745# CONFIG_SECURITY is not set
746# CONFIG_SECURITY_FILE_CAPABILITIES is not set
737CONFIG_CRYPTO=y 747CONFIG_CRYPTO=y
738CONFIG_CRYPTO_ALGAPI=y 748CONFIG_CRYPTO_ALGAPI=y
739CONFIG_CRYPTO_BLKCIPHER=y 749CONFIG_CRYPTO_BLKCIPHER=y
@@ -753,6 +763,7 @@ CONFIG_CRYPTO_ECB=y
753CONFIG_CRYPTO_CBC=y 763CONFIG_CRYPTO_CBC=y
754CONFIG_CRYPTO_PCBC=y 764CONFIG_CRYPTO_PCBC=y
755# CONFIG_CRYPTO_LRW is not set 765# CONFIG_CRYPTO_LRW is not set
766# CONFIG_CRYPTO_XTS is not set
756# CONFIG_CRYPTO_CRYPTD is not set 767# CONFIG_CRYPTO_CRYPTD is not set
757CONFIG_CRYPTO_DES=y 768CONFIG_CRYPTO_DES=y
758# CONFIG_CRYPTO_FCRYPT is not set 769# CONFIG_CRYPTO_FCRYPT is not set
@@ -766,9 +777,12 @@ CONFIG_CRYPTO_DES=y
766# CONFIG_CRYPTO_ARC4 is not set 777# CONFIG_CRYPTO_ARC4 is not set
767# CONFIG_CRYPTO_KHAZAD is not set 778# CONFIG_CRYPTO_KHAZAD is not set
768# CONFIG_CRYPTO_ANUBIS is not set 779# CONFIG_CRYPTO_ANUBIS is not set
780# CONFIG_CRYPTO_SEED is not set
769# CONFIG_CRYPTO_DEFLATE is not set 781# CONFIG_CRYPTO_DEFLATE is not set
770# CONFIG_CRYPTO_MICHAEL_MIC is not set 782# CONFIG_CRYPTO_MICHAEL_MIC is not set
771# CONFIG_CRYPTO_CRC32C is not set 783# CONFIG_CRYPTO_CRC32C is not set
772# CONFIG_CRYPTO_CAMELLIA is not set 784# CONFIG_CRYPTO_CAMELLIA is not set
773# CONFIG_CRYPTO_TEST is not set 785# CONFIG_CRYPTO_TEST is not set
786# CONFIG_CRYPTO_AUTHENC is not set
774CONFIG_CRYPTO_HW=y 787CONFIG_CRYPTO_HW=y
788# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/platforms/40x/Kconfig b/arch/powerpc/platforms/40x/Kconfig
index 47b3b0a3864a..8f6699fcc145 100644
--- a/arch/powerpc/platforms/40x/Kconfig
+++ b/arch/powerpc/platforms/40x/Kconfig
@@ -100,6 +100,7 @@ config 405GP
100 bool 100 bool
101 select IBM405_ERR77 101 select IBM405_ERR77
102 select IBM405_ERR51 102 select IBM405_ERR51
103 select IBM_NEW_EMAC_ZMII
103 104
104config 405EP 105config 405EP
105 bool 106 bool
diff --git a/arch/powerpc/platforms/44x/Kconfig b/arch/powerpc/platforms/44x/Kconfig
index 51f3ea40a285..8390cc164135 100644
--- a/arch/powerpc/platforms/44x/Kconfig
+++ b/arch/powerpc/platforms/44x/Kconfig
@@ -43,14 +43,14 @@ config 440EP
43 bool 43 bool
44 select PPC_FPU 44 select PPC_FPU
45 select IBM440EP_ERR42 45 select IBM440EP_ERR42
46# select IBM_NEW_EMAC_ZMII 46 select IBM_NEW_EMAC_ZMII
47 47
48config 440EPX 48config 440EPX
49 bool 49 bool
50 select PPC_FPU 50 select PPC_FPU
51# Disabled until the new EMAC Driver is merged. 51 select IBM_NEW_EMAC_EMAC4
52# select IBM_NEW_EMAC_EMAC4 52 select IBM_NEW_EMAC_RGMII
53# select IBM_NEW_EMAC_ZMII 53 select IBM_NEW_EMAC_ZMII
54 54
55config 440GP 55config 440GP
56 bool 56 bool
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
index 3c7325ec36ec..99684ea606af 100644
--- a/arch/powerpc/platforms/Kconfig.cputype
+++ b/arch/powerpc/platforms/Kconfig.cputype
@@ -48,6 +48,7 @@ config 44x
48 bool "AMCC 44x" 48 bool "AMCC 44x"
49 select PPC_DCR_NATIVE 49 select PPC_DCR_NATIVE
50 select WANT_DEVICE_TREE 50 select WANT_DEVICE_TREE
51 select PPC_UDBG_16550
51 52
52config E200 53config E200
53 bool "Freescale e200" 54 bool "Freescale e200"
diff --git a/arch/sparc64/kernel/iommu_common.c b/arch/sparc64/kernel/iommu_common.c
index 78e8277df655..b70324e0d83d 100644
--- a/arch/sparc64/kernel/iommu_common.c
+++ b/arch/sparc64/kernel/iommu_common.c
@@ -233,6 +233,11 @@ unsigned long prepare_sg(struct scatterlist *sg, int nents)
233 dma_sg->dma_address = dent_addr; 233 dma_sg->dma_address = dent_addr;
234 dma_sg->dma_length = dent_len; 234 dma_sg->dma_length = dent_len;
235 235
236 if (dma_sg != sg) {
237 dma_sg = next_sg(dma_sg);
238 dma_sg->dma_length = 0;
239 }
240
236 return ((unsigned long) dent_addr + 241 return ((unsigned long) dent_addr +
237 (unsigned long) dent_len + 242 (unsigned long) dent_len +
238 (IO_PAGE_SIZE - 1UL)) >> IO_PAGE_SHIFT; 243 (IO_PAGE_SIZE - 1UL)) >> IO_PAGE_SHIFT;
diff --git a/block/ll_rw_blk.c b/block/ll_rw_blk.c
index 61c2e396f2fa..de5ba479c224 100644
--- a/block/ll_rw_blk.c
+++ b/block/ll_rw_blk.c
@@ -1351,11 +1351,21 @@ int blk_rq_map_sg(struct request_queue *q, struct request *rq,
1351new_segment: 1351new_segment:
1352 if (!sg) 1352 if (!sg)
1353 sg = sglist; 1353 sg = sglist;
1354 else 1354 else {
1355 /*
1356 * If the driver previously mapped a shorter
1357 * list, we could see a termination bit
1358 * prematurely unless it fully inits the sg
1359 * table on each mapping. We KNOW that there
1360 * must be more entries here or the driver
1361 * would be buggy, so force clear the
1362 * termination bit to avoid doing a full
1363 * sg_init_table() in drivers for each command.
1364 */
1365 sg->page_link &= ~0x02;
1355 sg = sg_next(sg); 1366 sg = sg_next(sg);
1367 }
1356 1368
1357 sg_dma_len(sg) = 0;
1358 sg_dma_address(sg) = 0;
1359 sg_set_page(sg, bvec->bv_page); 1369 sg_set_page(sg, bvec->bv_page);
1360 sg->length = nbytes; 1370 sg->length = nbytes;
1361 sg->offset = bvec->bv_offset; 1371 sg->offset = bvec->bv_offset;
diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
index d1bd0f08a331..e4f579c3e245 100644
--- a/drivers/char/cyclades.c
+++ b/drivers/char/cyclades.c
@@ -1602,8 +1602,8 @@ static void cyz_handle_tx(struct cyclades_port *info,
1602 info->icount.tx++; 1602 info->icount.tx++;
1603 } 1603 }
1604#endif 1604#endif
1605ztxdone:
1606 tty_wakeup(tty); 1605 tty_wakeup(tty);
1606ztxdone:
1607 /* Update tx_put */ 1607 /* Update tx_put */
1608 cy_writel(&buf_ctrl->tx_put, tx_put); 1608 cy_writel(&buf_ctrl->tx_put, tx_put);
1609 } 1609 }
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index ec55a173c08a..6a6f2e066b46 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -47,6 +47,7 @@
47#include <linux/spinlock.h> 47#include <linux/spinlock.h>
48#include <linux/kmod.h> 48#include <linux/kmod.h>
49#include <linux/pci.h> 49#include <linux/pci.h>
50#include <linux/scatterlist.h>
50 51
51#include <asm/byteorder.h> 52#include <asm/byteorder.h>
52#include <asm/irq.h> 53#include <asm/irq.h>
diff --git a/drivers/infiniband/hw/ehca/ehca_mrmw.c b/drivers/infiniband/hw/ehca/ehca_mrmw.c
index da88738265ed..ead7230d7738 100644
--- a/drivers/infiniband/hw/ehca/ehca_mrmw.c
+++ b/drivers/infiniband/hw/ehca/ehca_mrmw.c
@@ -1776,7 +1776,7 @@ static int ehca_set_pagebuf_user1(struct ehca_mr_pginfo *pginfo,
1776 list_for_each_entry_continue( 1776 list_for_each_entry_continue(
1777 chunk, (&(pginfo->u.usr.region->chunk_list)), list) { 1777 chunk, (&(pginfo->u.usr.region->chunk_list)), list) {
1778 for (i = pginfo->u.usr.next_nmap; i < chunk->nmap; ) { 1778 for (i = pginfo->u.usr.next_nmap; i < chunk->nmap; ) {
1779 pgaddr = page_to_pfn(chunk->page_list[i].page) 1779 pgaddr = page_to_pfn(sg_page(&chunk->page_list[i]))
1780 << PAGE_SHIFT ; 1780 << PAGE_SHIFT ;
1781 *kpage = phys_to_abs(pgaddr + 1781 *kpage = phys_to_abs(pgaddr +
1782 (pginfo->next_hwpage * 1782 (pginfo->next_hwpage *
@@ -1832,7 +1832,7 @@ static int ehca_check_kpages_per_ate(struct scatterlist *page_list,
1832{ 1832{
1833 int t; 1833 int t;
1834 for (t = start_idx; t <= end_idx; t++) { 1834 for (t = start_idx; t <= end_idx; t++) {
1835 u64 pgaddr = page_to_pfn(page_list[t].page) << PAGE_SHIFT; 1835 u64 pgaddr = page_to_pfn(sg_page(&page_list[t])) << PAGE_SHIFT;
1836 ehca_gen_dbg("chunk_page=%lx value=%016lx", pgaddr, 1836 ehca_gen_dbg("chunk_page=%lx value=%016lx", pgaddr,
1837 *(u64 *)abs_to_virt(phys_to_abs(pgaddr))); 1837 *(u64 *)abs_to_virt(phys_to_abs(pgaddr)));
1838 if (pgaddr - PAGE_SIZE != *prev_pgaddr) { 1838 if (pgaddr - PAGE_SIZE != *prev_pgaddr) {
@@ -1867,7 +1867,7 @@ static int ehca_set_pagebuf_user2(struct ehca_mr_pginfo *pginfo,
1867 chunk, (&(pginfo->u.usr.region->chunk_list)), list) { 1867 chunk, (&(pginfo->u.usr.region->chunk_list)), list) {
1868 for (i = pginfo->u.usr.next_nmap; i < chunk->nmap; ) { 1868 for (i = pginfo->u.usr.next_nmap; i < chunk->nmap; ) {
1869 if (nr_kpages == kpages_per_hwpage) { 1869 if (nr_kpages == kpages_per_hwpage) {
1870 pgaddr = ( page_to_pfn(chunk->page_list[i].page) 1870 pgaddr = ( page_to_pfn(sg_page(&chunk->page_list[i]))
1871 << PAGE_SHIFT ); 1871 << PAGE_SHIFT );
1872 *kpage = phys_to_abs(pgaddr); 1872 *kpage = phys_to_abs(pgaddr);
1873 if ( !(*kpage) ) { 1873 if ( !(*kpage) ) {
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
index 927cb34c4805..7c426d07a555 100644
--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
@@ -274,7 +274,7 @@ static int write_sb_page(struct bitmap *bitmap, struct page *page, int wait)
274 if (bitmap->offset < 0) { 274 if (bitmap->offset < 0) {
275 /* DATA BITMAP METADATA */ 275 /* DATA BITMAP METADATA */
276 if (bitmap->offset 276 if (bitmap->offset
277 + page->index * (PAGE_SIZE/512) 277 + (long)(page->index * (PAGE_SIZE/512))
278 + size/512 > 0) 278 + size/512 > 0)
279 /* bitmap runs in to metadata */ 279 /* bitmap runs in to metadata */
280 return -EINVAL; 280 return -EINVAL;
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 8ee181a01f52..80a67d789b72 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -376,7 +376,12 @@ static unsigned long get_stripe_work(struct stripe_head *sh)
376 ack++; 376 ack++;
377 377
378 sh->ops.count -= ack; 378 sh->ops.count -= ack;
379 BUG_ON(sh->ops.count < 0); 379 if (unlikely(sh->ops.count < 0)) {
380 printk(KERN_ERR "pending: %#lx ops.pending: %#lx ops.ack: %#lx "
381 "ops.complete: %#lx\n", pending, sh->ops.pending,
382 sh->ops.ack, sh->ops.complete);
383 BUG();
384 }
380 385
381 return pending; 386 return pending;
382} 387}
@@ -550,8 +555,7 @@ static void ops_complete_biofill(void *stripe_head_ref)
550 } 555 }
551 } 556 }
552 } 557 }
553 clear_bit(STRIPE_OP_BIOFILL, &sh->ops.ack); 558 set_bit(STRIPE_OP_BIOFILL, &sh->ops.complete);
554 clear_bit(STRIPE_OP_BIOFILL, &sh->ops.pending);
555 559
556 return_io(return_bi); 560 return_io(return_bi);
557 561
@@ -2893,6 +2897,13 @@ static void handle_stripe6(struct stripe_head *sh, struct page *tmp_page)
2893 s.expanded = test_bit(STRIPE_EXPAND_READY, &sh->state); 2897 s.expanded = test_bit(STRIPE_EXPAND_READY, &sh->state);
2894 /* Now to look around and see what can be done */ 2898 /* Now to look around and see what can be done */
2895 2899
2900 /* clean-up completed biofill operations */
2901 if (test_bit(STRIPE_OP_BIOFILL, &sh->ops.complete)) {
2902 clear_bit(STRIPE_OP_BIOFILL, &sh->ops.pending);
2903 clear_bit(STRIPE_OP_BIOFILL, &sh->ops.ack);
2904 clear_bit(STRIPE_OP_BIOFILL, &sh->ops.complete);
2905 }
2906
2896 rcu_read_lock(); 2907 rcu_read_lock();
2897 for (i=disks; i--; ) { 2908 for (i=disks; i--; ) {
2898 mdk_rdev_t *rdev; 2909 mdk_rdev_t *rdev;
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c
index 3aa3dca56ae6..a9eb1c516247 100644
--- a/drivers/mtd/chips/cfi_cmdset_0001.c
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c
@@ -85,6 +85,7 @@ static int cfi_intelext_point (struct mtd_info *mtd, loff_t from, size_t len,
85static void cfi_intelext_unpoint (struct mtd_info *mtd, u_char *addr, loff_t from, 85static void cfi_intelext_unpoint (struct mtd_info *mtd, u_char *addr, loff_t from,
86 size_t len); 86 size_t len);
87 87
88static int chip_ready (struct map_info *map, struct flchip *chip, unsigned long adr, int mode);
88static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode); 89static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode);
89static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr); 90static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr);
90#include "fwh_lock.h" 91#include "fwh_lock.h"
@@ -641,73 +642,13 @@ static int cfi_intelext_partition_fixup(struct mtd_info *mtd,
641/* 642/*
642 * *********** CHIP ACCESS FUNCTIONS *********** 643 * *********** CHIP ACCESS FUNCTIONS ***********
643 */ 644 */
644 645static int chip_ready (struct map_info *map, struct flchip *chip, unsigned long adr, int mode)
645static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode)
646{ 646{
647 DECLARE_WAITQUEUE(wait, current); 647 DECLARE_WAITQUEUE(wait, current);
648 struct cfi_private *cfi = map->fldrv_priv; 648 struct cfi_private *cfi = map->fldrv_priv;
649 map_word status, status_OK = CMD(0x80), status_PWS = CMD(0x01); 649 map_word status, status_OK = CMD(0x80), status_PWS = CMD(0x01);
650 unsigned long timeo;
651 struct cfi_pri_intelext *cfip = cfi->cmdset_priv; 650 struct cfi_pri_intelext *cfip = cfi->cmdset_priv;
652 651 unsigned long timeo = jiffies + HZ;
653 resettime:
654 timeo = jiffies + HZ;
655 retry:
656 if (chip->priv && (mode == FL_WRITING || mode == FL_ERASING || mode == FL_OTP_WRITE || mode == FL_SHUTDOWN)) {
657 /*
658 * OK. We have possibility for contension on the write/erase
659 * operations which are global to the real chip and not per
660 * partition. So let's fight it over in the partition which
661 * currently has authority on the operation.
662 *
663 * The rules are as follows:
664 *
665 * - any write operation must own shared->writing.
666 *
667 * - any erase operation must own _both_ shared->writing and
668 * shared->erasing.
669 *
670 * - contension arbitration is handled in the owner's context.
671 *
672 * The 'shared' struct can be read and/or written only when
673 * its lock is taken.
674 */
675 struct flchip_shared *shared = chip->priv;
676 struct flchip *contender;
677 spin_lock(&shared->lock);
678 contender = shared->writing;
679 if (contender && contender != chip) {
680 /*
681 * The engine to perform desired operation on this
682 * partition is already in use by someone else.
683 * Let's fight over it in the context of the chip
684 * currently using it. If it is possible to suspend,
685 * that other partition will do just that, otherwise
686 * it'll happily send us to sleep. In any case, when
687 * get_chip returns success we're clear to go ahead.
688 */
689 int ret = spin_trylock(contender->mutex);
690 spin_unlock(&shared->lock);
691 if (!ret)
692 goto retry;
693 spin_unlock(chip->mutex);
694 ret = get_chip(map, contender, contender->start, mode);
695 spin_lock(chip->mutex);
696 if (ret) {
697 spin_unlock(contender->mutex);
698 return ret;
699 }
700 timeo = jiffies + HZ;
701 spin_lock(&shared->lock);
702 spin_unlock(contender->mutex);
703 }
704
705 /* We now own it */
706 shared->writing = chip;
707 if (mode == FL_ERASING)
708 shared->erasing = chip;
709 spin_unlock(&shared->lock);
710 }
711 652
712 switch (chip->state) { 653 switch (chip->state) {
713 654
@@ -722,16 +663,11 @@ static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr
722 if (chip->priv && map_word_andequal(map, status, status_PWS, status_PWS)) 663 if (chip->priv && map_word_andequal(map, status, status_PWS, status_PWS))
723 break; 664 break;
724 665
725 if (time_after(jiffies, timeo)) {
726 printk(KERN_ERR "%s: Waiting for chip to be ready timed out. Status %lx\n",
727 map->name, status.x[0]);
728 return -EIO;
729 }
730 spin_unlock(chip->mutex); 666 spin_unlock(chip->mutex);
731 cfi_udelay(1); 667 cfi_udelay(1);
732 spin_lock(chip->mutex); 668 spin_lock(chip->mutex);
733 /* Someone else might have been playing with it. */ 669 /* Someone else might have been playing with it. */
734 goto retry; 670 return -EAGAIN;
735 } 671 }
736 672
737 case FL_READY: 673 case FL_READY:
@@ -809,10 +745,82 @@ static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr
809 schedule(); 745 schedule();
810 remove_wait_queue(&chip->wq, &wait); 746 remove_wait_queue(&chip->wq, &wait);
811 spin_lock(chip->mutex); 747 spin_lock(chip->mutex);
812 goto resettime; 748 return -EAGAIN;
813 } 749 }
814} 750}
815 751
752static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode)
753{
754 int ret;
755
756 retry:
757 if (chip->priv && (mode == FL_WRITING || mode == FL_ERASING
758 || mode == FL_OTP_WRITE || mode == FL_SHUTDOWN)) {
759 /*
760 * OK. We have possibility for contention on the write/erase
761 * operations which are global to the real chip and not per
762 * partition. So let's fight it over in the partition which
763 * currently has authority on the operation.
764 *
765 * The rules are as follows:
766 *
767 * - any write operation must own shared->writing.
768 *
769 * - any erase operation must own _both_ shared->writing and
770 * shared->erasing.
771 *
772 * - contention arbitration is handled in the owner's context.
773 *
774 * The 'shared' struct can be read and/or written only when
775 * its lock is taken.
776 */
777 struct flchip_shared *shared = chip->priv;
778 struct flchip *contender;
779 spin_lock(&shared->lock);
780 contender = shared->writing;
781 if (contender && contender != chip) {
782 /*
783 * The engine to perform desired operation on this
784 * partition is already in use by someone else.
785 * Let's fight over it in the context of the chip
786 * currently using it. If it is possible to suspend,
787 * that other partition will do just that, otherwise
788 * it'll happily send us to sleep. In any case, when
789 * get_chip returns success we're clear to go ahead.
790 */
791 ret = spin_trylock(contender->mutex);
792 spin_unlock(&shared->lock);
793 if (!ret)
794 goto retry;
795 spin_unlock(chip->mutex);
796 ret = chip_ready(map, contender, contender->start, mode);
797 spin_lock(chip->mutex);
798
799 if (ret == -EAGAIN) {
800 spin_unlock(contender->mutex);
801 goto retry;
802 }
803 if (ret) {
804 spin_unlock(contender->mutex);
805 return ret;
806 }
807 spin_lock(&shared->lock);
808 spin_unlock(contender->mutex);
809 }
810
811 /* We now own it */
812 shared->writing = chip;
813 if (mode == FL_ERASING)
814 shared->erasing = chip;
815 spin_unlock(&shared->lock);
816 }
817 ret = chip_ready(map, chip, adr, mode);
818 if (ret == -EAGAIN)
819 goto retry;
820
821 return ret;
822}
823
816static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr) 824static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr)
817{ 825{
818 struct cfi_private *cfi = map->fldrv_priv; 826 struct cfi_private *cfi = map->fldrv_priv;
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
index 8f9c3baeb38e..246d4512f64b 100644
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -300,7 +300,7 @@ config MTD_NAND_PLATFORM
300 via platform_data. 300 via platform_data.
301 301
302config MTD_ALAUDA 302config MTD_ALAUDA
303 tristate "MTD driver for Olympus MAUSB-10 and Fijufilm DPC-R1" 303 tristate "MTD driver for Olympus MAUSB-10 and Fujifilm DPC-R1"
304 depends on MTD_NAND && USB 304 depends on MTD_NAND && USB
305 help 305 help
306 These two (and possibly other) Alauda-based cardreaders for 306 These two (and possibly other) Alauda-based cardreaders for
diff --git a/drivers/mtd/nand/diskonchip.c b/drivers/mtd/nand/diskonchip.c
index ab9f5c5db38d..0e72153b3297 100644
--- a/drivers/mtd/nand/diskonchip.c
+++ b/drivers/mtd/nand/diskonchip.c
@@ -220,7 +220,7 @@ static int doc_ecc_decode(struct rs_control *rs, uint8_t *data, uint8_t *ecc)
220 } 220 }
221 } 221 }
222 /* If the parity is wrong, no rescue possible */ 222 /* If the parity is wrong, no rescue possible */
223 return parity ? -1 : nerr; 223 return parity ? -EBADMSG : nerr;
224} 224}
225 225
226static void DoC_Delay(struct doc_priv *doc, unsigned short cycles) 226static void DoC_Delay(struct doc_priv *doc, unsigned short cycles)
@@ -1034,7 +1034,7 @@ static int doc200x_correct_data(struct mtd_info *mtd, u_char *dat,
1034 WriteDOC(DOC_ECC_DIS, docptr, Mplus_ECCConf); 1034 WriteDOC(DOC_ECC_DIS, docptr, Mplus_ECCConf);
1035 else 1035 else
1036 WriteDOC(DOC_ECC_DIS, docptr, ECCConf); 1036 WriteDOC(DOC_ECC_DIS, docptr, ECCConf);
1037 if (no_ecc_failures && (ret == -1)) { 1037 if (no_ecc_failures && (ret == -EBADMSG)) {
1038 printk(KERN_ERR "suppressing ECC failure\n"); 1038 printk(KERN_ERR "suppressing ECC failure\n");
1039 ret = 0; 1039 ret = 0;
1040 } 1040 }
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index b4e0e7723894..e29c1da7f56e 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -789,7 +789,7 @@ static int nand_read_page_swecc(struct mtd_info *mtd, struct nand_chip *chip,
789 int stat; 789 int stat;
790 790
791 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]); 791 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
792 if (stat == -1) 792 if (stat < 0)
793 mtd->ecc_stats.failed++; 793 mtd->ecc_stats.failed++;
794 else 794 else
795 mtd->ecc_stats.corrected += stat; 795 mtd->ecc_stats.corrected += stat;
@@ -833,7 +833,7 @@ static int nand_read_page_hwecc(struct mtd_info *mtd, struct nand_chip *chip,
833 int stat; 833 int stat;
834 834
835 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]); 835 stat = chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]);
836 if (stat == -1) 836 if (stat < 0)
837 mtd->ecc_stats.failed++; 837 mtd->ecc_stats.failed++;
838 else 838 else
839 mtd->ecc_stats.corrected += stat; 839 mtd->ecc_stats.corrected += stat;
@@ -874,7 +874,7 @@ static int nand_read_page_syndrome(struct mtd_info *mtd, struct nand_chip *chip,
874 chip->read_buf(mtd, oob, eccbytes); 874 chip->read_buf(mtd, oob, eccbytes);
875 stat = chip->ecc.correct(mtd, p, oob, NULL); 875 stat = chip->ecc.correct(mtd, p, oob, NULL);
876 876
877 if (stat == -1) 877 if (stat < 0)
878 mtd->ecc_stats.failed++; 878 mtd->ecc_stats.failed++;
879 else 879 else
880 mtd->ecc_stats.corrected += stat; 880 mtd->ecc_stats.corrected += stat;
diff --git a/drivers/mtd/nand/nand_ecc.c b/drivers/mtd/nand/nand_ecc.c
index fde593e5e634..9003a135e050 100644
--- a/drivers/mtd/nand/nand_ecc.c
+++ b/drivers/mtd/nand/nand_ecc.c
@@ -189,7 +189,7 @@ int nand_correct_data(struct mtd_info *mtd, u_char *dat,
189 if(countbits(s0 | ((uint32_t)s1 << 8) | ((uint32_t)s2 <<16)) == 1) 189 if(countbits(s0 | ((uint32_t)s1 << 8) | ((uint32_t)s2 <<16)) == 1)
190 return 1; 190 return 1;
191 191
192 return -1; 192 return -EBADMSG;
193} 193}
194EXPORT_SYMBOL(nand_correct_data); 194EXPORT_SYMBOL(nand_correct_data);
195 195
diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c
index a7574807dc46..10490b48d9f7 100644
--- a/drivers/mtd/nand/nandsim.c
+++ b/drivers/mtd/nand/nandsim.c
@@ -511,7 +511,7 @@ static int init_nandsim(struct mtd_info *mtd)
511 } 511 }
512 512
513 if (ns->options & OPT_SMALLPAGE) { 513 if (ns->options & OPT_SMALLPAGE) {
514 if (ns->geom.totsz < (64 << 20)) { 514 if (ns->geom.totsz < (32 << 20)) {
515 ns->geom.pgaddrbytes = 3; 515 ns->geom.pgaddrbytes = 3;
516 ns->geom.secaddrbytes = 2; 516 ns->geom.secaddrbytes = 2;
517 } else { 517 } else {
diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c
index 21b921dd6aab..66f76e9618dd 100644
--- a/drivers/mtd/nand/s3c2410.c
+++ b/drivers/mtd/nand/s3c2410.c
@@ -488,12 +488,24 @@ static void s3c2410_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len)
488 readsb(this->IO_ADDR_R, buf, len); 488 readsb(this->IO_ADDR_R, buf, len);
489} 489}
490 490
491static void s3c2440_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len)
492{
493 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd);
494 readsl(info->regs + S3C2440_NFDATA, buf, len / 4);
495}
496
491static void s3c2410_nand_write_buf(struct mtd_info *mtd, const u_char *buf, int len) 497static void s3c2410_nand_write_buf(struct mtd_info *mtd, const u_char *buf, int len)
492{ 498{
493 struct nand_chip *this = mtd->priv; 499 struct nand_chip *this = mtd->priv;
494 writesb(this->IO_ADDR_W, buf, len); 500 writesb(this->IO_ADDR_W, buf, len);
495} 501}
496 502
503static void s3c2440_nand_write_buf(struct mtd_info *mtd, const u_char *buf, int len)
504{
505 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd);
506 writesl(info->regs + S3C2440_NFDATA, buf, len / 4);
507}
508
497/* device management functions */ 509/* device management functions */
498 510
499static int s3c2410_nand_remove(struct platform_device *pdev) 511static int s3c2410_nand_remove(struct platform_device *pdev)
@@ -604,6 +616,8 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info,
604 info->sel_bit = S3C2440_NFCONT_nFCE; 616 info->sel_bit = S3C2440_NFCONT_nFCE;
605 chip->cmd_ctrl = s3c2440_nand_hwcontrol; 617 chip->cmd_ctrl = s3c2440_nand_hwcontrol;
606 chip->dev_ready = s3c2440_nand_devready; 618 chip->dev_ready = s3c2440_nand_devready;
619 chip->read_buf = s3c2440_nand_read_buf;
620 chip->write_buf = s3c2440_nand_write_buf;
607 break; 621 break;
608 622
609 case TYPE_S3C2412: 623 case TYPE_S3C2412:
diff --git a/drivers/mtd/onenand/onenand_sim.c b/drivers/mtd/onenand/onenand_sim.c
index 0d89ad5776fa..d64200b7c94b 100644
--- a/drivers/mtd/onenand/onenand_sim.c
+++ b/drivers/mtd/onenand/onenand_sim.c
@@ -88,11 +88,11 @@ do { \
88 88
89/** 89/**
90 * onenand_lock_handle - Handle Lock scheme 90 * onenand_lock_handle - Handle Lock scheme
91 * @param this OneNAND device structure 91 * @this: OneNAND device structure
92 * @param cmd The command to be sent 92 * @cmd: The command to be sent
93 * 93 *
94 * Send lock command to OneNAND device. 94 * Send lock command to OneNAND device.
95 * The lock scheme is depends on chip type. 95 * The lock scheme depends on chip type.
96 */ 96 */
97static void onenand_lock_handle(struct onenand_chip *this, int cmd) 97static void onenand_lock_handle(struct onenand_chip *this, int cmd)
98{ 98{
@@ -131,8 +131,8 @@ static void onenand_lock_handle(struct onenand_chip *this, int cmd)
131 131
132/** 132/**
133 * onenand_bootram_handle - Handle BootRAM area 133 * onenand_bootram_handle - Handle BootRAM area
134 * @param this OneNAND device structure 134 * @this: OneNAND device structure
135 * @param cmd The command to be sent 135 * @cmd: The command to be sent
136 * 136 *
137 * Emulate BootRAM area. It is possible to do basic operation using BootRAM. 137 * Emulate BootRAM area. It is possible to do basic operation using BootRAM.
138 */ 138 */
@@ -153,10 +153,10 @@ static void onenand_bootram_handle(struct onenand_chip *this, int cmd)
153 153
154/** 154/**
155 * onenand_update_interrupt - Set interrupt register 155 * onenand_update_interrupt - Set interrupt register
156 * @param this OneNAND device structure 156 * @this: OneNAND device structure
157 * @param cmd The command to be sent 157 * @cmd: The command to be sent
158 * 158 *
159 * Update interrupt register. The status is depends on command. 159 * Update interrupt register. The status depends on command.
160 */ 160 */
161static void onenand_update_interrupt(struct onenand_chip *this, int cmd) 161static void onenand_update_interrupt(struct onenand_chip *this, int cmd)
162{ 162{
@@ -189,11 +189,12 @@ static void onenand_update_interrupt(struct onenand_chip *this, int cmd)
189} 189}
190 190
191/** 191/**
192 * onenand_check_overwrite - Check over-write if happend 192 * onenand_check_overwrite - Check if over-write happened
193 * @param dest The destination pointer 193 * @dest: The destination pointer
194 * @param src The source pointer 194 * @src: The source pointer
195 * @param count The length to be check 195 * @count: The length to be check
196 * @return 0 on same, otherwise 1 196 *
197 * Returns: 0 on same, otherwise 1
197 * 198 *
198 * Compare the source with destination 199 * Compare the source with destination
199 */ 200 */
@@ -213,10 +214,10 @@ static int onenand_check_overwrite(void *dest, void *src, size_t count)
213 214
214/** 215/**
215 * onenand_data_handle - Handle OneNAND Core and DataRAM 216 * onenand_data_handle - Handle OneNAND Core and DataRAM
216 * @param this OneNAND device structure 217 * @this: OneNAND device structure
217 * @param cmd The command to be sent 218 * @cmd: The command to be sent
218 * @param dataram Which dataram used 219 * @dataram: Which dataram used
219 * @param offset The offset to OneNAND Core 220 * @offset: The offset to OneNAND Core
220 * 221 *
221 * Copy data from OneNAND Core to DataRAM (read) 222 * Copy data from OneNAND Core to DataRAM (read)
222 * Copy data from DataRAM to OneNAND Core (write) 223 * Copy data from DataRAM to OneNAND Core (write)
@@ -295,8 +296,8 @@ static void onenand_data_handle(struct onenand_chip *this, int cmd,
295 296
296/** 297/**
297 * onenand_command_handle - Handle command 298 * onenand_command_handle - Handle command
298 * @param this OneNAND device structure 299 * @this: OneNAND device structure
299 * @param cmd The command to be sent 300 * @cmd: The command to be sent
300 * 301 *
301 * Emulate OneNAND command. 302 * Emulate OneNAND command.
302 */ 303 */
@@ -350,8 +351,8 @@ static void onenand_command_handle(struct onenand_chip *this, int cmd)
350 351
351/** 352/**
352 * onenand_writew - [OneNAND Interface] Emulate write operation 353 * onenand_writew - [OneNAND Interface] Emulate write operation
353 * @param value value to write 354 * @value: value to write
354 * @param addr address to write 355 * @addr: address to write
355 * 356 *
356 * Write OneNAND register with value 357 * Write OneNAND register with value
357 */ 358 */
@@ -373,7 +374,7 @@ static void onenand_writew(unsigned short value, void __iomem * addr)
373 374
374/** 375/**
375 * flash_init - Initialize OneNAND simulator 376 * flash_init - Initialize OneNAND simulator
376 * @param flash OneNAND simulaotr data strucutres 377 * @flash: OneNAND simulator data strucutres
377 * 378 *
378 * Initialize OneNAND simulator. 379 * Initialize OneNAND simulator.
379 */ 380 */
@@ -416,7 +417,7 @@ static int __init flash_init(struct onenand_flash *flash)
416 417
417/** 418/**
418 * flash_exit - Clean up OneNAND simulator 419 * flash_exit - Clean up OneNAND simulator
419 * @param flash OneNAND simulaotr data strucutres 420 * @flash: OneNAND simulator data structures
420 * 421 *
421 * Clean up OneNAND simulator. 422 * Clean up OneNAND simulator.
422 */ 423 */
@@ -424,7 +425,6 @@ static void flash_exit(struct onenand_flash *flash)
424{ 425{
425 vfree(ONENAND_CORE(flash)); 426 vfree(ONENAND_CORE(flash));
426 kfree(flash->base); 427 kfree(flash->base);
427 kfree(flash);
428} 428}
429 429
430static int __init onenand_sim_init(void) 430static int __init onenand_sim_init(void)
@@ -449,7 +449,7 @@ static int __init onenand_sim_init(void)
449 info->onenand.write_word = onenand_writew; 449 info->onenand.write_word = onenand_writew;
450 450
451 if (flash_init(&info->flash)) { 451 if (flash_init(&info->flash)) {
452 printk(KERN_ERR "Unable to allocat flash.\n"); 452 printk(KERN_ERR "Unable to allocate flash.\n");
453 kfree(ffchars); 453 kfree(ffchars);
454 kfree(info); 454 kfree(info);
455 return -ENOMEM; 455 return -ENOMEM;
diff --git a/drivers/net/fec.c b/drivers/net/fec.c
index 2b5782056dda..0fbf1bbbaee9 100644
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -751,13 +751,11 @@ mii_queue(struct net_device *dev, int regval, void (*func)(uint, struct net_devi
751 if (mii_head) { 751 if (mii_head) {
752 mii_tail->mii_next = mip; 752 mii_tail->mii_next = mip;
753 mii_tail = mip; 753 mii_tail = mip;
754 } 754 } else {
755 else {
756 mii_head = mii_tail = mip; 755 mii_head = mii_tail = mip;
757 fep->hwp->fec_mii_data = regval; 756 fep->hwp->fec_mii_data = regval;
758 } 757 }
759 } 758 } else {
760 else {
761 retval = 1; 759 retval = 1;
762 } 760 }
763 761
@@ -768,14 +766,11 @@ mii_queue(struct net_device *dev, int regval, void (*func)(uint, struct net_devi
768 766
769static void mii_do_cmd(struct net_device *dev, const phy_cmd_t *c) 767static void mii_do_cmd(struct net_device *dev, const phy_cmd_t *c)
770{ 768{
771 int k;
772
773 if(!c) 769 if(!c)
774 return; 770 return;
775 771
776 for(k = 0; (c+k)->mii_data != mk_mii_end; k++) { 772 for (; c->mii_data != mk_mii_end; c++)
777 mii_queue(dev, (c+k)->mii_data, (c+k)->funct); 773 mii_queue(dev, c->mii_data, c->funct);
778 }
779} 774}
780 775
781static void mii_parse_sr(uint mii_reg, struct net_device *dev) 776static void mii_parse_sr(uint mii_reg, struct net_device *dev)
@@ -792,7 +787,6 @@ static void mii_parse_sr(uint mii_reg, struct net_device *dev)
792 status |= PHY_STAT_FAULT; 787 status |= PHY_STAT_FAULT;
793 if (mii_reg & 0x0020) 788 if (mii_reg & 0x0020)
794 status |= PHY_STAT_ANC; 789 status |= PHY_STAT_ANC;
795
796 *s = status; 790 *s = status;
797} 791}
798 792
@@ -1239,7 +1233,6 @@ mii_link_interrupt(int irq, void * dev_id);
1239#endif 1233#endif
1240 1234
1241#if defined(CONFIG_M5272) 1235#if defined(CONFIG_M5272)
1242
1243/* 1236/*
1244 * Code specific to Coldfire 5272 setup. 1237 * Code specific to Coldfire 5272 setup.
1245 */ 1238 */
@@ -2020,8 +2013,7 @@ static void mii_relink(struct work_struct *work)
2020 & (PHY_STAT_100FDX | PHY_STAT_10FDX)) 2013 & (PHY_STAT_100FDX | PHY_STAT_10FDX))
2021 duplex = 1; 2014 duplex = 1;
2022 fec_restart(dev, duplex); 2015 fec_restart(dev, duplex);
2023 } 2016 } else
2024 else
2025 fec_stop(dev); 2017 fec_stop(dev);
2026 2018
2027#if 0 2019#if 0
@@ -2119,8 +2111,7 @@ mii_discover_phy(uint mii_reg, struct net_device *dev)
2119 fep->phy_id = phytype << 16; 2111 fep->phy_id = phytype << 16;
2120 mii_queue(dev, mk_mii_read(MII_REG_PHYIR2), 2112 mii_queue(dev, mk_mii_read(MII_REG_PHYIR2),
2121 mii_discover_phy3); 2113 mii_discover_phy3);
2122 } 2114 } else {
2123 else {
2124 fep->phy_addr++; 2115 fep->phy_addr++;
2125 mii_queue(dev, mk_mii_read(MII_REG_PHYIR1), 2116 mii_queue(dev, mk_mii_read(MII_REG_PHYIR1),
2126 mii_discover_phy); 2117 mii_discover_phy);
@@ -2574,8 +2565,7 @@ fec_restart(struct net_device *dev, int duplex)
2574 if (duplex) { 2565 if (duplex) {
2575 fecp->fec_r_cntrl = OPT_FRAME_SIZE | 0x04;/* MII enable */ 2566 fecp->fec_r_cntrl = OPT_FRAME_SIZE | 0x04;/* MII enable */
2576 fecp->fec_x_cntrl = 0x04; /* FD enable */ 2567 fecp->fec_x_cntrl = 0x04; /* FD enable */
2577 } 2568 } else {
2578 else {
2579 /* MII enable|No Rcv on Xmit */ 2569 /* MII enable|No Rcv on Xmit */
2580 fecp->fec_r_cntrl = OPT_FRAME_SIZE | 0x06; 2570 fecp->fec_r_cntrl = OPT_FRAME_SIZE | 0x06;
2581 fecp->fec_x_cntrl = 0x00; 2571 fecp->fec_x_cntrl = 0x00;
diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c
index b3c4dbff26b8..7c60cbd85dc8 100644
--- a/drivers/parisc/ccio-dma.c
+++ b/drivers/parisc/ccio-dma.c
@@ -42,6 +42,7 @@
42#include <linux/reboot.h> 42#include <linux/reboot.h>
43#include <linux/proc_fs.h> 43#include <linux/proc_fs.h>
44#include <linux/seq_file.h> 44#include <linux/seq_file.h>
45#include <linux/scatterlist.h>
45 46
46#include <asm/byteorder.h> 47#include <asm/byteorder.h>
47#include <asm/cache.h> /* for L1_CACHE_BYTES */ 48#include <asm/cache.h> /* for L1_CACHE_BYTES */
diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c
index e5c323936eae..e527a0e1d6c0 100644
--- a/drivers/parisc/sba_iommu.c
+++ b/drivers/parisc/sba_iommu.c
@@ -28,6 +28,7 @@
28#include <linux/mm.h> 28#include <linux/mm.h>
29#include <linux/string.h> 29#include <linux/string.h>
30#include <linux/pci.h> 30#include <linux/pci.h>
31#include <linux/scatterlist.h>
31 32
32#include <asm/byteorder.h> 33#include <asm/byteorder.h>
33#include <asm/io.h> 34#include <asm/io.h>
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
index b3d70310af49..0c4ab3b07274 100644
--- a/drivers/pci/intel-iommu.c
+++ b/drivers/pci/intel-iommu.c
@@ -1962,7 +1962,7 @@ static void intel_free_coherent(struct device *hwdev, size_t size,
1962 free_pages((unsigned long)vaddr, order); 1962 free_pages((unsigned long)vaddr, order);
1963} 1963}
1964 1964
1965#define SG_ENT_VIRT_ADDRESS(sg) (page_address((sg)->page) + (sg)->offset) 1965#define SG_ENT_VIRT_ADDRESS(sg) (sg_virt((sg)))
1966static void intel_unmap_sg(struct device *hwdev, struct scatterlist *sglist, 1966static void intel_unmap_sg(struct device *hwdev, struct scatterlist *sglist,
1967 int nelems, int dir) 1967 int nelems, int dir)
1968{ 1968{
@@ -2010,7 +2010,7 @@ static int intel_nontranslate_map_sg(struct device *hddev,
2010 struct scatterlist *sg; 2010 struct scatterlist *sg;
2011 2011
2012 for_each_sg(sglist, sg, nelems, i) { 2012 for_each_sg(sglist, sg, nelems, i) {
2013 BUG_ON(!sg->page); 2013 BUG_ON(!sg_page(sg));
2014 sg->dma_address = virt_to_bus(SG_ENT_VIRT_ADDRESS(sg)); 2014 sg->dma_address = virt_to_bus(SG_ENT_VIRT_ADDRESS(sg));
2015 sg->dma_length = sg->length; 2015 sg->dma_length = sg->length;
2016 } 2016 }
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
index 7507067351bd..fd5d0c1570df 100644
--- a/drivers/s390/scsi/zfcp_aux.c
+++ b/drivers/s390/scsi/zfcp_aux.c
@@ -559,6 +559,7 @@ zfcp_sg_list_alloc(struct zfcp_sg_list *sg_list, size_t size)
559 retval = -ENOMEM; 559 retval = -ENOMEM;
560 goto out; 560 goto out;
561 } 561 }
562 sg_init_table(sg_list->sg, sg_list->count);
562 563
563 for (i = 0, sg = sg_list->sg; i < sg_list->count; i++, sg++) { 564 for (i = 0, sg = sg_list->sg; i < sg_list->count; i++, sg++) {
564 sg->length = min(size, PAGE_SIZE); 565 sg->length = min(size, PAGE_SIZE);
diff --git a/drivers/s390/scsi/zfcp_def.h b/drivers/s390/scsi/zfcp_def.h
index 57cac7008e0b..326e7ee232cb 100644
--- a/drivers/s390/scsi/zfcp_def.h
+++ b/drivers/s390/scsi/zfcp_def.h
@@ -63,7 +63,7 @@
63static inline void * 63static inline void *
64zfcp_sg_to_address(struct scatterlist *list) 64zfcp_sg_to_address(struct scatterlist *list)
65{ 65{
66 return (void *) (page_address(list->page) + list->offset); 66 return sg_virt(list);
67} 67}
68 68
69/** 69/**
@@ -74,7 +74,7 @@ zfcp_sg_to_address(struct scatterlist *list)
74static inline void 74static inline void
75zfcp_address_to_sg(void *address, struct scatterlist *list) 75zfcp_address_to_sg(void *address, struct scatterlist *list)
76{ 76{
77 list->page = virt_to_page(address); 77 sg_set_page(list, virt_to_page(address));
78 list->offset = ((unsigned long) address) & (PAGE_SIZE - 1); 78 list->offset = ((unsigned long) address) & (PAGE_SIZE - 1);
79} 79}
80 80
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
index a6475a2bb8a7..9438d0b28799 100644
--- a/drivers/s390/scsi/zfcp_erp.c
+++ b/drivers/s390/scsi/zfcp_erp.c
@@ -308,13 +308,15 @@ zfcp_erp_adisc(struct zfcp_port *port)
308 if (send_els == NULL) 308 if (send_els == NULL)
309 goto nomem; 309 goto nomem;
310 310
311 send_els->req = kzalloc(sizeof(struct scatterlist), GFP_ATOMIC); 311 send_els->req = kmalloc(sizeof(struct scatterlist), GFP_ATOMIC);
312 if (send_els->req == NULL) 312 if (send_els->req == NULL)
313 goto nomem; 313 goto nomem;
314 sg_init_table(send_els->req, 1);
314 315
315 send_els->resp = kzalloc(sizeof(struct scatterlist), GFP_ATOMIC); 316 send_els->resp = kmalloc(sizeof(struct scatterlist), GFP_ATOMIC);
316 if (send_els->resp == NULL) 317 if (send_els->resp == NULL)
317 goto nomem; 318 goto nomem;
319 sg_init_table(send_els->resp, 1);
318 320
319 address = (void *) get_zeroed_page(GFP_ATOMIC); 321 address = (void *) get_zeroed_page(GFP_ATOMIC);
320 if (address == NULL) 322 if (address == NULL)
@@ -363,7 +365,7 @@ zfcp_erp_adisc(struct zfcp_port *port)
363 retval = -ENOMEM; 365 retval = -ENOMEM;
364 freemem: 366 freemem:
365 if (address != NULL) 367 if (address != NULL)
366 __free_pages(send_els->req->page, 0); 368 __free_pages(sg_page(send_els->req), 0);
367 if (send_els != NULL) { 369 if (send_els != NULL) {
368 kfree(send_els->req); 370 kfree(send_els->req);
369 kfree(send_els->resp); 371 kfree(send_els->resp);
@@ -437,7 +439,7 @@ zfcp_erp_adisc_handler(unsigned long data)
437 439
438 out: 440 out:
439 zfcp_port_put(port); 441 zfcp_port_put(port);
440 __free_pages(send_els->req->page, 0); 442 __free_pages(sg_page(send_els->req), 0);
441 kfree(send_els->req); 443 kfree(send_els->req);
442 kfree(send_els->resp); 444 kfree(send_els->resp);
443 kfree(send_els); 445 kfree(send_els);
diff --git a/drivers/scsi/ps3rom.c b/drivers/scsi/ps3rom.c
index 03f19b8d19c9..17b4a7c4618c 100644
--- a/drivers/scsi/ps3rom.c
+++ b/drivers/scsi/ps3rom.c
@@ -147,7 +147,7 @@ static int fetch_to_dev_buffer(struct scsi_cmnd *cmd, void *buf)
147 147
148 req_len = fin = 0; 148 req_len = fin = 0;
149 scsi_for_each_sg(cmd, sgpnt, scsi_sg_count(cmd), k) { 149 scsi_for_each_sg(cmd, sgpnt, scsi_sg_count(cmd), k) {
150 kaddr = kmap_atomic(sg_page(sgpnt->page), KM_IRQ0); 150 kaddr = kmap_atomic(sg_page(sgpnt), KM_IRQ0);
151 len = sgpnt->length; 151 len = sgpnt->length;
152 if ((req_len + len) > buflen) { 152 if ((req_len + len) > buflen) {
153 len = buflen - req_len; 153 len = buflen - req_len;
diff --git a/drivers/serial/mcf.c b/drivers/serial/mcf.c
new file mode 100644
index 000000000000..a7d4360ea7df
--- /dev/null
+++ b/drivers/serial/mcf.c
@@ -0,0 +1,653 @@
1/****************************************************************************/
2
3/*
4 * mcf.c -- Freescale ColdFire UART driver
5 *
6 * (C) Copyright 2003-2007, Greg Ungerer <gerg@snapgear.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 */
13
14/****************************************************************************/
15
16#include <linux/kernel.h>
17#include <linux/init.h>
18#include <linux/interrupt.h>
19#include <linux/module.h>
20#include <linux/console.h>
21#include <linux/tty.h>
22#include <linux/tty_flip.h>
23#include <linux/serial.h>
24#include <linux/serial_core.h>
25#include <linux/io.h>
26#include <asm/coldfire.h>
27#include <asm/mcfsim.h>
28#include <asm/mcfuart.h>
29#include <asm/nettel.h>
30
31/****************************************************************************/
32
33/*
34 * Some boards implement the DTR/DCD lines using GPIO lines, most
35 * don't. Dummy out the access macros for those that don't. Those
36 * that do should define these macros somewhere in there board
37 * specific inlude files.
38 */
39#if !defined(mcf_getppdcd)
40#define mcf_getppdcd(p) (1)
41#endif
42#if !defined(mcf_getppdtr)
43#define mcf_getppdtr(p) (1)
44#endif
45#if !defined(mcf_setppdtr)
46#define mcf_setppdtr(p, v) do { } while (0)
47#endif
48
49/****************************************************************************/
50
51/*
52 * Local per-uart structure.
53 */
54struct mcf_uart {
55 struct uart_port port;
56 unsigned int sigs; /* Local copy of line sigs */
57 unsigned char imr; /* Local IMR mirror */
58};
59
60/****************************************************************************/
61
62static unsigned int mcf_tx_empty(struct uart_port *port)
63{
64 return (readb(port->membase + MCFUART_USR) & MCFUART_USR_TXEMPTY) ?
65 TIOCSER_TEMT : 0;
66}
67
68/****************************************************************************/
69
70static unsigned int mcf_get_mctrl(struct uart_port *port)
71{
72 struct mcf_uart *pp = (struct mcf_uart *) port;
73 unsigned long flags;
74 unsigned int sigs;
75
76 spin_lock_irqsave(&port->lock, flags);
77 sigs = (readb(port->membase + MCFUART_UIPR) & MCFUART_UIPR_CTS) ?
78 0 : TIOCM_CTS;
79 sigs |= (pp->sigs & TIOCM_RTS);
80 sigs |= (mcf_getppdcd(port->line) ? TIOCM_CD : 0);
81 sigs |= (mcf_getppdtr(port->line) ? TIOCM_DTR : 0);
82 spin_unlock_irqrestore(&port->lock, flags);
83 return sigs;
84}
85
86/****************************************************************************/
87
88static void mcf_set_mctrl(struct uart_port *port, unsigned int sigs)
89{
90 struct mcf_uart *pp = (struct mcf_uart *) port;
91 unsigned long flags;
92
93 spin_lock_irqsave(&port->lock, flags);
94 pp->sigs = sigs;
95 mcf_setppdtr(port->line, (sigs & TIOCM_DTR));
96 if (sigs & TIOCM_RTS)
97 writeb(MCFUART_UOP_RTS, port->membase + MCFUART_UOP1);
98 else
99 writeb(MCFUART_UOP_RTS, port->membase + MCFUART_UOP0);
100 spin_unlock_irqrestore(&port->lock, flags);
101}
102
103/****************************************************************************/
104
105static void mcf_start_tx(struct uart_port *port)
106{
107 struct mcf_uart *pp = (struct mcf_uart *) port;
108 unsigned long flags;
109
110 spin_lock_irqsave(&port->lock, flags);
111 pp->imr |= MCFUART_UIR_TXREADY;
112 writeb(pp->imr, port->membase + MCFUART_UIMR);
113 spin_unlock_irqrestore(&port->lock, flags);
114}
115
116/****************************************************************************/
117
118static void mcf_stop_tx(struct uart_port *port)
119{
120 struct mcf_uart *pp = (struct mcf_uart *) port;
121 unsigned long flags;
122
123 spin_lock_irqsave(&port->lock, flags);
124 pp->imr &= ~MCFUART_UIR_TXREADY;
125 writeb(pp->imr, port->membase + MCFUART_UIMR);
126 spin_unlock_irqrestore(&port->lock, flags);
127}
128
129/****************************************************************************/
130
131static void mcf_stop_rx(struct uart_port *port)
132{
133 struct mcf_uart *pp = (struct mcf_uart *) port;
134 unsigned long flags;
135
136 spin_lock_irqsave(&port->lock, flags);
137 pp->imr &= ~MCFUART_UIR_RXREADY;
138 writeb(pp->imr, port->membase + MCFUART_UIMR);
139 spin_unlock_irqrestore(&port->lock, flags);
140}
141
142/****************************************************************************/
143
144static void mcf_break_ctl(struct uart_port *port, int break_state)
145{
146 unsigned long flags;
147
148 spin_lock_irqsave(&port->lock, flags);
149 if (break_state == -1)
150 writeb(MCFUART_UCR_CMDBREAKSTART, port->membase + MCFUART_UCR);
151 else
152 writeb(MCFUART_UCR_CMDBREAKSTOP, port->membase + MCFUART_UCR);
153 spin_unlock_irqrestore(&port->lock, flags);
154}
155
156/****************************************************************************/
157
158static void mcf_enable_ms(struct uart_port *port)
159{
160}
161
162/****************************************************************************/
163
164static int mcf_startup(struct uart_port *port)
165{
166 struct mcf_uart *pp = (struct mcf_uart *) port;
167 unsigned long flags;
168
169 spin_lock_irqsave(&port->lock, flags);
170
171 /* Reset UART, get it into known state... */
172 writeb(MCFUART_UCR_CMDRESETRX, port->membase + MCFUART_UCR);
173 writeb(MCFUART_UCR_CMDRESETTX, port->membase + MCFUART_UCR);
174
175 /* Enable the UART transmitter and receiver */
176 writeb(MCFUART_UCR_RXENABLE | MCFUART_UCR_TXENABLE,
177 port->membase + MCFUART_UCR);
178
179 /* Enable RX interrupts now */
180 pp->imr = MCFUART_UIR_RXREADY;
181 writeb(pp->imr, port->membase + MCFUART_UIMR);
182
183 spin_unlock_irqrestore(&port->lock, flags);
184
185 return 0;
186}
187
188/****************************************************************************/
189
190static void mcf_shutdown(struct uart_port *port)
191{
192 struct mcf_uart *pp = (struct mcf_uart *) port;
193 unsigned long flags;
194
195 spin_lock_irqsave(&port->lock, flags);
196
197 /* Disable all interrupts now */
198 pp->imr = 0;
199 writeb(pp->imr, port->membase + MCFUART_UIMR);
200
201 /* Disable UART transmitter and receiver */
202 writeb(MCFUART_UCR_CMDRESETRX, port->membase + MCFUART_UCR);
203 writeb(MCFUART_UCR_CMDRESETTX, port->membase + MCFUART_UCR);
204
205 spin_unlock_irqrestore(&port->lock, flags);
206}
207
208/****************************************************************************/
209
210static void mcf_set_termios(struct uart_port *port, struct ktermios *termios,
211 struct ktermios *old)
212{
213 unsigned long flags;
214 unsigned int baud, baudclk;
215 unsigned char mr1, mr2;
216
217 baud = uart_get_baud_rate(port, termios, old, 0, 230400);
218 baudclk = ((MCF_BUSCLK / baud) + 16) / 32;
219
220 mr1 = MCFUART_MR1_RXIRQRDY | MCFUART_MR1_RXERRCHAR;
221 mr2 = 0;
222
223 switch (termios->c_cflag & CSIZE) {
224 case CS5: mr1 |= MCFUART_MR1_CS5; break;
225 case CS6: mr1 |= MCFUART_MR1_CS6; break;
226 case CS7: mr1 |= MCFUART_MR1_CS7; break;
227 case CS8:
228 default: mr1 |= MCFUART_MR1_CS8; break;
229 }
230
231 if (termios->c_cflag & PARENB) {
232 if (termios->c_cflag & CMSPAR) {
233 if (termios->c_cflag & PARODD)
234 mr1 |= MCFUART_MR1_PARITYMARK;
235 else
236 mr1 |= MCFUART_MR1_PARITYSPACE;
237 } else {
238 if (termios->c_cflag & PARODD)
239 mr1 |= MCFUART_MR1_PARITYODD;
240 else
241 mr1 |= MCFUART_MR1_PARITYEVEN;
242 }
243 } else {
244 mr1 |= MCFUART_MR1_PARITYNONE;
245 }
246
247 if (termios->c_cflag & CSTOPB)
248 mr2 |= MCFUART_MR2_STOP2;
249 else
250 mr2 |= MCFUART_MR2_STOP1;
251
252 if (termios->c_cflag & CRTSCTS) {
253 mr1 |= MCFUART_MR1_RXRTS;
254 mr2 |= MCFUART_MR2_TXCTS;
255 }
256
257 spin_lock_irqsave(&port->lock, flags);
258 writeb(MCFUART_UCR_CMDRESETRX, port->membase + MCFUART_UCR);
259 writeb(MCFUART_UCR_CMDRESETTX, port->membase + MCFUART_UCR);
260 writeb(MCFUART_UCR_CMDRESETMRPTR, port->membase + MCFUART_UCR);
261 writeb(mr1, port->membase + MCFUART_UMR);
262 writeb(mr2, port->membase + MCFUART_UMR);
263 writeb((baudclk & 0xff00) >> 8, port->membase + MCFUART_UBG1);
264 writeb((baudclk & 0xff), port->membase + MCFUART_UBG2);
265 writeb(MCFUART_UCSR_RXCLKTIMER | MCFUART_UCSR_TXCLKTIMER,
266 port->membase + MCFUART_UCSR);
267 writeb(MCFUART_UCR_RXENABLE | MCFUART_UCR_TXENABLE,
268 port->membase + MCFUART_UCR);
269 spin_unlock_irqrestore(&port->lock, flags);
270}
271
272/****************************************************************************/
273
274static void mcf_rx_chars(struct mcf_uart *pp)
275{
276 struct uart_port *port = (struct uart_port *) pp;
277 unsigned char status, ch, flag;
278
279 while ((status = readb(port->membase + MCFUART_USR)) & MCFUART_USR_RXREADY) {
280 ch = readb(port->membase + MCFUART_URB);
281 flag = TTY_NORMAL;
282 port->icount.rx++;
283
284 if (status & MCFUART_USR_RXERR) {
285 writeb(MCFUART_UCR_CMDRESETERR,
286 port->membase + MCFUART_UCR);
287
288 if (status & MCFUART_USR_RXBREAK) {
289 port->icount.brk++;
290 if (uart_handle_break(port))
291 continue;
292 } else if (status & MCFUART_USR_RXPARITY) {
293 port->icount.parity++;
294 } else if (status & MCFUART_USR_RXOVERRUN) {
295 port->icount.overrun++;
296 } else if (status & MCFUART_USR_RXFRAMING) {
297 port->icount.frame++;
298 }
299
300 status &= port->read_status_mask;
301
302 if (status & MCFUART_USR_RXBREAK)
303 flag = TTY_BREAK;
304 else if (status & MCFUART_USR_RXPARITY)
305 flag = TTY_PARITY;
306 else if (status & MCFUART_USR_RXFRAMING)
307 flag = TTY_FRAME;
308 }
309
310 if (uart_handle_sysrq_char(port, ch))
311 continue;
312 uart_insert_char(port, status, MCFUART_USR_RXOVERRUN, ch, flag);
313 }
314
315 tty_flip_buffer_push(port->info->tty);
316}
317
318/****************************************************************************/
319
320static void mcf_tx_chars(struct mcf_uart *pp)
321{
322 struct uart_port *port = (struct uart_port *) pp;
323 struct circ_buf *xmit = &port->info->xmit;
324
325 if (port->x_char) {
326 /* Send special char - probably flow control */
327 writeb(port->x_char, port->membase + MCFUART_UTB);
328 port->x_char = 0;
329 port->icount.tx++;
330 return;
331 }
332
333 while (readb(port->membase + MCFUART_USR) & MCFUART_USR_TXREADY) {
334 if (xmit->head == xmit->tail)
335 break;
336 writeb(xmit->buf[xmit->tail], port->membase + MCFUART_UTB);
337 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE -1);
338 port->icount.tx++;
339 }
340
341 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
342 uart_write_wakeup(port);
343
344 if (xmit->head == xmit->tail) {
345 pp->imr &= ~MCFUART_UIR_TXREADY;
346 writeb(pp->imr, port->membase + MCFUART_UIMR);
347 }
348}
349
350/****************************************************************************/
351
352static irqreturn_t mcf_interrupt(int irq, void *data)
353{
354 struct uart_port *port = data;
355 struct mcf_uart *pp = (struct mcf_uart *) port;
356 unsigned int isr;
357
358 isr = readb(port->membase + MCFUART_UISR) & pp->imr;
359 if (isr & MCFUART_UIR_RXREADY)
360 mcf_rx_chars(pp);
361 if (isr & MCFUART_UIR_TXREADY)
362 mcf_tx_chars(pp);
363 return IRQ_HANDLED;
364}
365
366/****************************************************************************/
367
368static void mcf_config_port(struct uart_port *port, int flags)
369{
370 port->type = PORT_MCF;
371
372 /* Clear mask, so no surprise interrupts. */
373 writeb(0, port->membase + MCFUART_UIMR);
374
375 if (request_irq(port->irq, mcf_interrupt, IRQF_DISABLED, "UART", port))
376 printk(KERN_ERR "MCF: unable to attach ColdFire UART %d "
377 "interrupt vector=%d\n", port->line, port->irq);
378}
379
380/****************************************************************************/
381
382static const char *mcf_type(struct uart_port *port)
383{
384 return (port->type == PORT_MCF) ? "ColdFire UART" : NULL;
385}
386
387/****************************************************************************/
388
389static int mcf_request_port(struct uart_port *port)
390{
391 /* UARTs always present */
392 return 0;
393}
394
395/****************************************************************************/
396
397static void mcf_release_port(struct uart_port *port)
398{
399 /* Nothing to release... */
400}
401
402/****************************************************************************/
403
404static int mcf_verify_port(struct uart_port *port, struct serial_struct *ser)
405{
406 if ((ser->type != PORT_UNKNOWN) && (ser->type != PORT_MCF))
407 return -EINVAL;
408 return 0;
409}
410
411/****************************************************************************/
412
413/*
414 * Define the basic serial functions we support.
415 */
416static struct uart_ops mcf_uart_ops = {
417 .tx_empty = mcf_tx_empty,
418 .get_mctrl = mcf_get_mctrl,
419 .set_mctrl = mcf_set_mctrl,
420 .start_tx = mcf_start_tx,
421 .stop_tx = mcf_stop_tx,
422 .stop_rx = mcf_stop_rx,
423 .enable_ms = mcf_enable_ms,
424 .break_ctl = mcf_break_ctl,
425 .startup = mcf_startup,
426 .shutdown = mcf_shutdown,
427 .set_termios = mcf_set_termios,
428 .type = mcf_type,
429 .request_port = mcf_request_port,
430 .release_port = mcf_release_port,
431 .config_port = mcf_config_port,
432 .verify_port = mcf_verify_port,
433};
434
435static struct mcf_uart mcf_ports[3];
436
437#define MCF_MAXPORTS (sizeof(mcf_ports) / sizeof(struct mcf_uart))
438
439/****************************************************************************/
440#if defined(CONFIG_SERIAL_MCF_CONSOLE)
441/****************************************************************************/
442
443int __init early_mcf_setup(struct mcf_platform_uart *platp)
444{
445 struct uart_port *port;
446 int i;
447
448 for (i = 0; ((i < MCF_MAXPORTS) && (platp[i].mapbase)); i++) {
449 port = &mcf_ports[i].port;
450
451 port->line = i;
452 port->type = PORT_MCF;
453 port->mapbase = platp[i].mapbase;
454 port->membase = (platp[i].membase) ? platp[i].membase :
455 (unsigned char __iomem *) port->mapbase;
456 port->iotype = SERIAL_IO_MEM;
457 port->irq = platp[i].irq;
458 port->uartclk = MCF_BUSCLK;
459 port->flags = ASYNC_BOOT_AUTOCONF;
460 port->ops = &mcf_uart_ops;
461 }
462
463 return 0;
464}
465
466/****************************************************************************/
467
468static void mcf_console_putc(struct console *co, const char c)
469{
470 struct uart_port *port = &(mcf_ports + co->index)->port;
471 int i;
472
473 for (i = 0; (i < 0x10000); i++) {
474 if (readb(port->membase + MCFUART_USR) & MCFUART_USR_TXREADY)
475 break;
476 }
477 writeb(c, port->membase + MCFUART_UTB);
478 for (i = 0; (i < 0x10000); i++) {
479 if (readb(port->membase + MCFUART_USR) & MCFUART_USR_TXREADY)
480 break;
481 }
482}
483
484/****************************************************************************/
485
486static void mcf_console_write(struct console *co, const char *s, unsigned int count)
487{
488 for (; (count); count--, s++) {
489 mcf_console_putc(co, *s);
490 if (*s == '\n')
491 mcf_console_putc(co, '\r');
492 }
493}
494
495/****************************************************************************/
496
497static int __init mcf_console_setup(struct console *co, char *options)
498{
499 struct uart_port *port;
500 int baud = CONFIG_SERIAL_MCF_BAUDRATE;
501 int bits = 8;
502 int parity = 'n';
503 int flow = 'n';
504
505 if ((co->index >= 0) && (co->index <= MCF_MAXPORTS))
506 co->index = 0;
507 port = &mcf_ports[co->index].port;
508 if (port->membase == 0)
509 return -ENODEV;
510
511 if (options)
512 uart_parse_options(options, &baud, &parity, &bits, &flow);
513
514 return uart_set_options(port, co, baud, parity, bits, flow);
515}
516
517/****************************************************************************/
518
519static struct uart_driver mcf_driver;
520
521static struct console mcf_console = {
522 .name = "ttyS",
523 .write = mcf_console_write,
524 .device = uart_console_device,
525 .setup = mcf_console_setup,
526 .flags = CON_PRINTBUFFER,
527 .index = -1,
528 .data = &mcf_driver,
529};
530
531static int __init mcf_console_init(void)
532{
533 register_console(&mcf_console);
534 return 0;
535}
536
537console_initcall(mcf_console_init);
538
539#define MCF_CONSOLE &mcf_console
540
541/****************************************************************************/
542#else
543/****************************************************************************/
544
545#define MCF_CONSOLE NULL
546
547/****************************************************************************/
548#endif /* CONFIG_MCF_CONSOLE */
549/****************************************************************************/
550
551/*
552 * Define the mcf UART driver structure.
553 */
554static struct uart_driver mcf_driver = {
555 .owner = THIS_MODULE,
556 .driver_name = "mcf",
557 .dev_name = "ttyS",
558 .major = TTY_MAJOR,
559 .minor = 64,
560 .nr = MCF_MAXPORTS,
561 .cons = MCF_CONSOLE,
562};
563
564/****************************************************************************/
565
566static int __devinit mcf_probe(struct platform_device *pdev)
567{
568 struct mcf_platform_uart *platp = pdev->dev.platform_data;
569 struct uart_port *port;
570 int i;
571
572 for (i = 0; ((i < MCF_MAXPORTS) && (platp[i].mapbase)); i++) {
573 port = &mcf_ports[i].port;
574
575 port->line = i;
576 port->type = PORT_MCF;
577 port->mapbase = platp[i].mapbase;
578 port->membase = (platp[i].membase) ? platp[i].membase :
579 (unsigned char __iomem *) platp[i].mapbase;
580 port->iotype = SERIAL_IO_MEM;
581 port->irq = platp[i].irq;
582 port->uartclk = MCF_BUSCLK;
583 port->ops = &mcf_uart_ops;
584 port->flags = ASYNC_BOOT_AUTOCONF;
585
586 uart_add_one_port(&mcf_driver, port);
587 }
588
589 return 0;
590}
591
592/****************************************************************************/
593
594static int mcf_remove(struct platform_device *pdev)
595{
596 struct uart_port *port;
597 int i;
598
599 for (i = 0; (i < MCF_MAXPORTS); i++) {
600 port = &mcf_ports[i].port;
601 if (port)
602 uart_remove_one_port(&mcf_driver, port);
603 }
604
605 return 0;
606}
607
608/****************************************************************************/
609
610static struct platform_driver mcf_platform_driver = {
611 .probe = mcf_probe,
612 .remove = __devexit_p(mcf_remove),
613 .driver = {
614 .name = "mcfuart",
615 .owner = THIS_MODULE,
616 },
617};
618
619/****************************************************************************/
620
621static int __init mcf_init(void)
622{
623 int rc;
624
625 printk("ColdFire internal UART serial driver\n");
626
627 rc = uart_register_driver(&mcf_driver);
628 if (rc)
629 return rc;
630 rc = platform_driver_register(&mcf_platform_driver);
631 if (rc)
632 return rc;
633 return 0;
634}
635
636/****************************************************************************/
637
638static void __exit mcf_exit(void)
639{
640 platform_driver_unregister(&mcf_platform_driver);
641 uart_unregister_driver(&mcf_driver);
642}
643
644/****************************************************************************/
645
646module_init(mcf_init);
647module_exit(mcf_exit);
648
649MODULE_AUTHOR("Greg Ungerer <gerg@snapgear.com>");
650MODULE_DESCRIPTION("Freescale ColdFire UART driver");
651MODULE_LICENSE("GPL");
652
653/****************************************************************************/
diff --git a/fs/jffs2/acl.c b/fs/jffs2/acl.c
index 8ec9323e830a..9728614b8958 100644
--- a/fs/jffs2/acl.c
+++ b/fs/jffs2/acl.c
@@ -228,11 +228,28 @@ struct posix_acl *jffs2_get_acl(struct inode *inode, int type)
228 return acl; 228 return acl;
229} 229}
230 230
231static int __jffs2_set_acl(struct inode *inode, int xprefix, struct posix_acl *acl)
232{
233 char *value = NULL;
234 size_t size = 0;
235 int rc;
236
237 if (acl) {
238 value = jffs2_acl_to_medium(acl, &size);
239 if (IS_ERR(value))
240 return PTR_ERR(value);
241 }
242 rc = do_jffs2_setxattr(inode, xprefix, "", value, size, 0);
243 if (!value && rc == -ENODATA)
244 rc = 0;
245 kfree(value);
246
247 return rc;
248}
249
231static int jffs2_set_acl(struct inode *inode, int type, struct posix_acl *acl) 250static int jffs2_set_acl(struct inode *inode, int type, struct posix_acl *acl)
232{ 251{
233 struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); 252 struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
234 size_t size = 0;
235 char *value = NULL;
236 int rc, xprefix; 253 int rc, xprefix;
237 254
238 if (S_ISLNK(inode->i_mode)) 255 if (S_ISLNK(inode->i_mode))
@@ -267,17 +284,7 @@ static int jffs2_set_acl(struct inode *inode, int type, struct posix_acl *acl)
267 default: 284 default:
268 return -EINVAL; 285 return -EINVAL;
269 } 286 }
270 if (acl) { 287 rc = __jffs2_set_acl(inode, xprefix, acl);
271 value = jffs2_acl_to_medium(acl, &size);
272 if (IS_ERR(value))
273 return PTR_ERR(value);
274 }
275
276 rc = do_jffs2_setxattr(inode, xprefix, "", value, size, 0);
277 if (!value && rc == -ENODATA)
278 rc = 0;
279 if (value)
280 kfree(value);
281 if (!rc) { 288 if (!rc) {
282 switch(type) { 289 switch(type) {
283 case ACL_TYPE_ACCESS: 290 case ACL_TYPE_ACCESS:
@@ -312,37 +319,59 @@ int jffs2_permission(struct inode *inode, int mask, struct nameidata *nd)
312 return generic_permission(inode, mask, jffs2_check_acl); 319 return generic_permission(inode, mask, jffs2_check_acl);
313} 320}
314 321
315int jffs2_init_acl(struct inode *inode, struct posix_acl *acl) 322int jffs2_init_acl_pre(struct inode *dir_i, struct inode *inode, int *i_mode)
316{ 323{
317 struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode); 324 struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
318 struct posix_acl *clone; 325 struct posix_acl *acl, *clone;
319 mode_t mode; 326 int rc;
320 int rc = 0;
321 327
322 f->i_acl_access = JFFS2_ACL_NOT_CACHED; 328 f->i_acl_default = NULL;
323 f->i_acl_default = JFFS2_ACL_NOT_CACHED; 329 f->i_acl_access = NULL;
330
331 if (S_ISLNK(*i_mode))
332 return 0; /* Symlink always has no-ACL */
333
334 acl = jffs2_get_acl(dir_i, ACL_TYPE_DEFAULT);
335 if (IS_ERR(acl))
336 return PTR_ERR(acl);
337
338 if (!acl) {
339 *i_mode &= ~current->fs->umask;
340 } else {
341 if (S_ISDIR(*i_mode))
342 jffs2_iset_acl(inode, &f->i_acl_default, acl);
324 343
325 if (acl) {
326 if (S_ISDIR(inode->i_mode)) {
327 rc = jffs2_set_acl(inode, ACL_TYPE_DEFAULT, acl);
328 if (rc)
329 goto cleanup;
330 }
331 clone = posix_acl_clone(acl, GFP_KERNEL); 344 clone = posix_acl_clone(acl, GFP_KERNEL);
332 rc = -ENOMEM;
333 if (!clone) 345 if (!clone)
334 goto cleanup; 346 return -ENOMEM;
335 mode = inode->i_mode; 347 rc = posix_acl_create_masq(clone, (mode_t *)i_mode);
336 rc = posix_acl_create_masq(clone, &mode); 348 if (rc < 0)
337 if (rc >= 0) { 349 return rc;
338 inode->i_mode = mode; 350 if (rc > 0)
339 if (rc > 0) 351 jffs2_iset_acl(inode, &f->i_acl_access, clone);
340 rc = jffs2_set_acl(inode, ACL_TYPE_ACCESS, clone); 352
341 }
342 posix_acl_release(clone); 353 posix_acl_release(clone);
343 } 354 }
344 cleanup: 355 return 0;
345 posix_acl_release(acl); 356}
357
358int jffs2_init_acl_post(struct inode *inode)
359{
360 struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
361 int rc;
362
363 if (f->i_acl_default) {
364 rc = __jffs2_set_acl(inode, JFFS2_XPREFIX_ACL_DEFAULT, f->i_acl_default);
365 if (rc)
366 return rc;
367 }
368
369 if (f->i_acl_access) {
370 rc = __jffs2_set_acl(inode, JFFS2_XPREFIX_ACL_ACCESS, f->i_acl_access);
371 if (rc)
372 return rc;
373 }
374
346 return rc; 375 return rc;
347} 376}
348 377
diff --git a/fs/jffs2/acl.h b/fs/jffs2/acl.h
index 90a2dbf59051..76c6ebd1acd9 100644
--- a/fs/jffs2/acl.h
+++ b/fs/jffs2/acl.h
@@ -31,7 +31,8 @@ struct jffs2_acl_header {
31extern struct posix_acl *jffs2_get_acl(struct inode *inode, int type); 31extern struct posix_acl *jffs2_get_acl(struct inode *inode, int type);
32extern int jffs2_permission(struct inode *, int, struct nameidata *); 32extern int jffs2_permission(struct inode *, int, struct nameidata *);
33extern int jffs2_acl_chmod(struct inode *); 33extern int jffs2_acl_chmod(struct inode *);
34extern int jffs2_init_acl(struct inode *, struct posix_acl *); 34extern int jffs2_init_acl_pre(struct inode *, struct inode *, int *);
35extern int jffs2_init_acl_post(struct inode *);
35extern void jffs2_clear_acl(struct jffs2_inode_info *); 36extern void jffs2_clear_acl(struct jffs2_inode_info *);
36 37
37extern struct xattr_handler jffs2_acl_access_xattr_handler; 38extern struct xattr_handler jffs2_acl_access_xattr_handler;
@@ -39,10 +40,11 @@ extern struct xattr_handler jffs2_acl_default_xattr_handler;
39 40
40#else 41#else
41 42
42#define jffs2_get_acl(inode, type) (NULL) 43#define jffs2_get_acl(inode, type) (NULL)
43#define jffs2_permission NULL 44#define jffs2_permission (NULL)
44#define jffs2_acl_chmod(inode) (0) 45#define jffs2_acl_chmod(inode) (0)
45#define jffs2_init_acl(inode,dir) (0) 46#define jffs2_init_acl_pre(dir_i,inode,mode) (0)
47#define jffs2_init_acl_post(inode) (0)
46#define jffs2_clear_acl(f) 48#define jffs2_clear_acl(f)
47 49
48#endif /* CONFIG_JFFS2_FS_POSIX_ACL */ 50#endif /* CONFIG_JFFS2_FS_POSIX_ACL */
diff --git a/fs/jffs2/dir.c b/fs/jffs2/dir.c
index 8353eb9c1799..787e392ffd41 100644
--- a/fs/jffs2/dir.c
+++ b/fs/jffs2/dir.c
@@ -182,7 +182,6 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode,
182 struct jffs2_inode_info *f, *dir_f; 182 struct jffs2_inode_info *f, *dir_f;
183 struct jffs2_sb_info *c; 183 struct jffs2_sb_info *c;
184 struct inode *inode; 184 struct inode *inode;
185 struct posix_acl *acl;
186 int ret; 185 int ret;
187 186
188 ri = jffs2_alloc_raw_inode(); 187 ri = jffs2_alloc_raw_inode();
@@ -193,7 +192,7 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode,
193 192
194 D1(printk(KERN_DEBUG "jffs2_create()\n")); 193 D1(printk(KERN_DEBUG "jffs2_create()\n"));
195 194
196 inode = jffs2_new_inode(dir_i, mode, ri, &acl); 195 inode = jffs2_new_inode(dir_i, mode, ri);
197 196
198 if (IS_ERR(inode)) { 197 if (IS_ERR(inode)) {
199 D1(printk(KERN_DEBUG "jffs2_new_inode() failed\n")); 198 D1(printk(KERN_DEBUG "jffs2_new_inode() failed\n"));
@@ -211,14 +210,6 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode,
211 210
212 ret = jffs2_do_create(c, dir_f, f, ri, 211 ret = jffs2_do_create(c, dir_f, f, ri,
213 dentry->d_name.name, dentry->d_name.len); 212 dentry->d_name.name, dentry->d_name.len);
214
215 if (ret)
216 goto fail_acl;
217
218 ret = jffs2_init_security(inode, dir_i);
219 if (ret)
220 goto fail_acl;
221 ret = jffs2_init_acl(inode, acl);
222 if (ret) 213 if (ret)
223 goto fail; 214 goto fail;
224 215
@@ -231,8 +222,6 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode,
231 inode->i_ino, inode->i_mode, inode->i_nlink, f->inocache->nlink, inode->i_mapping->nrpages)); 222 inode->i_ino, inode->i_mode, inode->i_nlink, f->inocache->nlink, inode->i_mapping->nrpages));
232 return 0; 223 return 0;
233 224
234 fail_acl:
235 posix_acl_release(acl);
236 fail: 225 fail:
237 make_bad_inode(inode); 226 make_bad_inode(inode);
238 iput(inode); 227 iput(inode);
@@ -309,7 +298,6 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
309 struct jffs2_full_dirent *fd; 298 struct jffs2_full_dirent *fd;
310 int namelen; 299 int namelen;
311 uint32_t alloclen; 300 uint32_t alloclen;
312 struct posix_acl *acl;
313 int ret, targetlen = strlen(target); 301 int ret, targetlen = strlen(target);
314 302
315 /* FIXME: If you care. We'd need to use frags for the target 303 /* FIXME: If you care. We'd need to use frags for the target
@@ -336,7 +324,7 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
336 return ret; 324 return ret;
337 } 325 }
338 326
339 inode = jffs2_new_inode(dir_i, S_IFLNK | S_IRWXUGO, ri, &acl); 327 inode = jffs2_new_inode(dir_i, S_IFLNK | S_IRWXUGO, ri);
340 328
341 if (IS_ERR(inode)) { 329 if (IS_ERR(inode)) {
342 jffs2_free_raw_inode(ri); 330 jffs2_free_raw_inode(ri);
@@ -366,7 +354,6 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
366 up(&f->sem); 354 up(&f->sem);
367 jffs2_complete_reservation(c); 355 jffs2_complete_reservation(c);
368 jffs2_clear_inode(inode); 356 jffs2_clear_inode(inode);
369 posix_acl_release(acl);
370 return PTR_ERR(fn); 357 return PTR_ERR(fn);
371 } 358 }
372 359
@@ -377,7 +364,6 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
377 up(&f->sem); 364 up(&f->sem);
378 jffs2_complete_reservation(c); 365 jffs2_complete_reservation(c);
379 jffs2_clear_inode(inode); 366 jffs2_clear_inode(inode);
380 posix_acl_release(acl);
381 return -ENOMEM; 367 return -ENOMEM;
382 } 368 }
383 369
@@ -395,10 +381,9 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
395 ret = jffs2_init_security(inode, dir_i); 381 ret = jffs2_init_security(inode, dir_i);
396 if (ret) { 382 if (ret) {
397 jffs2_clear_inode(inode); 383 jffs2_clear_inode(inode);
398 posix_acl_release(acl);
399 return ret; 384 return ret;
400 } 385 }
401 ret = jffs2_init_acl(inode, acl); 386 ret = jffs2_init_acl_post(inode);
402 if (ret) { 387 if (ret) {
403 jffs2_clear_inode(inode); 388 jffs2_clear_inode(inode);
404 return ret; 389 return ret;
@@ -476,7 +461,6 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode)
476 struct jffs2_full_dirent *fd; 461 struct jffs2_full_dirent *fd;
477 int namelen; 462 int namelen;
478 uint32_t alloclen; 463 uint32_t alloclen;
479 struct posix_acl *acl;
480 int ret; 464 int ret;
481 465
482 mode |= S_IFDIR; 466 mode |= S_IFDIR;
@@ -499,7 +483,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode)
499 return ret; 483 return ret;
500 } 484 }
501 485
502 inode = jffs2_new_inode(dir_i, mode, ri, &acl); 486 inode = jffs2_new_inode(dir_i, mode, ri);
503 487
504 if (IS_ERR(inode)) { 488 if (IS_ERR(inode)) {
505 jffs2_free_raw_inode(ri); 489 jffs2_free_raw_inode(ri);
@@ -526,7 +510,6 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode)
526 up(&f->sem); 510 up(&f->sem);
527 jffs2_complete_reservation(c); 511 jffs2_complete_reservation(c);
528 jffs2_clear_inode(inode); 512 jffs2_clear_inode(inode);
529 posix_acl_release(acl);
530 return PTR_ERR(fn); 513 return PTR_ERR(fn);
531 } 514 }
532 /* No data here. Only a metadata node, which will be 515 /* No data here. Only a metadata node, which will be
@@ -540,10 +523,9 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, int mode)
540 ret = jffs2_init_security(inode, dir_i); 523 ret = jffs2_init_security(inode, dir_i);
541 if (ret) { 524 if (ret) {
542 jffs2_clear_inode(inode); 525 jffs2_clear_inode(inode);
543 posix_acl_release(acl);
544 return ret; 526 return ret;
545 } 527 }
546 ret = jffs2_init_acl(inode, acl); 528 ret = jffs2_init_acl_post(inode);
547 if (ret) { 529 if (ret) {
548 jffs2_clear_inode(inode); 530 jffs2_clear_inode(inode);
549 return ret; 531 return ret;
@@ -639,7 +621,6 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de
639 union jffs2_device_node dev; 621 union jffs2_device_node dev;
640 int devlen = 0; 622 int devlen = 0;
641 uint32_t alloclen; 623 uint32_t alloclen;
642 struct posix_acl *acl;
643 int ret; 624 int ret;
644 625
645 if (!new_valid_dev(rdev)) 626 if (!new_valid_dev(rdev))
@@ -666,7 +647,7 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de
666 return ret; 647 return ret;
667 } 648 }
668 649
669 inode = jffs2_new_inode(dir_i, mode, ri, &acl); 650 inode = jffs2_new_inode(dir_i, mode, ri);
670 651
671 if (IS_ERR(inode)) { 652 if (IS_ERR(inode)) {
672 jffs2_free_raw_inode(ri); 653 jffs2_free_raw_inode(ri);
@@ -695,7 +676,6 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de
695 up(&f->sem); 676 up(&f->sem);
696 jffs2_complete_reservation(c); 677 jffs2_complete_reservation(c);
697 jffs2_clear_inode(inode); 678 jffs2_clear_inode(inode);
698 posix_acl_release(acl);
699 return PTR_ERR(fn); 679 return PTR_ERR(fn);
700 } 680 }
701 /* No data here. Only a metadata node, which will be 681 /* No data here. Only a metadata node, which will be
@@ -709,10 +689,9 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, de
709 ret = jffs2_init_security(inode, dir_i); 689 ret = jffs2_init_security(inode, dir_i);
710 if (ret) { 690 if (ret) {
711 jffs2_clear_inode(inode); 691 jffs2_clear_inode(inode);
712 posix_acl_release(acl);
713 return ret; 692 return ret;
714 } 693 }
715 ret = jffs2_init_acl(inode, acl); 694 ret = jffs2_init_acl_post(inode);
716 if (ret) { 695 if (ret) {
717 jffs2_clear_inode(inode); 696 jffs2_clear_inode(inode);
718 return ret; 697 return ret;
diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c
index 023a17539dd4..f9c5dd6f4b64 100644
--- a/fs/jffs2/file.c
+++ b/fs/jffs2/file.c
@@ -255,7 +255,7 @@ static int jffs2_write_end(struct file *filp, struct address_space *mapping,
255 _whole_ page. This helps to reduce the number of 255 _whole_ page. This helps to reduce the number of
256 nodes in files which have many short writes, like 256 nodes in files which have many short writes, like
257 syslog files. */ 257 syslog files. */
258 start = aligned_start = 0; 258 aligned_start = 0;
259 } 259 }
260 260
261 ri = jffs2_alloc_raw_inode(); 261 ri = jffs2_alloc_raw_inode();
@@ -291,14 +291,11 @@ static int jffs2_write_end(struct file *filp, struct address_space *mapping,
291 } 291 }
292 292
293 /* Adjust writtenlen for the padding we did, so we don't confuse our caller */ 293 /* Adjust writtenlen for the padding we did, so we don't confuse our caller */
294 if (writtenlen < (start&3)) 294 writtenlen -= min(writtenlen, (start - aligned_start));
295 writtenlen = 0;
296 else
297 writtenlen -= (start&3);
298 295
299 if (writtenlen) { 296 if (writtenlen) {
300 if (inode->i_size < (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen) { 297 if (inode->i_size < pos + writtenlen) {
301 inode->i_size = (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen; 298 inode->i_size = pos + writtenlen;
302 inode->i_blocks = (inode->i_size + 511) >> 9; 299 inode->i_blocks = (inode->i_size + 511) >> 9;
303 300
304 inode->i_ctime = inode->i_mtime = ITIME(je32_to_cpu(ri->ctime)); 301 inode->i_ctime = inode->i_mtime = ITIME(je32_to_cpu(ri->ctime));
diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c
index ed85f9afdbc8..d2e06f7ea96f 100644
--- a/fs/jffs2/fs.c
+++ b/fs/jffs2/fs.c
@@ -402,8 +402,7 @@ void jffs2_write_super (struct super_block *sb)
402 402
403/* jffs2_new_inode: allocate a new inode and inocache, add it to the hash, 403/* jffs2_new_inode: allocate a new inode and inocache, add it to the hash,
404 fill in the raw_inode while you're at it. */ 404 fill in the raw_inode while you're at it. */
405struct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_inode *ri, 405struct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_inode *ri)
406 struct posix_acl **acl)
407{ 406{
408 struct inode *inode; 407 struct inode *inode;
409 struct super_block *sb = dir_i->i_sb; 408 struct super_block *sb = dir_i->i_sb;
@@ -438,19 +437,11 @@ struct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_i
438 437
439 /* POSIX ACLs have to be processed now, at least partly. 438 /* POSIX ACLs have to be processed now, at least partly.
440 The umask is only applied if there's no default ACL */ 439 The umask is only applied if there's no default ACL */
441 if (!S_ISLNK(mode)) { 440 ret = jffs2_init_acl_pre(dir_i, inode, &mode);
442 *acl = jffs2_get_acl(dir_i, ACL_TYPE_DEFAULT); 441 if (ret) {
443 if (IS_ERR(*acl)) { 442 make_bad_inode(inode);
444 make_bad_inode(inode); 443 iput(inode);
445 iput(inode); 444 return ERR_PTR(ret);
446 inode = (void *)*acl;
447 *acl = NULL;
448 return inode;
449 }
450 if (!(*acl))
451 mode &= ~current->fs->umask;
452 } else {
453 *acl = NULL;
454 } 445 }
455 ret = jffs2_do_new_inode (c, f, mode, ri); 446 ret = jffs2_do_new_inode (c, f, mode, ri);
456 if (ret) { 447 if (ret) {
diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h
index f6743a915cf3..bf64686cf098 100644
--- a/fs/jffs2/os-linux.h
+++ b/fs/jffs2/os-linux.h
@@ -173,15 +173,13 @@ int jffs2_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
173extern const struct inode_operations jffs2_symlink_inode_operations; 173extern const struct inode_operations jffs2_symlink_inode_operations;
174 174
175/* fs.c */ 175/* fs.c */
176struct posix_acl;
177
178int jffs2_setattr (struct dentry *, struct iattr *); 176int jffs2_setattr (struct dentry *, struct iattr *);
179int jffs2_do_setattr (struct inode *, struct iattr *); 177int jffs2_do_setattr (struct inode *, struct iattr *);
180void jffs2_read_inode (struct inode *); 178void jffs2_read_inode (struct inode *);
181void jffs2_clear_inode (struct inode *); 179void jffs2_clear_inode (struct inode *);
182void jffs2_dirty_inode(struct inode *inode); 180void jffs2_dirty_inode(struct inode *inode);
183struct inode *jffs2_new_inode (struct inode *dir_i, int mode, 181struct inode *jffs2_new_inode (struct inode *dir_i, int mode,
184 struct jffs2_raw_inode *ri, struct posix_acl **acl); 182 struct jffs2_raw_inode *ri);
185int jffs2_statfs (struct dentry *, struct kstatfs *); 183int jffs2_statfs (struct dentry *, struct kstatfs *);
186void jffs2_write_super (struct super_block *); 184void jffs2_write_super (struct super_block *);
187int jffs2_remount_fs (struct super_block *, int *, char *); 185int jffs2_remount_fs (struct super_block *, int *, char *);
diff --git a/fs/jffs2/write.c b/fs/jffs2/write.c
index 2f5695446d0f..147e2cbee9e4 100644
--- a/fs/jffs2/write.c
+++ b/fs/jffs2/write.c
@@ -465,6 +465,14 @@ int jffs2_do_create(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, str
465 465
466 up(&f->sem); 466 up(&f->sem);
467 jffs2_complete_reservation(c); 467 jffs2_complete_reservation(c);
468
469 ret = jffs2_init_security(&f->vfs_inode, &dir_f->vfs_inode);
470 if (ret)
471 return ret;
472 ret = jffs2_init_acl_post(&f->vfs_inode);
473 if (ret)
474 return ret;
475
468 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen, 476 ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &alloclen,
469 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen)); 477 ALLOC_NORMAL, JFFS2_SUMMARY_DIRENT_SIZE(namelen));
470 478
diff --git a/include/asm-arm/dma-mapping.h b/include/asm-arm/dma-mapping.h
index 1eb8aac43228..e99406a7bece 100644
--- a/include/asm-arm/dma-mapping.h
+++ b/include/asm-arm/dma-mapping.h
@@ -5,7 +5,7 @@
5 5
6#include <linux/mm.h> /* need struct page */ 6#include <linux/mm.h> /* need struct page */
7 7
8#include <asm/scatterlist.h> 8#include <linux/scatterlist.h>
9 9
10/* 10/*
11 * DMA-consistent mapping functions. These allocate/free a region of 11 * DMA-consistent mapping functions. These allocate/free a region of
@@ -274,8 +274,8 @@ dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
274 for (i = 0; i < nents; i++, sg++) { 274 for (i = 0; i < nents; i++, sg++) {
275 char *virt; 275 char *virt;
276 276
277 sg->dma_address = page_to_dma(dev, sg->page) + sg->offset; 277 sg->dma_address = page_to_dma(dev, sg_page(sg)) + sg->offset;
278 virt = page_address(sg->page) + sg->offset; 278 virt = sg_virt(sg);
279 279
280 if (!arch_is_coherent()) 280 if (!arch_is_coherent())
281 dma_cache_maint(virt, sg->length, dir); 281 dma_cache_maint(virt, sg->length, dir);
@@ -371,7 +371,7 @@ dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nents,
371 int i; 371 int i;
372 372
373 for (i = 0; i < nents; i++, sg++) { 373 for (i = 0; i < nents; i++, sg++) {
374 char *virt = page_address(sg->page) + sg->offset; 374 char *virt = sg_virt(sg);
375 if (!arch_is_coherent()) 375 if (!arch_is_coherent())
376 dma_cache_maint(virt, sg->length, dir); 376 dma_cache_maint(virt, sg->length, dir);
377 } 377 }
@@ -384,7 +384,7 @@ dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nents,
384 int i; 384 int i;
385 385
386 for (i = 0; i < nents; i++, sg++) { 386 for (i = 0; i < nents; i++, sg++) {
387 char *virt = page_address(sg->page) + sg->offset; 387 char *virt = sg_virt(sg);
388 if (!arch_is_coherent()) 388 if (!arch_is_coherent())
389 dma_cache_maint(virt, sg->length, dir); 389 dma_cache_maint(virt, sg->length, dir);
390 } 390 }
diff --git a/include/asm-avr32/arch-at32ap/board.h b/include/asm-avr32/arch-at32ap/board.h
index 7dbd603c38cc..d6993a6b6473 100644
--- a/include/asm-avr32/arch-at32ap/board.h
+++ b/include/asm-avr32/arch-at32ap/board.h
@@ -44,6 +44,13 @@ struct usba_platform_data {
44struct platform_device * 44struct platform_device *
45at32_add_device_usba(unsigned int id, struct usba_platform_data *data); 45at32_add_device_usba(unsigned int id, struct usba_platform_data *data);
46 46
47struct ide_platform_data {
48 u8 cs;
49};
50struct platform_device *
51at32_add_device_ide(unsigned int id, unsigned int extint,
52 struct ide_platform_data *data);
53
47/* depending on what's hooked up, not all SSC pins will be used */ 54/* depending on what's hooked up, not all SSC pins will be used */
48#define ATMEL_SSC_TK 0x01 55#define ATMEL_SSC_TK 0x01
49#define ATMEL_SSC_TF 0x02 56#define ATMEL_SSC_TF 0x02
@@ -58,4 +65,20 @@ at32_add_device_usba(unsigned int id, struct usba_platform_data *data);
58struct platform_device * 65struct platform_device *
59at32_add_device_ssc(unsigned int id, unsigned int flags); 66at32_add_device_ssc(unsigned int id, unsigned int flags);
60 67
68struct platform_device *at32_add_device_twi(unsigned int id);
69struct platform_device *at32_add_device_mci(unsigned int id);
70struct platform_device *at32_add_device_ac97c(unsigned int id);
71struct platform_device *at32_add_device_abdac(unsigned int id);
72
73struct cf_platform_data {
74 int detect_pin;
75 int reset_pin;
76 int vcc_pin;
77 int ready_pin;
78 u8 cs;
79};
80struct platform_device *
81at32_add_device_cf(unsigned int id, unsigned int extint,
82 struct cf_platform_data *data);
83
61#endif /* __ASM_ARCH_BOARD_H */ 84#endif /* __ASM_ARCH_BOARD_H */
diff --git a/include/asm-avr32/dma-mapping.h b/include/asm-avr32/dma-mapping.h
index 81e342636ac4..a7131630c057 100644
--- a/include/asm-avr32/dma-mapping.h
+++ b/include/asm-avr32/dma-mapping.h
@@ -217,8 +217,8 @@ dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
217 for (i = 0; i < nents; i++) { 217 for (i = 0; i < nents; i++) {
218 char *virt; 218 char *virt;
219 219
220 sg[i].dma_address = page_to_bus(sg[i].page) + sg[i].offset; 220 sg[i].dma_address = page_to_bus(sg_page(&sg[i])) + sg[i].offset;
221 virt = page_address(sg[i].page) + sg[i].offset; 221 virt = sg_virt(&sg[i]);
222 dma_cache_sync(dev, virt, sg[i].length, direction); 222 dma_cache_sync(dev, virt, sg[i].length, direction);
223 } 223 }
224 224
@@ -327,8 +327,7 @@ dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
327 int i; 327 int i;
328 328
329 for (i = 0; i < nents; i++) { 329 for (i = 0; i < nents; i++) {
330 dma_cache_sync(dev, page_address(sg[i].page) + sg[i].offset, 330 dma_cache_sync(dev, sg_virt(&sg[i]), sg[i].length, direction);
331 sg[i].length, direction);
332 } 331 }
333} 332}
334 333
diff --git a/include/asm-blackfin/scatterlist.h b/include/asm-blackfin/scatterlist.h
index 32128d53469b..04f448711cd0 100644
--- a/include/asm-blackfin/scatterlist.h
+++ b/include/asm-blackfin/scatterlist.h
@@ -20,7 +20,6 @@ struct scatterlist {
20 * returns, or alternatively stop on the first sg_dma_len(sg) which 20 * returns, or alternatively stop on the first sg_dma_len(sg) which
21 * is 0. 21 * is 0.
22 */ 22 */
23#define sg_address(sg) (page_address((sg)->page) + (sg)->offset)
24#define sg_dma_address(sg) ((sg)->dma_address) 23#define sg_dma_address(sg) ((sg)->dma_address)
25#define sg_dma_len(sg) ((sg)->length) 24#define sg_dma_len(sg) ((sg)->length)
26 25
diff --git a/include/asm-frv/scatterlist.h b/include/asm-frv/scatterlist.h
index f7da007b763c..99ba76edc42a 100644
--- a/include/asm-frv/scatterlist.h
+++ b/include/asm-frv/scatterlist.h
@@ -4,19 +4,19 @@
4#include <asm/types.h> 4#include <asm/types.h>
5 5
6/* 6/*
7 * Drivers must set either ->address or (preferred) ->page and ->offset 7 * Drivers must set either ->address or (preferred) page and ->offset
8 * to indicate where data must be transferred to/from. 8 * to indicate where data must be transferred to/from.
9 * 9 *
10 * Using ->page is recommended since it handles highmem data as well as 10 * Using page is recommended since it handles highmem data as well as
11 * low mem. ->address is restricted to data which has a virtual mapping, and 11 * low mem. ->address is restricted to data which has a virtual mapping, and
12 * it will go away in the future. Updating to ->page can be automated very 12 * it will go away in the future. Updating to page can be automated very
13 * easily -- something like 13 * easily -- something like
14 * 14 *
15 * sg->address = some_ptr; 15 * sg->address = some_ptr;
16 * 16 *
17 * can be rewritten as 17 * can be rewritten as
18 * 18 *
19 * sg->page = virt_to_page(some_ptr); 19 * sg_set_page(virt_to_page(some_ptr));
20 * sg->offset = (unsigned long) some_ptr & ~PAGE_MASK; 20 * sg->offset = (unsigned long) some_ptr & ~PAGE_MASK;
21 * 21 *
22 * and that's it. There's no excuse for not highmem enabling YOUR driver. /jens 22 * and that's it. There's no excuse for not highmem enabling YOUR driver. /jens
diff --git a/include/asm-m68knommu/module.h b/include/asm-m68knommu/module.h
index 57e95cc01ad5..2e45ab50b232 100644
--- a/include/asm-m68knommu/module.h
+++ b/include/asm-m68knommu/module.h
@@ -1 +1,11 @@
1#include <asm-m68k/module.h> 1#ifndef ASM_M68KNOMMU_MODULE_H
2#define ASM_M68KNOMMU_MODULE_H
3
4struct mod_arch_specific {
5};
6
7#define Elf_Shdr Elf32_Shdr
8#define Elf_Sym Elf32_Sym
9#define Elf_Ehdr Elf32_Ehdr
10
11#endif /* ASM_M68KNOMMU_MODULE_H */
diff --git a/include/asm-m68knommu/scatterlist.h b/include/asm-m68knommu/scatterlist.h
index 10942840e88f..afc4788b0d2c 100644
--- a/include/asm-m68knommu/scatterlist.h
+++ b/include/asm-m68knommu/scatterlist.h
@@ -14,7 +14,6 @@ struct scatterlist {
14 unsigned int length; 14 unsigned int length;
15}; 15};
16 16
17#define sg_address(sg) (page_address((sg)->page) + (sg)->offset)
18#define sg_dma_address(sg) ((sg)->dma_address) 17#define sg_dma_address(sg) ((sg)->dma_address)
19#define sg_dma_len(sg) ((sg)->length) 18#define sg_dma_len(sg) ((sg)->length)
20 19
diff --git a/include/asm-m68knommu/uaccess.h b/include/asm-m68knommu/uaccess.h
index 9ed9169a8849..68bbe9b312f1 100644
--- a/include/asm-m68knommu/uaccess.h
+++ b/include/asm-m68knommu/uaccess.h
@@ -170,10 +170,12 @@ static inline long strnlen_user(const char *src, long n)
170 */ 170 */
171 171
172static inline unsigned long 172static inline unsigned long
173clear_user(void *to, unsigned long n) 173__clear_user(void *to, unsigned long n)
174{ 174{
175 memset(to, 0, n); 175 memset(to, 0, n);
176 return 0; 176 return 0;
177} 177}
178 178
179#define clear_user(to,n) __clear_user(to,n)
180
179#endif /* _M68KNOMMU_UACCESS_H */ 181#endif /* _M68KNOMMU_UACCESS_H */
diff --git a/include/asm-parisc/scatterlist.h b/include/asm-parisc/scatterlist.h
index cd3cfdf82289..62269b31ebf4 100644
--- a/include/asm-parisc/scatterlist.h
+++ b/include/asm-parisc/scatterlist.h
@@ -18,7 +18,7 @@ struct scatterlist {
18 __u32 iova_length; /* bytes mapped */ 18 __u32 iova_length; /* bytes mapped */
19}; 19};
20 20
21#define sg_virt_addr(sg) ((unsigned long)(page_address(sg->page) + sg->offset)) 21#define sg_virt_addr(sg) ((unsigned long)sg_virt(sg))
22#define sg_dma_address(sg) ((sg)->iova) 22#define sg_dma_address(sg) ((sg)->iova)
23#define sg_dma_len(sg) ((sg)->iova_length) 23#define sg_dma_len(sg) ((sg)->iova_length)
24 24
diff --git a/include/asm-powerpc/dma-mapping.h b/include/asm-powerpc/dma-mapping.h
index 65be95dd03a5..ff52013c0e2d 100644
--- a/include/asm-powerpc/dma-mapping.h
+++ b/include/asm-powerpc/dma-mapping.h
@@ -285,9 +285,9 @@ dma_map_sg(struct device *dev, struct scatterlist *sgl, int nents,
285 BUG_ON(direction == DMA_NONE); 285 BUG_ON(direction == DMA_NONE);
286 286
287 for_each_sg(sgl, sg, nents, i) { 287 for_each_sg(sgl, sg, nents, i) {
288 BUG_ON(!sg->page); 288 BUG_ON(!sg_page(sg));
289 __dma_sync_page(sg->page, sg->offset, sg->length, direction); 289 __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction);
290 sg->dma_address = page_to_bus(sg->page) + sg->offset; 290 sg->dma_address = page_to_bus(sg_page(sg)) + sg->offset;
291 } 291 }
292 292
293 return nents; 293 return nents;
@@ -328,7 +328,7 @@ static inline void dma_sync_sg_for_cpu(struct device *dev,
328 BUG_ON(direction == DMA_NONE); 328 BUG_ON(direction == DMA_NONE);
329 329
330 for_each_sg(sgl, sg, nents, i) 330 for_each_sg(sgl, sg, nents, i)
331 __dma_sync_page(sg->page, sg->offset, sg->length, direction); 331 __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction);
332} 332}
333 333
334static inline void dma_sync_sg_for_device(struct device *dev, 334static inline void dma_sync_sg_for_device(struct device *dev,
@@ -341,7 +341,7 @@ static inline void dma_sync_sg_for_device(struct device *dev,
341 BUG_ON(direction == DMA_NONE); 341 BUG_ON(direction == DMA_NONE);
342 342
343 for_each_sg(sgl, sg, nents, i) 343 for_each_sg(sgl, sg, nents, i)
344 __dma_sync_page(sg->page, sg->offset, sg->length, direction); 344 __dma_sync_page(sg_page(sg), sg->offset, sg->length, direction);
345} 345}
346 346
347static inline int dma_mapping_error(dma_addr_t dma_addr) 347static inline int dma_mapping_error(dma_addr_t dma_addr)
diff --git a/include/asm-sh/dma-mapping.h b/include/asm-sh/dma-mapping.h
index 84fefdaa01a5..fcea067f7a9c 100644
--- a/include/asm-sh/dma-mapping.h
+++ b/include/asm-sh/dma-mapping.h
@@ -2,7 +2,7 @@
2#define __ASM_SH_DMA_MAPPING_H 2#define __ASM_SH_DMA_MAPPING_H
3 3
4#include <linux/mm.h> 4#include <linux/mm.h>
5#include <asm/scatterlist.h> 5#include <linux/scatterlist.h>
6#include <asm/cacheflush.h> 6#include <asm/cacheflush.h>
7#include <asm/io.h> 7#include <asm/io.h>
8 8
@@ -85,10 +85,9 @@ static inline int dma_map_sg(struct device *dev, struct scatterlist *sg,
85 85
86 for (i = 0; i < nents; i++) { 86 for (i = 0; i < nents; i++) {
87#if !defined(CONFIG_PCI) || defined(CONFIG_SH_PCIDMA_NONCOHERENT) 87#if !defined(CONFIG_PCI) || defined(CONFIG_SH_PCIDMA_NONCOHERENT)
88 dma_cache_sync(dev, page_address(sg[i].page) + sg[i].offset, 88 dma_cache_sync(dev, sg_virt(&sg[i]), sg[i].length, dir);
89 sg[i].length, dir);
90#endif 89#endif
91 sg[i].dma_address = page_to_phys(sg[i].page) + sg[i].offset; 90 sg[i].dma_address = sg_phys(&sg[i]);
92 } 91 }
93 92
94 return nents; 93 return nents;
@@ -138,10 +137,9 @@ static inline void dma_sync_sg(struct device *dev, struct scatterlist *sg,
138 137
139 for (i = 0; i < nelems; i++) { 138 for (i = 0; i < nelems; i++) {
140#if !defined(CONFIG_PCI) || defined(CONFIG_SH_PCIDMA_NONCOHERENT) 139#if !defined(CONFIG_PCI) || defined(CONFIG_SH_PCIDMA_NONCOHERENT)
141 dma_cache_sync(dev, page_address(sg[i].page) + sg[i].offset, 140 dma_cache_sync(dev, sg_virt(&sg[i]), sg[i].length, dir);
142 sg[i].length, dir);
143#endif 141#endif
144 sg[i].dma_address = page_to_phys(sg[i].page) + sg[i].offset; 142 sg[i].dma_address = sg_phys(&sg[i]);
145 } 143 }
146} 144}
147 145
diff --git a/include/asm-sh64/dma-mapping.h b/include/asm-sh64/dma-mapping.h
index e661857f98dc..1438b763a5ea 100644
--- a/include/asm-sh64/dma-mapping.h
+++ b/include/asm-sh64/dma-mapping.h
@@ -2,7 +2,7 @@
2#define __ASM_SH_DMA_MAPPING_H 2#define __ASM_SH_DMA_MAPPING_H
3 3
4#include <linux/mm.h> 4#include <linux/mm.h>
5#include <asm/scatterlist.h> 5#include <linux/scatterlist.h>
6#include <asm/io.h> 6#include <asm/io.h>
7 7
8struct pci_dev; 8struct pci_dev;
@@ -71,10 +71,9 @@ static inline int dma_map_sg(struct device *dev, struct scatterlist *sg,
71 71
72 for (i = 0; i < nents; i++) { 72 for (i = 0; i < nents; i++) {
73#if !defined(CONFIG_PCI) || defined(CONFIG_SH_PCIDMA_NONCOHERENT) 73#if !defined(CONFIG_PCI) || defined(CONFIG_SH_PCIDMA_NONCOHERENT)
74 dma_cache_sync(dev, page_address(sg[i].page) + sg[i].offset, 74 dma_cache_sync(dev, sg_virt(&sg[i]), sg[i].length, dir);
75 sg[i].length, dir);
76#endif 75#endif
77 sg[i].dma_address = page_to_phys(sg[i].page) + sg[i].offset; 76 sg[i].dma_address = sg_phys(&sg[i]);
78 } 77 }
79 78
80 return nents; 79 return nents;
@@ -124,10 +123,9 @@ static inline void dma_sync_sg(struct device *dev, struct scatterlist *sg,
124 123
125 for (i = 0; i < nelems; i++) { 124 for (i = 0; i < nelems; i++) {
126#if !defined(CONFIG_PCI) || defined(CONFIG_SH_PCIDMA_NONCOHERENT) 125#if !defined(CONFIG_PCI) || defined(CONFIG_SH_PCIDMA_NONCOHERENT)
127 dma_cache_sync(dev, page_address(sg[i].page) + sg[i].offset, 126 dma_cache_sync(dev, sg_virt(&sg[i]), sg[i].length, dir);
128 sg[i].length, dir);
129#endif 127#endif
130 sg[i].dma_address = page_to_phys(sg[i].page) + sg[i].offset; 128 sg[i].dma_address = sg_phys(&sg[i]);
131 } 129 }
132} 130}
133 131
diff --git a/include/sound/version.h b/include/sound/version.h
index 8d4a8dd89237..a2be8ad8894b 100644
--- a/include/sound/version.h
+++ b/include/sound/version.h
@@ -1,3 +1,3 @@
1/* include/version.h. Generated by alsa/ksync script. */ 1/* include/version.h. Generated by alsa/ksync script. */
2#define CONFIG_SND_VERSION "1.0.15" 2#define CONFIG_SND_VERSION "1.0.15"
3#define CONFIG_SND_DATE " (Tue Oct 16 14:57:44 2007 UTC)" 3#define CONFIG_SND_DATE " (Tue Oct 23 06:09:18 2007 UTC)"
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 80eab7a04205..1f314221d534 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -29,12 +29,28 @@
29void synchronize_irq(unsigned int irq) 29void synchronize_irq(unsigned int irq)
30{ 30{
31 struct irq_desc *desc = irq_desc + irq; 31 struct irq_desc *desc = irq_desc + irq;
32 unsigned int status;
32 33
33 if (irq >= NR_IRQS) 34 if (irq >= NR_IRQS)
34 return; 35 return;
35 36
36 while (desc->status & IRQ_INPROGRESS) 37 do {
37 cpu_relax(); 38 unsigned long flags;
39
40 /*
41 * Wait until we're out of the critical section. This might
42 * give the wrong answer due to the lack of memory barriers.
43 */
44 while (desc->status & IRQ_INPROGRESS)
45 cpu_relax();
46
47 /* Ok, that indicated we're done: double-check carefully. */
48 spin_lock_irqsave(&desc->lock, flags);
49 status = desc->status;
50 spin_unlock_irqrestore(&desc->lock, flags);
51
52 /* Oops, that failed? */
53 } while (status & IRQ_INPROGRESS);
38} 54}
39EXPORT_SYMBOL(synchronize_irq); 55EXPORT_SYMBOL(synchronize_irq);
40 56
diff --git a/lib/reed_solomon/decode_rs.c b/lib/reed_solomon/decode_rs.c
index a58df56f09b6..0ec3f257ffdf 100644
--- a/lib/reed_solomon/decode_rs.c
+++ b/lib/reed_solomon/decode_rs.c
@@ -39,8 +39,7 @@
39 39
40 /* Check length parameter for validity */ 40 /* Check length parameter for validity */
41 pad = nn - nroots - len; 41 pad = nn - nroots - len;
42 if (pad < 0 || pad >= nn) 42 BUG_ON(pad < 0 || pad >= nn);
43 return -ERANGE;
44 43
45 /* Does the caller provide the syndrome ? */ 44 /* Does the caller provide the syndrome ? */
46 if (s != NULL) 45 if (s != NULL)
@@ -203,7 +202,7 @@
203 * deg(lambda) unequal to number of roots => uncorrectable 202 * deg(lambda) unequal to number of roots => uncorrectable
204 * error detected 203 * error detected
205 */ 204 */
206 count = -1; 205 count = -EBADMSG;
207 goto finish; 206 goto finish;
208 } 207 }
209 /* 208 /*
diff --git a/lib/reed_solomon/reed_solomon.c b/lib/reed_solomon/reed_solomon.c
index 5b0d8522b7ca..3ea2db94d5b0 100644
--- a/lib/reed_solomon/reed_solomon.c
+++ b/lib/reed_solomon/reed_solomon.c
@@ -320,6 +320,7 @@ EXPORT_SYMBOL_GPL(encode_rs8);
320 * The syndrome and parity uses a uint16_t data type to enable 320 * The syndrome and parity uses a uint16_t data type to enable
321 * symbol size > 8. The calling code must take care of decoding of the 321 * symbol size > 8. The calling code must take care of decoding of the
322 * syndrome result and the received parity before calling this code. 322 * syndrome result and the received parity before calling this code.
323 * Returns the number of corrected bits or -EBADMSG for uncorrectable errors.
323 */ 324 */
324int decode_rs8(struct rs_control *rs, uint8_t *data, uint16_t *par, int len, 325int decode_rs8(struct rs_control *rs, uint8_t *data, uint16_t *par, int len,
325 uint16_t *s, int no_eras, int *eras_pos, uint16_t invmsk, 326 uint16_t *s, int no_eras, int *eras_pos, uint16_t invmsk,
@@ -363,6 +364,7 @@ EXPORT_SYMBOL_GPL(encode_rs16);
363 * @corr: buffer to store correction bitmask on eras_pos 364 * @corr: buffer to store correction bitmask on eras_pos
364 * 365 *
365 * Each field in the data array contains up to symbol size bits of valid data. 366 * Each field in the data array contains up to symbol size bits of valid data.
367 * Returns the number of corrected bits or -EBADMSG for uncorrectable errors.
366 */ 368 */
367int decode_rs16(struct rs_control *rs, uint16_t *data, uint16_t *par, int len, 369int decode_rs16(struct rs_control *rs, uint16_t *data, uint16_t *par, int len,
368 uint16_t *s, int no_eras, int *eras_pos, uint16_t invmsk, 370 uint16_t *s, int no_eras, int *eras_pos, uint16_t invmsk,
diff --git a/mm/mmap.c b/mm/mmap.c
index 7a30c4988231..facc1a75bd4f 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1171,8 +1171,7 @@ munmap_back:
1171 vm_flags = vma->vm_flags; 1171 vm_flags = vma->vm_flags;
1172 1172
1173 if (vma_wants_writenotify(vma)) 1173 if (vma_wants_writenotify(vma))
1174 vma->vm_page_prot = 1174 vma->vm_page_prot = vm_get_page_prot(vm_flags & ~VM_SHARED);
1175 protection_map[vm_flags & (VM_READ|VM_WRITE|VM_EXEC)];
1176 1175
1177 if (!file || !vma_merge(mm, prev, addr, vma->vm_end, 1176 if (!file || !vma_merge(mm, prev, addr, vma->vm_end,
1178 vma->vm_flags, NULL, file, pgoff, vma_policy(vma))) { 1177 vma->vm_flags, NULL, file, pgoff, vma_policy(vma))) {
diff --git a/mm/mprotect.c b/mm/mprotect.c
index 55227845abbe..4de546899dc1 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -194,7 +194,7 @@ success:
194 vma->vm_flags = newflags; 194 vma->vm_flags = newflags;
195 vma->vm_page_prot = vm_get_page_prot(newflags); 195 vma->vm_page_prot = vm_get_page_prot(newflags);
196 if (vma_wants_writenotify(vma)) { 196 if (vma_wants_writenotify(vma)) {
197 vma->vm_page_prot = vm_get_page_prot(newflags); 197 vma->vm_page_prot = vm_get_page_prot(newflags & ~VM_SHARED);
198 dirty_accountable = 1; 198 dirty_accountable = 1;
199 } 199 }
200 200
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
index d5a9785a158b..658476c4d587 100644
--- a/net/sctp/sm_make_chunk.c
+++ b/net/sctp/sm_make_chunk.c
@@ -56,7 +56,7 @@
56#include <linux/ipv6.h> 56#include <linux/ipv6.h>
57#include <linux/net.h> 57#include <linux/net.h>
58#include <linux/inet.h> 58#include <linux/inet.h>
59#include <asm/scatterlist.h> 59#include <linux/scatterlist.h>
60#include <linux/crypto.h> 60#include <linux/crypto.h>
61#include <net/sock.h> 61#include <net/sock.h>
62 62
diff --git a/net/xfrm/xfrm_algo.c b/net/xfrm/xfrm_algo.c
index fb2220a719bd..313d4bed3aa9 100644
--- a/net/xfrm/xfrm_algo.c
+++ b/net/xfrm/xfrm_algo.c
@@ -13,6 +13,7 @@
13#include <linux/kernel.h> 13#include <linux/kernel.h>
14#include <linux/pfkeyv2.h> 14#include <linux/pfkeyv2.h>
15#include <linux/crypto.h> 15#include <linux/crypto.h>
16#include <linux/scatterlist.h>
16#include <net/xfrm.h> 17#include <net/xfrm.h>
17#if defined(CONFIG_INET_AH) || defined(CONFIG_INET_AH_MODULE) || defined(CONFIG_INET6_AH) || defined(CONFIG_INET6_AH_MODULE) 18#if defined(CONFIG_INET_AH) || defined(CONFIG_INET_AH_MODULE) || defined(CONFIG_INET6_AH) || defined(CONFIG_INET6_AH_MODULE)
18#include <net/ah.h> 19#include <net/ah.h>
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 24e1b1885de7..9f3124b08867 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -2977,11 +2977,7 @@ static int selinux_task_prctl(int option,
2977 2977
2978static int selinux_task_wait(struct task_struct *p) 2978static int selinux_task_wait(struct task_struct *p)
2979{ 2979{
2980 u32 perm; 2980 return task_has_perm(p, current, PROCESS__SIGCHLD);
2981
2982 perm = signal_to_av(p->exit_signal);
2983
2984 return task_has_perm(p, current, perm);
2985} 2981}
2986 2982
2987static void selinux_task_reparent_to_init(struct task_struct *p) 2983static void selinux_task_reparent_to_init(struct task_struct *p)
diff --git a/sound/core/control.c b/sound/core/control.c
index 4c3aa8e10378..df0774c76f6f 100644
--- a/sound/core/control.c
+++ b/sound/core/control.c
@@ -93,15 +93,16 @@ static int snd_ctl_open(struct inode *inode, struct file *file)
93 93
94static void snd_ctl_empty_read_queue(struct snd_ctl_file * ctl) 94static void snd_ctl_empty_read_queue(struct snd_ctl_file * ctl)
95{ 95{
96 unsigned long flags;
96 struct snd_kctl_event *cread; 97 struct snd_kctl_event *cread;
97 98
98 spin_lock(&ctl->read_lock); 99 spin_lock_irqsave(&ctl->read_lock, flags);
99 while (!list_empty(&ctl->events)) { 100 while (!list_empty(&ctl->events)) {
100 cread = snd_kctl_event(ctl->events.next); 101 cread = snd_kctl_event(ctl->events.next);
101 list_del(&cread->list); 102 list_del(&cread->list);
102 kfree(cread); 103 kfree(cread);
103 } 104 }
104 spin_unlock(&ctl->read_lock); 105 spin_unlock_irqrestore(&ctl->read_lock, flags);
105} 106}
106 107
107static int snd_ctl_release(struct inode *inode, struct file *file) 108static int snd_ctl_release(struct inode *inode, struct file *file)
diff --git a/sound/pci/bt87x.c b/sound/pci/bt87x.c
index 91f9e6a112ff..2dba752faf4e 100644
--- a/sound/pci/bt87x.c
+++ b/sound/pci/bt87x.c
@@ -165,7 +165,7 @@ struct snd_bt87x_board {
165 unsigned no_digital:1; /* No digital input */ 165 unsigned no_digital:1; /* No digital input */
166}; 166};
167 167
168static const __devinitdata struct snd_bt87x_board snd_bt87x_boards[] = { 168static __devinitdata struct snd_bt87x_board snd_bt87x_boards[] = {
169 [SND_BT87X_BOARD_UNKNOWN] = { 169 [SND_BT87X_BOARD_UNKNOWN] = {
170 .dig_rate = 32000, /* just a guess */ 170 .dig_rate = 32000, /* just a guess */
171 }, 171 },
@@ -848,7 +848,7 @@ static int __devinit snd_bt87x_detect_card(struct pci_dev *pci)
848 int i; 848 int i;
849 const struct pci_device_id *supported; 849 const struct pci_device_id *supported;
850 850
851 supported = pci_match_device(&driver, pci); 851 supported = pci_match_id(snd_bt87x_ids, pci);
852 if (supported && supported->driver_data > 0) 852 if (supported && supported->driver_data > 0)
853 return supported->driver_data; 853 return supported->driver_data;
854 854
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 187533e477c6..ad4cb38109fc 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -626,24 +626,19 @@ int __devinit snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
626 snd_hda_get_codec_name(codec, bus->card->mixername, 626 snd_hda_get_codec_name(codec, bus->card->mixername,
627 sizeof(bus->card->mixername)); 627 sizeof(bus->card->mixername));
628 628
629#ifdef CONFIG_SND_HDA_GENERIC
630 if (is_generic_config(codec)) { 629 if (is_generic_config(codec)) {
631 err = snd_hda_parse_generic_codec(codec); 630 err = snd_hda_parse_generic_codec(codec);
632 goto patched; 631 goto patched;
633 } 632 }
634#endif
635 if (codec->preset && codec->preset->patch) { 633 if (codec->preset && codec->preset->patch) {
636 err = codec->preset->patch(codec); 634 err = codec->preset->patch(codec);
637 goto patched; 635 goto patched;
638 } 636 }
639 637
640 /* call the default parser */ 638 /* call the default parser */
641#ifdef CONFIG_SND_HDA_GENERIC
642 err = snd_hda_parse_generic_codec(codec); 639 err = snd_hda_parse_generic_codec(codec);
643#else 640 if (err < 0)
644 printk(KERN_ERR "hda-codec: No codec parser is available\n"); 641 printk(KERN_ERR "hda-codec: No codec parser is available\n");
645 err = -ENODEV;
646#endif
647 642
648 patched: 643 patched:
649 if (err < 0) { 644 if (err < 0) {
diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h
index a79d0ed5469c..20c5e6250374 100644
--- a/sound/pci/hda/hda_local.h
+++ b/sound/pci/hda/hda_local.h
@@ -245,7 +245,14 @@ int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec,
245/* 245/*
246 * generic codec parser 246 * generic codec parser
247 */ 247 */
248#ifdef CONFIG_SND_HDA_GENERIC
248int snd_hda_parse_generic_codec(struct hda_codec *codec); 249int snd_hda_parse_generic_codec(struct hda_codec *codec);
250#else
251static inline int snd_hda_parse_generic_codec(struct hda_codec *codec)
252{
253 return -ENODEV;
254}
255#endif
249 256
250/* 257/*
251 * generic proc interface 258 * generic proc interface
@@ -303,16 +310,17 @@ enum {
303 310
304extern const char *auto_pin_cfg_labels[AUTO_PIN_LAST]; 311extern const char *auto_pin_cfg_labels[AUTO_PIN_LAST];
305 312
313#define AUTO_CFG_MAX_OUTS 5
314
306struct auto_pin_cfg { 315struct auto_pin_cfg {
307 int line_outs; 316 int line_outs;
308 hda_nid_t line_out_pins[5]; /* sorted in the order of 317 /* sorted in the order of Front/Surr/CLFE/Side */
309 * Front/Surr/CLFE/Side 318 hda_nid_t line_out_pins[AUTO_CFG_MAX_OUTS];
310 */
311 int speaker_outs; 319 int speaker_outs;
312 hda_nid_t speaker_pins[5]; 320 hda_nid_t speaker_pins[AUTO_CFG_MAX_OUTS];
313 int hp_outs; 321 int hp_outs;
314 int line_out_type; /* AUTO_PIN_XXX_OUT */ 322 int line_out_type; /* AUTO_PIN_XXX_OUT */
315 hda_nid_t hp_pins[5]; 323 hda_nid_t hp_pins[AUTO_CFG_MAX_OUTS];
316 hda_nid_t input_pins[AUTO_PIN_LAST]; 324 hda_nid_t input_pins[AUTO_PIN_LAST];
317 hda_nid_t dig_out_pin; 325 hda_nid_t dig_out_pin;
318 hda_nid_t dig_in_pin; 326 hda_nid_t dig_in_pin;
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
index 54cfd4526d20..0ee8ae4d4410 100644
--- a/sound/pci/hda/patch_analog.c
+++ b/sound/pci/hda/patch_analog.c
@@ -72,7 +72,7 @@ struct ad198x_spec {
72 unsigned int num_kctl_alloc, num_kctl_used; 72 unsigned int num_kctl_alloc, num_kctl_used;
73 struct snd_kcontrol_new *kctl_alloc; 73 struct snd_kcontrol_new *kctl_alloc;
74 struct hda_input_mux private_imux; 74 struct hda_input_mux private_imux;
75 hda_nid_t private_dac_nids[4]; 75 hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];
76 76
77 unsigned int jack_present :1; 77 unsigned int jack_present :1;
78 78
@@ -612,7 +612,8 @@ static void ad1986a_hp_automute(struct hda_codec *codec)
612 unsigned int present; 612 unsigned int present;
613 613
614 present = snd_hda_codec_read(codec, 0x1a, 0, AC_VERB_GET_PIN_SENSE, 0); 614 present = snd_hda_codec_read(codec, 0x1a, 0, AC_VERB_GET_PIN_SENSE, 0);
615 spec->jack_present = (present & 0x80000000) != 0; 615 /* Lenovo N100 seems to report the reversed bit for HP jack-sensing */
616 spec->jack_present = !(present & 0x80000000);
616 ad1986a_update_hp(codec); 617 ad1986a_update_hp(codec);
617} 618}
618 619
diff --git a/sound/pci/hda/patch_cmedia.c b/sound/pci/hda/patch_cmedia.c
index 2468f3171222..6c54793bf424 100644
--- a/sound/pci/hda/patch_cmedia.c
+++ b/sound/pci/hda/patch_cmedia.c
@@ -50,7 +50,7 @@ struct cmi_spec {
50 50
51 /* playback */ 51 /* playback */
52 struct hda_multi_out multiout; 52 struct hda_multi_out multiout;
53 hda_nid_t dac_nids[4]; /* NID for each DAC */ 53 hda_nid_t dac_nids[AUTO_CFG_MAX_OUTS]; /* NID for each DAC */
54 int num_dacs; 54 int num_dacs;
55 55
56 /* capture */ 56 /* capture */
@@ -73,7 +73,6 @@ struct cmi_spec {
73 unsigned int pin_def_confs; 73 unsigned int pin_def_confs;
74 74
75 /* multichannel pins */ 75 /* multichannel pins */
76 hda_nid_t multich_pin[4]; /* max 8-channel */
77 struct hda_verb multi_init[9]; /* 2 verbs for each pin + terminator */ 76 struct hda_verb multi_init[9]; /* 2 verbs for each pin + terminator */
78}; 77};
79 78
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index 080e3001d9c5..6aa073986747 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -85,7 +85,7 @@ struct conexant_spec {
85 unsigned int num_kctl_alloc, num_kctl_used; 85 unsigned int num_kctl_alloc, num_kctl_used;
86 struct snd_kcontrol_new *kctl_alloc; 86 struct snd_kcontrol_new *kctl_alloc;
87 struct hda_input_mux private_imux; 87 struct hda_input_mux private_imux;
88 hda_nid_t private_dac_nids[4]; 88 hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];
89 89
90}; 90};
91 91
@@ -554,10 +554,16 @@ static struct snd_kcontrol_new cxt5045_mixers[] = {
554 .get = conexant_mux_enum_get, 554 .get = conexant_mux_enum_get,
555 .put = conexant_mux_enum_put 555 .put = conexant_mux_enum_put
556 }, 556 },
557 HDA_CODEC_VOLUME("Int Mic Volume", 0x1a, 0x01, HDA_INPUT), 557 HDA_CODEC_VOLUME("Int Mic Capture Volume", 0x1a, 0x01, HDA_INPUT),
558 HDA_CODEC_MUTE("Int Mic Switch", 0x1a, 0x01, HDA_INPUT), 558 HDA_CODEC_MUTE("Int Mic Capture Switch", 0x1a, 0x01, HDA_INPUT),
559 HDA_CODEC_VOLUME("Ext Mic Volume", 0x1a, 0x02, HDA_INPUT), 559 HDA_CODEC_VOLUME("Ext Mic Capture Volume", 0x1a, 0x02, HDA_INPUT),
560 HDA_CODEC_MUTE("Ext Mic Switch", 0x1a, 0x02, HDA_INPUT), 560 HDA_CODEC_MUTE("Ext Mic Capture Switch", 0x1a, 0x02, HDA_INPUT),
561 HDA_CODEC_VOLUME("PCM Playback Volume", 0x17, 0x0, HDA_INPUT),
562 HDA_CODEC_MUTE("PCM Playback Switch", 0x17, 0x0, HDA_INPUT),
563 HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x17, 0x1, HDA_INPUT),
564 HDA_CODEC_MUTE("Int Mic Playback Switch", 0x17, 0x1, HDA_INPUT),
565 HDA_CODEC_VOLUME("Ext Mic Playback Volume", 0x17, 0x2, HDA_INPUT),
566 HDA_CODEC_MUTE("Ext Mic Playback Switch", 0x17, 0x2, HDA_INPUT),
561 HDA_BIND_VOL("Master Playback Volume", &cxt5045_hp_bind_master_vol), 567 HDA_BIND_VOL("Master Playback Volume", &cxt5045_hp_bind_master_vol),
562 { 568 {
563 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 569 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
@@ -576,16 +582,15 @@ static struct hda_verb cxt5045_init_verbs[] = {
576 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, 582 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN },
577 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN|AC_PINCTL_VREF_80 }, 583 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN|AC_PINCTL_VREF_80 },
578 /* HP, Amp */ 584 /* HP, Amp */
579 {0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP }, 585 {0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
580 {0x17, AC_VERB_SET_CONNECT_SEL,0x01}, 586 {0x10, AC_VERB_SET_CONNECT_SEL, 0x1},
581 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, 587 {0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
582 AC_AMP_SET_OUTPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x01}, 588 {0x11, AC_VERB_SET_CONNECT_SEL, 0x1},
583 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, 589 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
584 AC_AMP_SET_OUTPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x02}, 590 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
585 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, 591 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
586 AC_AMP_SET_OUTPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x03}, 592 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
587 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, 593 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
588 AC_AMP_SET_OUTPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x04},
589 /* Record selector: Int mic */ 594 /* Record selector: Int mic */
590 {0x1a, AC_VERB_SET_CONNECT_SEL,0x1}, 595 {0x1a, AC_VERB_SET_CONNECT_SEL,0x1},
591 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, 596 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE,
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 53b0428abfc2..d9f78c809ee9 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -238,7 +238,7 @@ struct alc_spec {
238 unsigned int num_kctl_alloc, num_kctl_used; 238 unsigned int num_kctl_alloc, num_kctl_used;
239 struct snd_kcontrol_new *kctl_alloc; 239 struct snd_kcontrol_new *kctl_alloc;
240 struct hda_input_mux private_imux; 240 struct hda_input_mux private_imux;
241 hda_nid_t private_dac_nids[5]; 241 hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];
242 242
243 /* hooks */ 243 /* hooks */
244 void (*init_hook)(struct hda_codec *codec); 244 void (*init_hook)(struct hda_codec *codec);
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index bf950195107c..f9b2c435a130 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -111,6 +111,7 @@ struct sigmatel_spec {
111 unsigned int alt_switch: 1; 111 unsigned int alt_switch: 1;
112 unsigned int hp_detect: 1; 112 unsigned int hp_detect: 1;
113 unsigned int gpio_mute: 1; 113 unsigned int gpio_mute: 1;
114 unsigned int no_vol_knob :1;
114 115
115 unsigned int gpio_mask, gpio_data; 116 unsigned int gpio_mask, gpio_data;
116 117
@@ -1930,7 +1931,8 @@ static int stac92xx_auto_create_hp_ctls(struct hda_codec *codec,
1930 } 1931 }
1931 if (spec->multiout.hp_nid) { 1932 if (spec->multiout.hp_nid) {
1932 const char *pfx; 1933 const char *pfx;
1933 if (old_num_dacs == spec->multiout.num_dacs) 1934 if (old_num_dacs == spec->multiout.num_dacs &&
1935 spec->no_vol_knob)
1934 pfx = "Master"; 1936 pfx = "Master";
1935 else 1937 else
1936 pfx = "Headphone"; 1938 pfx = "Headphone";
@@ -2487,6 +2489,7 @@ static int patch_stac9200(struct hda_codec *codec)
2487 codec->spec = spec; 2489 codec->spec = spec;
2488 spec->num_pins = ARRAY_SIZE(stac9200_pin_nids); 2490 spec->num_pins = ARRAY_SIZE(stac9200_pin_nids);
2489 spec->pin_nids = stac9200_pin_nids; 2491 spec->pin_nids = stac9200_pin_nids;
2492 spec->no_vol_knob = 1;
2490 spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS, 2493 spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS,
2491 stac9200_models, 2494 stac9200_models,
2492 stac9200_cfg_tbl); 2495 stac9200_cfg_tbl);
@@ -2541,6 +2544,7 @@ static int patch_stac925x(struct hda_codec *codec)
2541 codec->spec = spec; 2544 codec->spec = spec;
2542 spec->num_pins = ARRAY_SIZE(stac925x_pin_nids); 2545 spec->num_pins = ARRAY_SIZE(stac925x_pin_nids);
2543 spec->pin_nids = stac925x_pin_nids; 2546 spec->pin_nids = stac925x_pin_nids;
2547 spec->no_vol_knob = 1;
2544 spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS, 2548 spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS,
2545 stac925x_models, 2549 stac925x_models,
2546 stac925x_cfg_tbl); 2550 stac925x_cfg_tbl);
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index 33b5e1ffa817..4cdf3e6df4ba 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -114,7 +114,7 @@ struct via_spec {
114 unsigned int num_kctl_alloc, num_kctl_used; 114 unsigned int num_kctl_alloc, num_kctl_used;
115 struct snd_kcontrol_new *kctl_alloc; 115 struct snd_kcontrol_new *kctl_alloc;
116 struct hda_input_mux private_imux; 116 struct hda_input_mux private_imux;
117 hda_nid_t private_dac_nids[4]; 117 hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];
118 118
119#ifdef CONFIG_SND_HDA_POWER_SAVE 119#ifdef CONFIG_SND_HDA_POWER_SAVE
120 struct hda_loopback_check loopback; 120 struct hda_loopback_check loopback;
diff --git a/sound/sh/aica.c b/sound/sh/aica.c
index 131ec4812288..88dc840152ce 100644
--- a/sound/sh/aica.c
+++ b/sound/sh/aica.c
@@ -106,11 +106,14 @@ static void spu_write_wait(void)
106static void spu_memset(u32 toi, u32 what, int length) 106static void spu_memset(u32 toi, u32 what, int length)
107{ 107{
108 int i; 108 int i;
109 unsigned long flags;
109 snd_assert(length % 4 == 0, return); 110 snd_assert(length % 4 == 0, return);
110 for (i = 0; i < length; i++) { 111 for (i = 0; i < length; i++) {
111 if (!(i % 8)) 112 if (!(i % 8))
112 spu_write_wait(); 113 spu_write_wait();
114 local_irq_save(flags);
113 writel(what, toi + SPU_MEMORY_BASE); 115 writel(what, toi + SPU_MEMORY_BASE);
116 local_irq_restore(flags);
114 toi++; 117 toi++;
115 } 118 }
116} 119}
@@ -118,6 +121,7 @@ static void spu_memset(u32 toi, u32 what, int length)
118/* spu_memload - write to SPU address space */ 121/* spu_memload - write to SPU address space */
119static void spu_memload(u32 toi, void *from, int length) 122static void spu_memload(u32 toi, void *from, int length)
120{ 123{
124 unsigned long flags;
121 u32 *froml = from; 125 u32 *froml = from;
122 u32 __iomem *to = (u32 __iomem *) (SPU_MEMORY_BASE + toi); 126 u32 __iomem *to = (u32 __iomem *) (SPU_MEMORY_BASE + toi);
123 int i; 127 int i;
@@ -128,7 +132,9 @@ static void spu_memload(u32 toi, void *from, int length)
128 if (!(i % 8)) 132 if (!(i % 8))
129 spu_write_wait(); 133 spu_write_wait();
130 val = *froml; 134 val = *froml;
135 local_irq_save(flags);
131 writel(val, to); 136 writel(val, to);
137 local_irq_restore(flags);
132 froml++; 138 froml++;
133 to++; 139 to++;
134 } 140 }
@@ -138,28 +144,36 @@ static void spu_memload(u32 toi, void *from, int length)
138static void spu_disable(void) 144static void spu_disable(void)
139{ 145{
140 int i; 146 int i;
147 unsigned long flags;
141 u32 regval; 148 u32 regval;
142 spu_write_wait(); 149 spu_write_wait();
143 regval = readl(ARM_RESET_REGISTER); 150 regval = readl(ARM_RESET_REGISTER);
144 regval |= 1; 151 regval |= 1;
145 spu_write_wait(); 152 spu_write_wait();
153 local_irq_save(flags);
146 writel(regval, ARM_RESET_REGISTER); 154 writel(regval, ARM_RESET_REGISTER);
155 local_irq_restore(flags);
147 for (i = 0; i < 64; i++) { 156 for (i = 0; i < 64; i++) {
148 spu_write_wait(); 157 spu_write_wait();
149 regval = readl(SPU_REGISTER_BASE + (i * 0x80)); 158 regval = readl(SPU_REGISTER_BASE + (i * 0x80));
150 regval = (regval & ~0x4000) | 0x8000; 159 regval = (regval & ~0x4000) | 0x8000;
151 spu_write_wait(); 160 spu_write_wait();
161 local_irq_save(flags);
152 writel(regval, SPU_REGISTER_BASE + (i * 0x80)); 162 writel(regval, SPU_REGISTER_BASE + (i * 0x80));
163 local_irq_restore(flags);
153 } 164 }
154} 165}
155 166
156/* spu_enable - set spu registers to enable sound output */ 167/* spu_enable - set spu registers to enable sound output */
157static void spu_enable(void) 168static void spu_enable(void)
158{ 169{
170 unsigned long flags;
159 u32 regval = readl(ARM_RESET_REGISTER); 171 u32 regval = readl(ARM_RESET_REGISTER);
160 regval &= ~1; 172 regval &= ~1;
161 spu_write_wait(); 173 spu_write_wait();
174 local_irq_save(flags);
162 writel(regval, ARM_RESET_REGISTER); 175 writel(regval, ARM_RESET_REGISTER);
176 local_irq_restore(flags);
163} 177}
164 178
165/* 179/*
@@ -168,25 +182,34 @@ static void spu_enable(void)
168*/ 182*/
169static void spu_reset(void) 183static void spu_reset(void)
170{ 184{
185 unsigned long flags;
171 spu_disable(); 186 spu_disable();
172 spu_memset(0, 0, 0x200000 / 4); 187 spu_memset(0, 0, 0x200000 / 4);
173 /* Put ARM7 in endless loop */ 188 /* Put ARM7 in endless loop */
189 local_irq_save(flags);
174 ctrl_outl(0xea000002, SPU_MEMORY_BASE); 190 ctrl_outl(0xea000002, SPU_MEMORY_BASE);
191 local_irq_restore(flags);
175 spu_enable(); 192 spu_enable();
176} 193}
177 194
178/* aica_chn_start - write to spu to start playback */ 195/* aica_chn_start - write to spu to start playback */
179static void aica_chn_start(void) 196static void aica_chn_start(void)
180{ 197{
198 unsigned long flags;
181 spu_write_wait(); 199 spu_write_wait();
200 local_irq_save(flags);
182 writel(AICA_CMD_KICK | AICA_CMD_START, (u32 *) AICA_CONTROL_POINT); 201 writel(AICA_CMD_KICK | AICA_CMD_START, (u32 *) AICA_CONTROL_POINT);
202 local_irq_restore(flags);
183} 203}
184 204
185/* aica_chn_halt - write to spu to halt playback */ 205/* aica_chn_halt - write to spu to halt playback */
186static void aica_chn_halt(void) 206static void aica_chn_halt(void)
187{ 207{
208 unsigned long flags;
188 spu_write_wait(); 209 spu_write_wait();
210 local_irq_save(flags);
189 writel(AICA_CMD_KICK | AICA_CMD_STOP, (u32 *) AICA_CONTROL_POINT); 211 writel(AICA_CMD_KICK | AICA_CMD_STOP, (u32 *) AICA_CONTROL_POINT);
212 local_irq_restore(flags);
190} 213}
191 214
192/* ALSA code below */ 215/* ALSA code below */
@@ -213,12 +236,13 @@ static int aica_dma_transfer(int channels, int buffer_size,
213 int q, err, period_offset; 236 int q, err, period_offset;
214 struct snd_card_aica *dreamcastcard; 237 struct snd_card_aica *dreamcastcard;
215 struct snd_pcm_runtime *runtime; 238 struct snd_pcm_runtime *runtime;
216 err = 0; 239 unsigned long flags;
217 dreamcastcard = substream->pcm->private_data; 240 dreamcastcard = substream->pcm->private_data;
218 period_offset = dreamcastcard->clicks; 241 period_offset = dreamcastcard->clicks;
219 period_offset %= (AICA_PERIOD_NUMBER / channels); 242 period_offset %= (AICA_PERIOD_NUMBER / channels);
220 runtime = substream->runtime; 243 runtime = substream->runtime;
221 for (q = 0; q < channels; q++) { 244 for (q = 0; q < channels; q++) {
245 local_irq_save(flags);
222 err = dma_xfer(AICA_DMA_CHANNEL, 246 err = dma_xfer(AICA_DMA_CHANNEL,
223 (unsigned long) (runtime->dma_area + 247 (unsigned long) (runtime->dma_area +
224 (AICA_BUFFER_SIZE * q) / 248 (AICA_BUFFER_SIZE * q) /
@@ -228,9 +252,12 @@ static int aica_dma_transfer(int channels, int buffer_size,
228 AICA_CHANNEL0_OFFSET + q * CHANNEL_OFFSET + 252 AICA_CHANNEL0_OFFSET + q * CHANNEL_OFFSET +
229 AICA_PERIOD_SIZE * period_offset, 253 AICA_PERIOD_SIZE * period_offset,
230 buffer_size / channels, AICA_DMA_MODE); 254 buffer_size / channels, AICA_DMA_MODE);
231 if (unlikely(err < 0)) 255 if (unlikely(err < 0)) {
256 local_irq_restore(flags);
232 break; 257 break;
258 }
233 dma_wait_for_completion(AICA_DMA_CHANNEL); 259 dma_wait_for_completion(AICA_DMA_CHANNEL);
260 local_irq_restore(flags);
234 } 261 }
235 return err; 262 return err;
236} 263}
diff --git a/sound/sparc/cs4231.c b/sound/sparc/cs4231.c
index 9785382a5f39..f8c7a120ccbb 100644
--- a/sound/sparc/cs4231.c
+++ b/sound/sparc/cs4231.c
@@ -400,65 +400,44 @@ static void snd_cs4231_mce_up(struct snd_cs4231 *chip)
400 400
401static void snd_cs4231_mce_down(struct snd_cs4231 *chip) 401static void snd_cs4231_mce_down(struct snd_cs4231 *chip)
402{ 402{
403 unsigned long flags; 403 unsigned long flags, timeout;
404 unsigned long end_time; 404 int reg;
405 int timeout;
406 405
407 spin_lock_irqsave(&chip->lock, flags);
408 snd_cs4231_busy_wait(chip); 406 snd_cs4231_busy_wait(chip);
407 spin_lock_irqsave(&chip->lock, flags);
409#ifdef CONFIG_SND_DEBUG 408#ifdef CONFIG_SND_DEBUG
410 if (__cs4231_readb(chip, CS4231U(chip, REGSEL)) & CS4231_INIT) 409 if (__cs4231_readb(chip, CS4231U(chip, REGSEL)) & CS4231_INIT)
411 snd_printdd("mce_down [%p] - auto calibration time out (0)\n", 410 snd_printdd("mce_down [%p] - auto calibration time out (0)\n",
412 CS4231U(chip, REGSEL)); 411 CS4231U(chip, REGSEL));
413#endif 412#endif
414 chip->mce_bit &= ~CS4231_MCE; 413 chip->mce_bit &= ~CS4231_MCE;
415 timeout = __cs4231_readb(chip, CS4231U(chip, REGSEL)); 414 reg = __cs4231_readb(chip, CS4231U(chip, REGSEL));
416 __cs4231_writeb(chip, chip->mce_bit | (timeout & 0x1f), 415 __cs4231_writeb(chip, chip->mce_bit | (reg & 0x1f),
417 CS4231U(chip, REGSEL)); 416 CS4231U(chip, REGSEL));
418 if (timeout == 0x80) 417 if (reg == 0x80)
419 snd_printdd("mce_down [%p]: serious init problem - " 418 snd_printdd("mce_down [%p]: serious init problem "
420 "codec still busy\n", 419 "- codec still busy\n", chip->port);
421 chip->port); 420 if ((reg & CS4231_MCE) == 0) {
422 if ((timeout & CS4231_MCE) == 0) {
423 spin_unlock_irqrestore(&chip->lock, flags); 421 spin_unlock_irqrestore(&chip->lock, flags);
424 return; 422 return;
425 } 423 }
426 424
427 /* 425 /*
428 * Wait for (possible -- during init auto-calibration may not be set) 426 * Wait for auto-calibration (AC) process to finish, i.e. ACI to go low.
429 * calibration process to start. Needs upto 5 sample periods on AD1848
430 * which at the slowest possible rate of 5.5125 kHz means 907 us.
431 */ 427 */
432 msleep(1); 428 timeout = jiffies + msecs_to_jiffies(250);
433 429 do {
434 /* check condition up to 250ms */
435 end_time = jiffies + msecs_to_jiffies(250);
436 while (snd_cs4231_in(chip, CS4231_TEST_INIT) &
437 CS4231_CALIB_IN_PROGRESS) {
438
439 spin_unlock_irqrestore(&chip->lock, flags); 430 spin_unlock_irqrestore(&chip->lock, flags);
440 if (time_after(jiffies, end_time)) {
441 snd_printk("mce_down - "
442 "auto calibration time out (2)\n");
443 return;
444 }
445 msleep(1);
446 spin_lock_irqsave(&chip->lock, flags);
447 }
448
449 /* check condition up to 100ms */
450 end_time = jiffies + msecs_to_jiffies(100);
451 while (__cs4231_readb(chip, CS4231U(chip, REGSEL)) & CS4231_INIT) {
452 spin_unlock_irqrestore(&chip->lock, flags);
453 if (time_after(jiffies, end_time)) {
454 snd_printk("mce_down - "
455 "auto calibration time out (3)\n");
456 return;
457 }
458 msleep(1); 431 msleep(1);
459 spin_lock_irqsave(&chip->lock, flags); 432 spin_lock_irqsave(&chip->lock, flags);
460 } 433 reg = snd_cs4231_in(chip, CS4231_TEST_INIT);
434 reg &= CS4231_CALIB_IN_PROGRESS;
435 } while (reg && time_before(jiffies, timeout));
461 spin_unlock_irqrestore(&chip->lock, flags); 436 spin_unlock_irqrestore(&chip->lock, flags);
437
438 if (reg)
439 snd_printk(KERN_ERR
440 "mce_down - auto calibration time out (2)\n");
462} 441}
463 442
464static void snd_cs4231_advance_dma(struct cs4231_dma_control *dma_cont, 443static void snd_cs4231_advance_dma(struct cs4231_dma_control *dma_cont,
diff --git a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h
index 743568f89907..59410f437705 100644
--- a/sound/usb/usbquirks.h
+++ b/sound/usb/usbquirks.h
@@ -84,6 +84,15 @@
84 USB_DEVICE_ID_MATCH_INT_CLASS | 84 USB_DEVICE_ID_MATCH_INT_CLASS |
85 USB_DEVICE_ID_MATCH_INT_SUBCLASS, 85 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
86 .idVendor = 0x046d, 86 .idVendor = 0x046d,
87 .idProduct = 0x08f5,
88 .bInterfaceClass = USB_CLASS_AUDIO,
89 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL
90},
91{
92 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
93 USB_DEVICE_ID_MATCH_INT_CLASS |
94 USB_DEVICE_ID_MATCH_INT_SUBCLASS,
95 .idVendor = 0x046d,
87 .idProduct = 0x08f6, 96 .idProduct = 0x08f6,
88 .bInterfaceClass = USB_CLASS_AUDIO, 97 .bInterfaceClass = USB_CLASS_AUDIO,
89 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL 98 .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL