mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-30 08:04:13 +08:00
Merge branch 'devel-board' into omap-for-linus
This commit is contained in:
commit
fea83f6a9b
@ -47,6 +47,20 @@ Date: January 2007
|
|||||||
KernelVersion: 2.6.20
|
KernelVersion: 2.6.20
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
Description:
|
Description:
|
||||||
Control the bluetooth device. 1 means on, 0 means off.
|
Control the wlan device. 1 means on, 0 means off.
|
||||||
This may control the led, the device or both.
|
This may control the led, the device or both.
|
||||||
Users: Lapsus
|
Users: Lapsus
|
||||||
|
|
||||||
|
What: /sys/devices/platform/asus_laptop/wimax
|
||||||
|
Date: October 2010
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
Description:
|
||||||
|
Control the wimax device. 1 means on, 0 means off.
|
||||||
|
|
||||||
|
What: /sys/devices/platform/asus_laptop/wwan
|
||||||
|
Date: October 2010
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
Description:
|
||||||
|
Control the wwan (3G) device. 1 means on, 0 means off.
|
||||||
|
10
Documentation/ABI/testing/sysfs-platform-eeepc-wmi
Normal file
10
Documentation/ABI/testing/sysfs-platform-eeepc-wmi
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
What: /sys/devices/platform/eeepc-wmi/cpufv
|
||||||
|
Date: Oct 2010
|
||||||
|
KernelVersion: 2.6.37
|
||||||
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
Description:
|
||||||
|
Change CPU clock configuration (write-only).
|
||||||
|
There are three available clock configuration:
|
||||||
|
* 0 -> Super Performance Mode
|
||||||
|
* 1 -> High Performance Mode
|
||||||
|
* 2 -> Power Saving Mode
|
@ -173,12 +173,13 @@ prototypes:
|
|||||||
sector_t (*bmap)(struct address_space *, sector_t);
|
sector_t (*bmap)(struct address_space *, sector_t);
|
||||||
int (*invalidatepage) (struct page *, unsigned long);
|
int (*invalidatepage) (struct page *, unsigned long);
|
||||||
int (*releasepage) (struct page *, int);
|
int (*releasepage) (struct page *, int);
|
||||||
|
void (*freepage)(struct page *);
|
||||||
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
||||||
loff_t offset, unsigned long nr_segs);
|
loff_t offset, unsigned long nr_segs);
|
||||||
int (*launder_page) (struct page *);
|
int (*launder_page) (struct page *);
|
||||||
|
|
||||||
locking rules:
|
locking rules:
|
||||||
All except set_page_dirty may block
|
All except set_page_dirty and freepage may block
|
||||||
|
|
||||||
BKL PageLocked(page) i_mutex
|
BKL PageLocked(page) i_mutex
|
||||||
writepage: no yes, unlocks (see below)
|
writepage: no yes, unlocks (see below)
|
||||||
@ -193,6 +194,7 @@ perform_write: no n/a yes
|
|||||||
bmap: no
|
bmap: no
|
||||||
invalidatepage: no yes
|
invalidatepage: no yes
|
||||||
releasepage: no yes
|
releasepage: no yes
|
||||||
|
freepage: no yes
|
||||||
direct_IO: no
|
direct_IO: no
|
||||||
launder_page: no yes
|
launder_page: no yes
|
||||||
|
|
||||||
@ -288,6 +290,9 @@ buffers from the page in preparation for freeing it. It returns zero to
|
|||||||
indicate that the buffers are (or may be) freeable. If ->releasepage is zero,
|
indicate that the buffers are (or may be) freeable. If ->releasepage is zero,
|
||||||
the kernel assumes that the fs has no private interest in the buffers.
|
the kernel assumes that the fs has no private interest in the buffers.
|
||||||
|
|
||||||
|
->freepage() is called when the kernel is done dropping the page
|
||||||
|
from the page cache.
|
||||||
|
|
||||||
->launder_page() may be called prior to releasing a page if
|
->launder_page() may be called prior to releasing a page if
|
||||||
it is still found to be dirty. It returns zero if the page was successfully
|
it is still found to be dirty. It returns zero if the page was successfully
|
||||||
cleaned, or an error value if not. Note that in order to prevent the page
|
cleaned, or an error value if not. Note that in order to prevent the page
|
||||||
|
@ -534,6 +534,7 @@ struct address_space_operations {
|
|||||||
sector_t (*bmap)(struct address_space *, sector_t);
|
sector_t (*bmap)(struct address_space *, sector_t);
|
||||||
int (*invalidatepage) (struct page *, unsigned long);
|
int (*invalidatepage) (struct page *, unsigned long);
|
||||||
int (*releasepage) (struct page *, int);
|
int (*releasepage) (struct page *, int);
|
||||||
|
void (*freepage)(struct page *);
|
||||||
ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
||||||
loff_t offset, unsigned long nr_segs);
|
loff_t offset, unsigned long nr_segs);
|
||||||
struct page* (*get_xip_page)(struct address_space *, sector_t,
|
struct page* (*get_xip_page)(struct address_space *, sector_t,
|
||||||
@ -678,6 +679,12 @@ struct address_space_operations {
|
|||||||
need to ensure this. Possibly it can clear the PageUptodate
|
need to ensure this. Possibly it can clear the PageUptodate
|
||||||
bit if it cannot free private data yet.
|
bit if it cannot free private data yet.
|
||||||
|
|
||||||
|
freepage: freepage is called once the page is no longer visible in
|
||||||
|
the page cache in order to allow the cleanup of any private
|
||||||
|
data. Since it may be called by the memory reclaimer, it
|
||||||
|
should not assume that the original address_space mapping still
|
||||||
|
exists, and it should not block.
|
||||||
|
|
||||||
direct_IO: called by the generic read/write routines to perform
|
direct_IO: called by the generic read/write routines to perform
|
||||||
direct_IO - that is IO requests which bypass the page cache
|
direct_IO - that is IO requests which bypass the page cache
|
||||||
and transfer data directly between the storage and the
|
and transfer data directly between the storage and the
|
||||||
|
16
MAINTAINERS
16
MAINTAINERS
@ -559,14 +559,14 @@ W: http://maxim.org.za/at91_26.html
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/BCMRING ARM ARCHITECTURE
|
ARM/BCMRING ARM ARCHITECTURE
|
||||||
M: Leo Chen <leochen@broadcom.com>
|
M: Jiandong Zheng <jdzheng@broadcom.com>
|
||||||
M: Scott Branden <sbranden@broadcom.com>
|
M: Scott Branden <sbranden@broadcom.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/mach-bcmring
|
F: arch/arm/mach-bcmring
|
||||||
|
|
||||||
ARM/BCMRING MTD NAND DRIVER
|
ARM/BCMRING MTD NAND DRIVER
|
||||||
M: Leo Chen <leochen@broadcom.com>
|
M: Jiandong Zheng <jdzheng@broadcom.com>
|
||||||
M: Scott Branden <sbranden@broadcom.com>
|
M: Scott Branden <sbranden@broadcom.com>
|
||||||
L: linux-mtd@lists.infradead.org
|
L: linux-mtd@lists.infradead.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@ -815,7 +815,7 @@ F: drivers/mmc/host/msm_sdcc.c
|
|||||||
F: drivers/mmc/host/msm_sdcc.h
|
F: drivers/mmc/host/msm_sdcc.h
|
||||||
F: drivers/serial/msm_serial.h
|
F: drivers/serial/msm_serial.h
|
||||||
F: drivers/serial/msm_serial.c
|
F: drivers/serial/msm_serial.c
|
||||||
T: git git://codeaurora.org/quic/kernel/dwalker/linux-msm.git
|
T: git git://codeaurora.org/quic/kernel/davidb/linux-msm.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/TOSA MACHINE SUPPORT
|
ARM/TOSA MACHINE SUPPORT
|
||||||
@ -5932,7 +5932,6 @@ F: include/linux/tty.h
|
|||||||
|
|
||||||
TULIP NETWORK DRIVERS
|
TULIP NETWORK DRIVERS
|
||||||
M: Grant Grundler <grundler@parisc-linux.org>
|
M: Grant Grundler <grundler@parisc-linux.org>
|
||||||
M: Kyle McMartin <kyle@mcmartin.ca>
|
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/tulip/
|
F: drivers/net/tulip/
|
||||||
@ -6584,6 +6583,15 @@ F: include/linux/mfd/wm8400*
|
|||||||
F: include/sound/wm????.h
|
F: include/sound/wm????.h
|
||||||
F: sound/soc/codecs/wm*
|
F: sound/soc/codecs/wm*
|
||||||
|
|
||||||
|
WORKQUEUE
|
||||||
|
M: Tejun Heo <tj@kernel.org>
|
||||||
|
L: linux-kernel@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git
|
||||||
|
S: Maintained
|
||||||
|
F: include/linux/workqueue.h
|
||||||
|
F: kernel/workqueue.c
|
||||||
|
F: Documentation/workqueue.txt
|
||||||
|
|
||||||
X.25 NETWORK LAYER
|
X.25 NETWORK LAYER
|
||||||
M: Andrew Hendry <andrew.hendry@gmail.com>
|
M: Andrew Hendry <andrew.hendry@gmail.com>
|
||||||
L: linux-x25@vger.kernel.org
|
L: linux-x25@vger.kernel.org
|
||||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 37
|
SUBLEVEL = 37
|
||||||
EXTRAVERSION = -rc5
|
EXTRAVERSION = -rc6
|
||||||
NAME = Flesh-Eating Bats with Fangs
|
NAME = Flesh-Eating Bats with Fangs
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -1311,7 +1311,7 @@ config HZ
|
|||||||
|
|
||||||
config THUMB2_KERNEL
|
config THUMB2_KERNEL
|
||||||
bool "Compile the kernel in Thumb-2 mode"
|
bool "Compile the kernel in Thumb-2 mode"
|
||||||
depends on CPU_V7 && EXPERIMENTAL
|
depends on CPU_V7 && !CPU_V6 && EXPERIMENTAL
|
||||||
select AEABI
|
select AEABI
|
||||||
select ARM_ASM_UNIFIED
|
select ARM_ASM_UNIFIED
|
||||||
help
|
help
|
||||||
@ -1759,7 +1759,7 @@ comment "At least one emulation must be selected"
|
|||||||
|
|
||||||
config FPE_NWFPE
|
config FPE_NWFPE
|
||||||
bool "NWFPE math emulation"
|
bool "NWFPE math emulation"
|
||||||
depends on !AEABI || OABI_COMPAT
|
depends on (!AEABI || OABI_COMPAT) && !THUMB2_KERNEL
|
||||||
---help---
|
---help---
|
||||||
Say Y to include the NWFPE floating point emulator in the kernel.
|
Say Y to include the NWFPE floating point emulator in the kernel.
|
||||||
This is necessary to run most binaries. Linux does not currently
|
This is necessary to run most binaries. Linux does not currently
|
||||||
|
@ -126,7 +126,6 @@ static APBC_CLK(twsi3, MMP2_TWSI3, 0, 26000000);
|
|||||||
static APBC_CLK(twsi4, MMP2_TWSI4, 0, 26000000);
|
static APBC_CLK(twsi4, MMP2_TWSI4, 0, 26000000);
|
||||||
static APBC_CLK(twsi5, MMP2_TWSI5, 0, 26000000);
|
static APBC_CLK(twsi5, MMP2_TWSI5, 0, 26000000);
|
||||||
static APBC_CLK(twsi6, MMP2_TWSI6, 0, 26000000);
|
static APBC_CLK(twsi6, MMP2_TWSI6, 0, 26000000);
|
||||||
static APBC_CLK(rtc, MMP2_RTC, 0, 32768);
|
|
||||||
|
|
||||||
static APMU_CLK(nand, NAND, 0xbf, 100000000);
|
static APMU_CLK(nand, NAND, 0xbf, 100000000);
|
||||||
|
|
||||||
|
@ -220,6 +220,12 @@ config MACH_NOKIA_N8X0
|
|||||||
select MACH_NOKIA_N810
|
select MACH_NOKIA_N810
|
||||||
select MACH_NOKIA_N810_WIMAX
|
select MACH_NOKIA_N810_WIMAX
|
||||||
|
|
||||||
|
config MACH_NOKIA_RM680
|
||||||
|
bool "Nokia RM-680 board"
|
||||||
|
depends on ARCH_OMAP3
|
||||||
|
default y
|
||||||
|
select OMAP_PACKAGE_CBB
|
||||||
|
|
||||||
config MACH_NOKIA_RX51
|
config MACH_NOKIA_RX51
|
||||||
bool "Nokia RX-51 board"
|
bool "Nokia RX-51 board"
|
||||||
depends on ARCH_OMAP3
|
depends on ARCH_OMAP3
|
||||||
|
@ -140,8 +140,11 @@ obj-$(CONFIG_MACH_OMAP_3430SDP) += board-3430sdp.o \
|
|||||||
hsmmc.o \
|
hsmmc.o \
|
||||||
board-flash.o
|
board-flash.o
|
||||||
obj-$(CONFIG_MACH_NOKIA_N8X0) += board-n8x0.o
|
obj-$(CONFIG_MACH_NOKIA_N8X0) += board-n8x0.o
|
||||||
|
obj-$(CONFIG_MACH_NOKIA_RM680) += board-rm680.o \
|
||||||
|
sdram-nokia.o \
|
||||||
|
hsmmc.o
|
||||||
obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51.o \
|
obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51.o \
|
||||||
board-rx51-sdram.o \
|
sdram-nokia.o \
|
||||||
board-rx51-peripherals.o \
|
board-rx51-peripherals.o \
|
||||||
board-rx51-video.o \
|
board-rx51-video.o \
|
||||||
hsmmc.o
|
hsmmc.o
|
||||||
|
186
arch/arm/mach-omap2/board-rm680.c
Normal file
186
arch/arm/mach-omap2/board-rm680.c
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
/*
|
||||||
|
* Board support file for Nokia RM-680.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Nokia
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/i2c.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/i2c/twl.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/regulator/fixed.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
|
#include <linux/regulator/consumer.h>
|
||||||
|
|
||||||
|
#include <asm/mach/arch.h>
|
||||||
|
#include <asm/mach-types.h>
|
||||||
|
|
||||||
|
#include <plat/i2c.h>
|
||||||
|
#include <plat/mmc.h>
|
||||||
|
#include <plat/usb.h>
|
||||||
|
#include <plat/gpmc.h>
|
||||||
|
#include <plat/common.h>
|
||||||
|
#include <plat/onenand.h>
|
||||||
|
|
||||||
|
#include "mux.h"
|
||||||
|
#include "hsmmc.h"
|
||||||
|
#include "sdram-nokia.h"
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply rm680_vemmc_consumers[] = {
|
||||||
|
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Fixed regulator for internal eMMC */
|
||||||
|
static struct regulator_init_data rm680_vemmc = {
|
||||||
|
.constraints = {
|
||||||
|
.name = "rm680_vemmc",
|
||||||
|
.min_uV = 2900000,
|
||||||
|
.max_uV = 2900000,
|
||||||
|
.apply_uV = 1,
|
||||||
|
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||||
|
| REGULATOR_MODE_STANDBY,
|
||||||
|
.valid_ops_mask = REGULATOR_CHANGE_STATUS
|
||||||
|
| REGULATOR_CHANGE_MODE,
|
||||||
|
},
|
||||||
|
.num_consumer_supplies = ARRAY_SIZE(rm680_vemmc_consumers),
|
||||||
|
.consumer_supplies = rm680_vemmc_consumers,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct fixed_voltage_config rm680_vemmc_config = {
|
||||||
|
.supply_name = "VEMMC",
|
||||||
|
.microvolts = 2900000,
|
||||||
|
.gpio = 157,
|
||||||
|
.startup_delay = 150,
|
||||||
|
.enable_high = 1,
|
||||||
|
.init_data = &rm680_vemmc,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device rm680_vemmc_device = {
|
||||||
|
.name = "reg-fixed-voltage",
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &rm680_vemmc_config,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device *rm680_peripherals_devices[] __initdata = {
|
||||||
|
&rm680_vemmc_device,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* TWL */
|
||||||
|
static struct twl4030_gpio_platform_data rm680_gpio_data = {
|
||||||
|
.gpio_base = OMAP_MAX_GPIO_LINES,
|
||||||
|
.irq_base = TWL4030_GPIO_IRQ_BASE,
|
||||||
|
.irq_end = TWL4030_GPIO_IRQ_END,
|
||||||
|
.pullups = BIT(0),
|
||||||
|
.pulldowns = BIT(1) | BIT(2) | BIT(8) | BIT(15),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct twl4030_usb_data rm680_usb_data = {
|
||||||
|
.usb_mode = T2_USB_MODE_ULPI,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct twl4030_platform_data rm680_twl_data = {
|
||||||
|
.irq_base = TWL4030_IRQ_BASE,
|
||||||
|
.irq_end = TWL4030_IRQ_END,
|
||||||
|
.gpio = &rm680_gpio_data,
|
||||||
|
.usb = &rm680_usb_data,
|
||||||
|
/* add rest of the children here */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct i2c_board_info __initdata rm680_twl_i2c_board_info[] = {
|
||||||
|
{
|
||||||
|
I2C_BOARD_INFO("twl5031", 0x48),
|
||||||
|
.flags = I2C_CLIENT_WAKE,
|
||||||
|
.irq = INT_34XX_SYS_NIRQ,
|
||||||
|
.platform_data = &rm680_twl_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __init rm680_i2c_init(void)
|
||||||
|
{
|
||||||
|
omap_register_i2c_bus(1, 2900, rm680_twl_i2c_board_info,
|
||||||
|
ARRAY_SIZE(rm680_twl_i2c_board_info));
|
||||||
|
omap_register_i2c_bus(2, 400, NULL, 0);
|
||||||
|
omap_register_i2c_bus(3, 400, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
|
||||||
|
defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
|
||||||
|
static struct omap_onenand_platform_data board_onenand_data[] = {
|
||||||
|
{
|
||||||
|
.gpio_irq = 65,
|
||||||
|
.flags = ONENAND_SYNC_READWRITE,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* eMMC */
|
||||||
|
static struct omap2_hsmmc_info mmc[] __initdata = {
|
||||||
|
{
|
||||||
|
.name = "internal",
|
||||||
|
.mmc = 2,
|
||||||
|
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_MMC_HIGHSPEED,
|
||||||
|
.gpio_cd = -EINVAL,
|
||||||
|
.gpio_wp = -EINVAL,
|
||||||
|
},
|
||||||
|
{ /* Terminator */ }
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __init rm680_peripherals_init(void)
|
||||||
|
{
|
||||||
|
platform_add_devices(rm680_peripherals_devices,
|
||||||
|
ARRAY_SIZE(rm680_peripherals_devices));
|
||||||
|
rm680_i2c_init();
|
||||||
|
gpmc_onenand_init(board_onenand_data);
|
||||||
|
omap2_hsmmc_init(mmc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init rm680_init_irq(void)
|
||||||
|
{
|
||||||
|
struct omap_sdrc_params *sdrc_params;
|
||||||
|
|
||||||
|
sdrc_params = nokia_get_sdram_timings();
|
||||||
|
omap2_init_common_hw(sdrc_params, sdrc_params);
|
||||||
|
omap_init_irq();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_OMAP_MUX
|
||||||
|
static struct omap_board_mux board_mux[] __initdata = {
|
||||||
|
{ .reg_offset = OMAP_MUX_TERMINATOR },
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static struct omap_musb_board_data rm680_musb_data = {
|
||||||
|
.interface_type = MUSB_INTERFACE_ULPI,
|
||||||
|
.mode = MUSB_PERIPHERAL,
|
||||||
|
.power = 100,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __init rm680_init(void)
|
||||||
|
{
|
||||||
|
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||||
|
omap_serial_init();
|
||||||
|
usb_musb_init(&rm680_musb_data);
|
||||||
|
rm680_peripherals_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init rm680_map_io(void)
|
||||||
|
{
|
||||||
|
omap2_set_globals_3xxx();
|
||||||
|
omap34xx_map_common_io();
|
||||||
|
}
|
||||||
|
|
||||||
|
MACHINE_START(NOKIA_RM680, "Nokia RM-680 board")
|
||||||
|
.boot_params = 0x80000100,
|
||||||
|
.map_io = rm680_map_io,
|
||||||
|
.reserve = omap_reserve,
|
||||||
|
.init_irq = rm680_init_irq,
|
||||||
|
.init_machine = rm680_init,
|
||||||
|
.timer = &omap_timer,
|
||||||
|
MACHINE_END
|
@ -32,10 +32,10 @@
|
|||||||
|
|
||||||
#include "mux.h"
|
#include "mux.h"
|
||||||
#include "pm.h"
|
#include "pm.h"
|
||||||
|
#include "sdram-nokia.h"
|
||||||
|
|
||||||
#define RX51_GPIO_SLEEP_IND 162
|
#define RX51_GPIO_SLEEP_IND 162
|
||||||
|
|
||||||
struct omap_sdrc_params *rx51_get_sdram_timings(void);
|
|
||||||
extern void rx51_video_mem_init(void);
|
extern void rx51_video_mem_init(void);
|
||||||
|
|
||||||
static struct gpio_led gpio_leds[] = {
|
static struct gpio_led gpio_leds[] = {
|
||||||
@ -105,7 +105,7 @@ static void __init rx51_init_irq(void)
|
|||||||
omap_board_config = rx51_config;
|
omap_board_config = rx51_config;
|
||||||
omap_board_config_size = ARRAY_SIZE(rx51_config);
|
omap_board_config_size = ARRAY_SIZE(rx51_config);
|
||||||
omap3_pm_init_cpuidle(rx51_cpuidle_params);
|
omap3_pm_init_cpuidle(rx51_cpuidle_params);
|
||||||
sdrc_params = rx51_get_sdram_timings();
|
sdrc_params = nokia_get_sdram_timings();
|
||||||
omap2_init_common_hw(sdrc_params, sdrc_params);
|
omap2_init_common_hw(sdrc_params, sdrc_params);
|
||||||
omap_init_irq();
|
omap_init_irq();
|
||||||
}
|
}
|
||||||
|
@ -216,7 +216,7 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
|
|||||||
{
|
{
|
||||||
.name = "wl1271",
|
.name = "wl1271",
|
||||||
.mmc = 3,
|
.mmc = 3,
|
||||||
.caps = MMC_CAP_4_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
|
||||||
.gpio_wp = -EINVAL,
|
.gpio_wp = -EINVAL,
|
||||||
.gpio_cd = -EINVAL,
|
.gpio_cd = -EINVAL,
|
||||||
.nonremovable = true,
|
.nonremovable = true,
|
||||||
|
@ -298,7 +298,7 @@ static int __init _omap2_init_reprogram_sdrc(void)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck");
|
dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck");
|
||||||
if (!dpll3_m2_ck)
|
if (IS_ERR(dpll3_m2_ck))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
rate = clk_get_rate(dpll3_m2_ck);
|
rate = clk_get_rate(dpll3_m2_ck);
|
||||||
|
@ -161,6 +161,23 @@ void omap2_pm_dump(int mode, int resume, unsigned int us)
|
|||||||
printk(KERN_INFO "%-20s: 0x%08x\n", regs[i].name, regs[i].val);
|
printk(KERN_INFO "%-20s: 0x%08x\n", regs[i].name, regs[i].val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds)
|
||||||
|
{
|
||||||
|
u32 tick_rate, cycles;
|
||||||
|
|
||||||
|
if (!seconds && !milliseconds)
|
||||||
|
return;
|
||||||
|
|
||||||
|
tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup));
|
||||||
|
cycles = tick_rate * seconds + tick_rate * milliseconds / 1000;
|
||||||
|
omap_dm_timer_stop(gptimer_wakeup);
|
||||||
|
omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles);
|
||||||
|
|
||||||
|
pr_info("PM: Resume timer in %u.%03u secs"
|
||||||
|
" (%d ticks at %d ticks/sec.)\n",
|
||||||
|
seconds, milliseconds, cycles, tick_rate);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_FS
|
#ifdef CONFIG_DEBUG_FS
|
||||||
#include <linux/debugfs.h>
|
#include <linux/debugfs.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
@ -354,23 +371,6 @@ void pm_dbg_update_time(struct powerdomain *pwrdm, int prev)
|
|||||||
pwrdm->timer = t;
|
pwrdm->timer = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds)
|
|
||||||
{
|
|
||||||
u32 tick_rate, cycles;
|
|
||||||
|
|
||||||
if (!seconds && !milliseconds)
|
|
||||||
return;
|
|
||||||
|
|
||||||
tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup));
|
|
||||||
cycles = tick_rate * seconds + tick_rate * milliseconds / 1000;
|
|
||||||
omap_dm_timer_stop(gptimer_wakeup);
|
|
||||||
omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles);
|
|
||||||
|
|
||||||
pr_info("PM: Resume timer in %u.%03u secs"
|
|
||||||
" (%d ticks at %d ticks/sec.)\n",
|
|
||||||
seconds, milliseconds, cycles, tick_rate);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int clkdm_dbg_show_counter(struct clockdomain *clkdm, void *user)
|
static int clkdm_dbg_show_counter(struct clockdomain *clkdm, void *user)
|
||||||
{
|
{
|
||||||
struct seq_file *s = (struct seq_file *)user;
|
struct seq_file *s = (struct seq_file *)user;
|
||||||
|
@ -53,6 +53,19 @@
|
|||||||
#include <plat/powerdomain.h>
|
#include <plat/powerdomain.h>
|
||||||
#include <plat/clockdomain.h>
|
#include <plat/clockdomain.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_SUSPEND
|
||||||
|
static suspend_state_t suspend_state = PM_SUSPEND_ON;
|
||||||
|
static inline bool is_suspending(void)
|
||||||
|
{
|
||||||
|
return (suspend_state != PM_SUSPEND_ON);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline bool is_suspending(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void (*omap2_sram_idle)(void);
|
static void (*omap2_sram_idle)(void);
|
||||||
static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl,
|
static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl,
|
||||||
void __iomem *sdrc_power);
|
void __iomem *sdrc_power);
|
||||||
@ -120,8 +133,9 @@ static void omap2_enter_full_retention(void)
|
|||||||
goto no_sleep;
|
goto no_sleep;
|
||||||
|
|
||||||
/* Block console output in case it is on one of the OMAP UARTs */
|
/* Block console output in case it is on one of the OMAP UARTs */
|
||||||
if (try_acquire_console_sem())
|
if (!is_suspending())
|
||||||
goto no_sleep;
|
if (try_acquire_console_sem())
|
||||||
|
goto no_sleep;
|
||||||
|
|
||||||
omap_uart_prepare_idle(0);
|
omap_uart_prepare_idle(0);
|
||||||
omap_uart_prepare_idle(1);
|
omap_uart_prepare_idle(1);
|
||||||
@ -136,7 +150,8 @@ static void omap2_enter_full_retention(void)
|
|||||||
omap_uart_resume_idle(1);
|
omap_uart_resume_idle(1);
|
||||||
omap_uart_resume_idle(0);
|
omap_uart_resume_idle(0);
|
||||||
|
|
||||||
release_console_sem();
|
if (!is_suspending())
|
||||||
|
release_console_sem();
|
||||||
|
|
||||||
no_sleep:
|
no_sleep:
|
||||||
if (omap2_pm_debug) {
|
if (omap2_pm_debug) {
|
||||||
@ -284,6 +299,12 @@ out:
|
|||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int omap2_pm_begin(suspend_state_t state)
|
||||||
|
{
|
||||||
|
suspend_state = state;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int omap2_pm_prepare(void)
|
static int omap2_pm_prepare(void)
|
||||||
{
|
{
|
||||||
/* We cannot sleep in idle until we have resumed */
|
/* We cannot sleep in idle until we have resumed */
|
||||||
@ -333,10 +354,17 @@ static void omap2_pm_finish(void)
|
|||||||
enable_hlt();
|
enable_hlt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void omap2_pm_end(void)
|
||||||
|
{
|
||||||
|
suspend_state = PM_SUSPEND_ON;
|
||||||
|
}
|
||||||
|
|
||||||
static struct platform_suspend_ops omap_pm_ops = {
|
static struct platform_suspend_ops omap_pm_ops = {
|
||||||
|
.begin = omap2_pm_begin,
|
||||||
.prepare = omap2_pm_prepare,
|
.prepare = omap2_pm_prepare,
|
||||||
.enter = omap2_pm_enter,
|
.enter = omap2_pm_enter,
|
||||||
.finish = omap2_pm_finish,
|
.finish = omap2_pm_finish,
|
||||||
|
.end = omap2_pm_end,
|
||||||
.valid = suspend_valid_only_mem,
|
.valid = suspend_valid_only_mem,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -50,6 +50,19 @@
|
|||||||
#include "sdrc.h"
|
#include "sdrc.h"
|
||||||
#include "control.h"
|
#include "control.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_SUSPEND
|
||||||
|
static suspend_state_t suspend_state = PM_SUSPEND_ON;
|
||||||
|
static inline bool is_suspending(void)
|
||||||
|
{
|
||||||
|
return (suspend_state != PM_SUSPEND_ON);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline bool is_suspending(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Scratchpad offsets */
|
/* Scratchpad offsets */
|
||||||
#define OMAP343X_TABLE_ADDRESS_OFFSET 0xc4
|
#define OMAP343X_TABLE_ADDRESS_OFFSET 0xc4
|
||||||
#define OMAP343X_TABLE_VALUE_OFFSET 0xc0
|
#define OMAP343X_TABLE_VALUE_OFFSET 0xc0
|
||||||
@ -387,10 +400,11 @@ void omap_sram_idle(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Block console output in case it is on one of the OMAP UARTs */
|
/* Block console output in case it is on one of the OMAP UARTs */
|
||||||
if (per_next_state < PWRDM_POWER_ON ||
|
if (!is_suspending())
|
||||||
core_next_state < PWRDM_POWER_ON)
|
if (per_next_state < PWRDM_POWER_ON ||
|
||||||
if (try_acquire_console_sem())
|
core_next_state < PWRDM_POWER_ON)
|
||||||
goto console_still_active;
|
if (try_acquire_console_sem())
|
||||||
|
goto console_still_active;
|
||||||
|
|
||||||
/* PER */
|
/* PER */
|
||||||
if (per_next_state < PWRDM_POWER_ON) {
|
if (per_next_state < PWRDM_POWER_ON) {
|
||||||
@ -470,7 +484,8 @@ void omap_sram_idle(void)
|
|||||||
omap_uart_resume_idle(3);
|
omap_uart_resume_idle(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
release_console_sem();
|
if (!is_suspending())
|
||||||
|
release_console_sem();
|
||||||
|
|
||||||
console_still_active:
|
console_still_active:
|
||||||
/* Disable IO-PAD and IO-CHAIN wakeup */
|
/* Disable IO-PAD and IO-CHAIN wakeup */
|
||||||
@ -514,8 +529,6 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SUSPEND
|
#ifdef CONFIG_SUSPEND
|
||||||
static suspend_state_t suspend_state;
|
|
||||||
|
|
||||||
static int omap3_pm_prepare(void)
|
static int omap3_pm_prepare(void)
|
||||||
{
|
{
|
||||||
disable_hlt();
|
disable_hlt();
|
||||||
|
@ -243,13 +243,14 @@
|
|||||||
#define OMAP24XX_EN_GPT1_MASK (1 << 0)
|
#define OMAP24XX_EN_GPT1_MASK (1 << 0)
|
||||||
|
|
||||||
/* PM_WKST_WKUP, CM_IDLEST_WKUP shared bits */
|
/* PM_WKST_WKUP, CM_IDLEST_WKUP shared bits */
|
||||||
#define OMAP24XX_ST_GPIOS_SHIFT (1 << 2)
|
#define OMAP24XX_ST_GPIOS_SHIFT 2
|
||||||
#define OMAP24XX_ST_GPIOS_MASK 2
|
#define OMAP24XX_ST_GPIOS_MASK (1 << 2)
|
||||||
#define OMAP24XX_ST_GPT1_SHIFT (1 << 0)
|
#define OMAP24XX_ST_GPT1_SHIFT 0
|
||||||
#define OMAP24XX_ST_GPT1_MASK 0
|
#define OMAP24XX_ST_GPT1_MASK (1 << 0)
|
||||||
|
|
||||||
/* CM_IDLEST_MDM and PM_WKST_MDM shared bits */
|
/* CM_IDLEST_MDM and PM_WKST_MDM shared bits */
|
||||||
#define OMAP2430_ST_MDM_SHIFT (1 << 0)
|
#define OMAP2430_ST_MDM_SHIFT 0
|
||||||
|
#define OMAP2430_ST_MDM_MASK (1 << 0)
|
||||||
|
|
||||||
|
|
||||||
/* 3430 register bits shared between CM & PRM registers */
|
/* 3430 register bits shared between CM & PRM registers */
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* SDRC register values for RX51
|
* SDRC register values for Nokia boards
|
||||||
*
|
*
|
||||||
* Copyright (C) 2008 Nokia Corporation
|
* Copyright (C) 2008, 2010 Nokia Corporation
|
||||||
*
|
*
|
||||||
* Lauri Leukkunen <lauri.leukkunen@nokia.com>
|
* Lauri Leukkunen <lauri.leukkunen@nokia.com>
|
||||||
*
|
*
|
||||||
@ -22,6 +22,7 @@
|
|||||||
#include <plat/clock.h>
|
#include <plat/clock.h>
|
||||||
#include <plat/sdrc.h>
|
#include <plat/sdrc.h>
|
||||||
|
|
||||||
|
#include "sdram-nokia.h"
|
||||||
|
|
||||||
/* In picoseconds, except for tREF (ns), tXP, tCKE, tWTR (clks) */
|
/* In picoseconds, except for tREF (ns), tXP, tCKE, tWTR (clks) */
|
||||||
struct sdram_timings {
|
struct sdram_timings {
|
||||||
@ -43,9 +44,28 @@ struct sdram_timings {
|
|||||||
u32 tWTR;
|
u32 tWTR;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct omap_sdrc_params rx51_sdrc_params[4];
|
static const struct sdram_timings nokia_97dot6mhz_timings[] = {
|
||||||
|
{
|
||||||
|
.casl = 3,
|
||||||
|
.tDAL = 30725,
|
||||||
|
.tDPL = 15362,
|
||||||
|
.tRRD = 10241,
|
||||||
|
.tRCD = 20483,
|
||||||
|
.tRP = 15362,
|
||||||
|
.tRAS = 40967,
|
||||||
|
.tRC = 56330,
|
||||||
|
.tRFC = 138266,
|
||||||
|
.tXSR = 204839,
|
||||||
|
|
||||||
static const struct sdram_timings rx51_timings[] = {
|
.tREF = 7798,
|
||||||
|
|
||||||
|
.tXP = 2,
|
||||||
|
.tCKE = 4,
|
||||||
|
.tWTR = 2,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct sdram_timings nokia_166mhz_timings[] = {
|
||||||
{
|
{
|
||||||
.casl = 3,
|
.casl = 3,
|
||||||
.tDAL = 33000,
|
.tDAL = 33000,
|
||||||
@ -66,6 +86,38 @@ static const struct sdram_timings rx51_timings[] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct sdram_timings nokia_195dot2mhz_timings[] = {
|
||||||
|
{
|
||||||
|
.casl = 3,
|
||||||
|
.tDAL = 30725,
|
||||||
|
.tDPL = 15362,
|
||||||
|
.tRRD = 10241,
|
||||||
|
.tRCD = 20483,
|
||||||
|
.tRP = 15362,
|
||||||
|
.tRAS = 40967,
|
||||||
|
.tRC = 56330,
|
||||||
|
.tRFC = 138266,
|
||||||
|
.tXSR = 204839,
|
||||||
|
|
||||||
|
.tREF = 7752,
|
||||||
|
|
||||||
|
.tXP = 2,
|
||||||
|
.tCKE = 4,
|
||||||
|
.tWTR = 2,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct {
|
||||||
|
long rate;
|
||||||
|
struct sdram_timings const *data;
|
||||||
|
} nokia_timings[] = {
|
||||||
|
{ 83000000, nokia_166mhz_timings },
|
||||||
|
{ 97600000, nokia_97dot6mhz_timings },
|
||||||
|
{ 166000000, nokia_166mhz_timings },
|
||||||
|
{ 195200000, nokia_195dot2mhz_timings },
|
||||||
|
};
|
||||||
|
static struct omap_sdrc_params nokia_sdrc_params[ARRAY_SIZE(nokia_timings) + 1];
|
||||||
|
|
||||||
static unsigned long sdrc_get_fclk_period(long rate)
|
static unsigned long sdrc_get_fclk_period(long rate)
|
||||||
{
|
{
|
||||||
/* In picoseconds */
|
/* In picoseconds */
|
||||||
@ -110,12 +162,12 @@ static int set_sdrc_timing_regval(u32 *regval, int st_bit, int end_bit,
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#define SDRC_SET_ONE(reg, st, end, field, rate) \
|
#define SDRC_SET_ONE(reg, st, end, field, rate) \
|
||||||
if (set_sdrc_timing_regval((reg), (st), (end), \
|
if (set_sdrc_timing_regval((reg), (st), (end), \
|
||||||
rx51_timings->field, (rate), #field) < 0) \
|
memory_timings->field, (rate), #field) < 0) \
|
||||||
err = -1;
|
err = -1;
|
||||||
#else
|
#else
|
||||||
#define SDRC_SET_ONE(reg, st, end, field, rate) \
|
#define SDRC_SET_ONE(reg, st, end, field, rate) \
|
||||||
if (set_sdrc_timing_regval((reg), (st), (end), \
|
if (set_sdrc_timing_regval((reg), (st), (end), \
|
||||||
rx51_timings->field) < 0) \
|
memory_timings->field) < 0) \
|
||||||
err = -1;
|
err = -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -148,18 +200,19 @@ static int set_sdrc_timing_regval_ps(u32 *regval, int st_bit, int end_bit,
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \
|
#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \
|
||||||
if (set_sdrc_timing_regval_ps((reg), (st), (end), \
|
if (set_sdrc_timing_regval_ps((reg), (st), (end), \
|
||||||
rx51_timings->field, \
|
memory_timings->field, \
|
||||||
(rate), #field) < 0) \
|
(rate), #field) < 0) \
|
||||||
err = -1;
|
err = -1;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \
|
#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \
|
||||||
if (set_sdrc_timing_regval_ps((reg), (st), (end), \
|
if (set_sdrc_timing_regval_ps((reg), (st), (end), \
|
||||||
rx51_timings->field, (rate)) < 0) \
|
memory_timings->field, (rate)) < 0) \
|
||||||
err = -1;
|
err = -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int sdrc_timings(int id, long rate)
|
static int sdrc_timings(int id, long rate,
|
||||||
|
const struct sdram_timings *memory_timings)
|
||||||
{
|
{
|
||||||
u32 ticks_per_ms;
|
u32 ticks_per_ms;
|
||||||
u32 rfr, l;
|
u32 rfr, l;
|
||||||
@ -184,7 +237,7 @@ static int sdrc_timings(int id, long rate)
|
|||||||
SDRC_SET_ONE(&actim_ctrlb, 16, 17, tWTR, l3_rate);
|
SDRC_SET_ONE(&actim_ctrlb, 16, 17, tWTR, l3_rate);
|
||||||
|
|
||||||
ticks_per_ms = l3_rate;
|
ticks_per_ms = l3_rate;
|
||||||
rfr = rx51_timings[0].tREF * ticks_per_ms / 1000000;
|
rfr = memory_timings[0].tREF * ticks_per_ms / 1000000;
|
||||||
if (rfr > 65535 + 50)
|
if (rfr > 65535 + 50)
|
||||||
rfr = 65535;
|
rfr = 65535;
|
||||||
else
|
else
|
||||||
@ -197,25 +250,30 @@ static int sdrc_timings(int id, long rate)
|
|||||||
l = rfr << 8;
|
l = rfr << 8;
|
||||||
rfr_ctrl = l | 0x1; /* autorefresh, reload counter with 1xARCV */
|
rfr_ctrl = l | 0x1; /* autorefresh, reload counter with 1xARCV */
|
||||||
|
|
||||||
rx51_sdrc_params[id].rate = rate;
|
nokia_sdrc_params[id].rate = rate;
|
||||||
rx51_sdrc_params[id].actim_ctrla = actim_ctrla;
|
nokia_sdrc_params[id].actim_ctrla = actim_ctrla;
|
||||||
rx51_sdrc_params[id].actim_ctrlb = actim_ctrlb;
|
nokia_sdrc_params[id].actim_ctrlb = actim_ctrlb;
|
||||||
rx51_sdrc_params[id].rfr_ctrl = rfr_ctrl;
|
nokia_sdrc_params[id].rfr_ctrl = rfr_ctrl;
|
||||||
rx51_sdrc_params[id].mr = 0x32;
|
nokia_sdrc_params[id].mr = 0x32;
|
||||||
|
|
||||||
rx51_sdrc_params[id + 1].rate = 0;
|
nokia_sdrc_params[id + 1].rate = 0;
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct omap_sdrc_params *rx51_get_sdram_timings(void)
|
struct omap_sdrc_params *nokia_get_sdram_timings(void)
|
||||||
{
|
{
|
||||||
int err;
|
int err = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
err = sdrc_timings(0, 41500000);
|
for (i = 0; i < ARRAY_SIZE(nokia_timings); i++) {
|
||||||
err |= sdrc_timings(1, 83000000);
|
err |= sdrc_timings(i, nokia_timings[i].rate,
|
||||||
err |= sdrc_timings(2, 166000000);
|
nokia_timings[i].data);
|
||||||
|
if (err)
|
||||||
|
pr_err("%s: error with rate %ld: %d\n", __func__,
|
||||||
|
nokia_timings[i].rate, err);
|
||||||
|
}
|
||||||
|
|
||||||
return &rx51_sdrc_params[0];
|
return err ? NULL : nokia_sdrc_params;
|
||||||
}
|
}
|
||||||
|
|
12
arch/arm/mach-omap2/sdram-nokia.h
Normal file
12
arch/arm/mach-omap2/sdram-nokia.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
* SDRC register values for Nokia boards
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Nokia
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct omap_sdrc_params *nokia_get_sdram_timings(void);
|
||||||
|
|
@ -241,7 +241,8 @@ static inline void palmtx_keys_init(void) {}
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* NAND Flash
|
* NAND Flash
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#if defined(CONFIG_MTD_NAND_GPIO) || defined(CONFIG_MTD_NAND_GPIO_MODULE)
|
#if defined(CONFIG_MTD_NAND_PLATFORM) || \
|
||||||
|
defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
|
||||||
static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd,
|
static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd,
|
||||||
unsigned int ctrl)
|
unsigned int ctrl)
|
||||||
{
|
{
|
||||||
|
@ -16,7 +16,7 @@ config CPU_S3C2412
|
|||||||
config CPU_S3C2412_ONLY
|
config CPU_S3C2412_ONLY
|
||||||
bool
|
bool
|
||||||
depends on ARCH_S3C2410 && !CPU_S3C2400 && !CPU_S3C2410 && \
|
depends on ARCH_S3C2410 && !CPU_S3C2400 && !CPU_S3C2410 && \
|
||||||
!CPU_2416 && !CPU_S3C2440 && !CPU_S3C2442 && \
|
!CPU_S3C2416 && !CPU_S3C2440 && !CPU_S3C2442 && \
|
||||||
!CPU_S3C2443 && CPU_S3C2412
|
!CPU_S3C2443 && CPU_S3C2412
|
||||||
default y if CPU_S3C2412
|
default y if CPU_S3C2412
|
||||||
|
|
||||||
|
@ -35,9 +35,12 @@ menu "S3C2416 Machines"
|
|||||||
config MACH_SMDK2416
|
config MACH_SMDK2416
|
||||||
bool "SMDK2416"
|
bool "SMDK2416"
|
||||||
select CPU_S3C2416
|
select CPU_S3C2416
|
||||||
|
select MACH_SMDK
|
||||||
select S3C_DEV_FB
|
select S3C_DEV_FB
|
||||||
select S3C_DEV_HSMMC
|
select S3C_DEV_HSMMC
|
||||||
select S3C_DEV_HSMMC1
|
select S3C_DEV_HSMMC1
|
||||||
|
select S3C_DEV_NAND
|
||||||
|
select S3C_DEV_USB_HOST
|
||||||
select S3C2416_PM if PM
|
select S3C2416_PM if PM
|
||||||
help
|
help
|
||||||
Say Y here if you are using an SMDK2416
|
Say Y here if you are using an SMDK2416
|
||||||
|
@ -18,6 +18,7 @@ config CPU_S3C2440
|
|||||||
config CPU_S3C2442
|
config CPU_S3C2442
|
||||||
bool
|
bool
|
||||||
select CPU_ARM920T
|
select CPU_ARM920T
|
||||||
|
select S3C_GPIO_PULL_DOWN
|
||||||
select S3C2410_CLOCK
|
select S3C2410_CLOCK
|
||||||
select S3C2410_GPIO
|
select S3C2410_GPIO
|
||||||
select S3C2410_PM if PM
|
select S3C2410_PM if PM
|
||||||
@ -178,6 +179,9 @@ config MACH_MINI2440
|
|||||||
bool "MINI2440 development board"
|
bool "MINI2440 development board"
|
||||||
select CPU_S3C2440
|
select CPU_S3C2440
|
||||||
select EEPROM_AT24
|
select EEPROM_AT24
|
||||||
|
select NEW_LEDS
|
||||||
|
select LEDS_CLASS
|
||||||
|
select LEDS_TRIGGER
|
||||||
select LEDS_TRIGGER_BACKLIGHT
|
select LEDS_TRIGGER_BACKLIGHT
|
||||||
select S3C_DEV_NAND
|
select S3C_DEV_NAND
|
||||||
select S3C_DEV_USB_HOST
|
select S3C_DEV_USB_HOST
|
||||||
|
@ -46,9 +46,6 @@ int __init s3c2440_init(void)
|
|||||||
{
|
{
|
||||||
printk("S3C2440: Initialising architecture\n");
|
printk("S3C2440: Initialising architecture\n");
|
||||||
|
|
||||||
s3c24xx_gpiocfg_default.set_pull = s3c_gpio_setpull_1up;
|
|
||||||
s3c24xx_gpiocfg_default.get_pull = s3c_gpio_getpull_1up;
|
|
||||||
|
|
||||||
/* change irq for watchdog */
|
/* change irq for watchdog */
|
||||||
|
|
||||||
s3c_device_wdt.resource[1].start = IRQ_S3C2440_WDT;
|
s3c_device_wdt.resource[1].start = IRQ_S3C2440_WDT;
|
||||||
@ -58,3 +55,11 @@ int __init s3c2440_init(void)
|
|||||||
|
|
||||||
return sysdev_register(&s3c2440_sysdev);
|
return sysdev_register(&s3c2440_sysdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __init s3c2440_map_io(void)
|
||||||
|
{
|
||||||
|
s3c244x_map_io();
|
||||||
|
|
||||||
|
s3c24xx_gpiocfg_default.set_pull = s3c_gpio_setpull_1up;
|
||||||
|
s3c24xx_gpiocfg_default.get_pull = s3c_gpio_getpull_1up;
|
||||||
|
}
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
@ -43,6 +44,11 @@
|
|||||||
|
|
||||||
#include <plat/clock.h>
|
#include <plat/clock.h>
|
||||||
#include <plat/cpu.h>
|
#include <plat/cpu.h>
|
||||||
|
#include <plat/s3c244x.h>
|
||||||
|
|
||||||
|
#include <plat/gpio-core.h>
|
||||||
|
#include <plat/gpio-cfg.h>
|
||||||
|
#include <plat/gpio-cfg-helpers.h>
|
||||||
|
|
||||||
/* S3C2442 extended clock support */
|
/* S3C2442 extended clock support */
|
||||||
|
|
||||||
@ -163,3 +169,11 @@ int __init s3c2442_init(void)
|
|||||||
|
|
||||||
return sysdev_register(&s3c2442_sysdev);
|
return sysdev_register(&s3c2442_sysdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __init s3c2442_map_io(void)
|
||||||
|
{
|
||||||
|
s3c244x_map_io();
|
||||||
|
|
||||||
|
s3c24xx_gpiocfg_default.set_pull = s3c_gpio_setpull_1down;
|
||||||
|
s3c24xx_gpiocfg_default.get_pull = s3c_gpio_getpull_1down;
|
||||||
|
}
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
config CPU_S3C2443
|
config CPU_S3C2443
|
||||||
bool
|
bool
|
||||||
depends on ARCH_S3C2410
|
depends on ARCH_S3C2410
|
||||||
|
select CPU_ARM920T
|
||||||
select S3C2443_DMA if S3C2410_DMA
|
select S3C2443_DMA if S3C2410_DMA
|
||||||
select CPU_LLSERIAL_S3C2440
|
select CPU_LLSERIAL_S3C2440
|
||||||
select SAMSUNG_CLKSRC
|
select SAMSUNG_CLKSRC
|
||||||
|
@ -203,6 +203,10 @@ ENTRY(v6_flush_kern_dcache_area)
|
|||||||
* - end - virtual end address of region
|
* - end - virtual end address of region
|
||||||
*/
|
*/
|
||||||
v6_dma_inv_range:
|
v6_dma_inv_range:
|
||||||
|
#ifdef CONFIG_DMA_CACHE_RWFO
|
||||||
|
ldrb r2, [r0] @ read for ownership
|
||||||
|
strb r2, [r0] @ write for ownership
|
||||||
|
#endif
|
||||||
tst r0, #D_CACHE_LINE_SIZE - 1
|
tst r0, #D_CACHE_LINE_SIZE - 1
|
||||||
bic r0, r0, #D_CACHE_LINE_SIZE - 1
|
bic r0, r0, #D_CACHE_LINE_SIZE - 1
|
||||||
#ifdef HARVARD_CACHE
|
#ifdef HARVARD_CACHE
|
||||||
@ -211,6 +215,10 @@ v6_dma_inv_range:
|
|||||||
mcrne p15, 0, r0, c7, c11, 1 @ clean unified line
|
mcrne p15, 0, r0, c7, c11, 1 @ clean unified line
|
||||||
#endif
|
#endif
|
||||||
tst r1, #D_CACHE_LINE_SIZE - 1
|
tst r1, #D_CACHE_LINE_SIZE - 1
|
||||||
|
#ifdef CONFIG_DMA_CACHE_RWFO
|
||||||
|
ldrneb r2, [r1, #-1] @ read for ownership
|
||||||
|
strneb r2, [r1, #-1] @ write for ownership
|
||||||
|
#endif
|
||||||
bic r1, r1, #D_CACHE_LINE_SIZE - 1
|
bic r1, r1, #D_CACHE_LINE_SIZE - 1
|
||||||
#ifdef HARVARD_CACHE
|
#ifdef HARVARD_CACHE
|
||||||
mcrne p15, 0, r1, c7, c14, 1 @ clean & invalidate D line
|
mcrne p15, 0, r1, c7, c14, 1 @ clean & invalidate D line
|
||||||
@ -218,10 +226,6 @@ v6_dma_inv_range:
|
|||||||
mcrne p15, 0, r1, c7, c15, 1 @ clean & invalidate unified line
|
mcrne p15, 0, r1, c7, c15, 1 @ clean & invalidate unified line
|
||||||
#endif
|
#endif
|
||||||
1:
|
1:
|
||||||
#ifdef CONFIG_DMA_CACHE_RWFO
|
|
||||||
ldr r2, [r0] @ read for ownership
|
|
||||||
str r2, [r0] @ write for ownership
|
|
||||||
#endif
|
|
||||||
#ifdef HARVARD_CACHE
|
#ifdef HARVARD_CACHE
|
||||||
mcr p15, 0, r0, c7, c6, 1 @ invalidate D line
|
mcr p15, 0, r0, c7, c6, 1 @ invalidate D line
|
||||||
#else
|
#else
|
||||||
@ -229,6 +233,10 @@ v6_dma_inv_range:
|
|||||||
#endif
|
#endif
|
||||||
add r0, r0, #D_CACHE_LINE_SIZE
|
add r0, r0, #D_CACHE_LINE_SIZE
|
||||||
cmp r0, r1
|
cmp r0, r1
|
||||||
|
#ifdef CONFIG_DMA_CACHE_RWFO
|
||||||
|
ldrlo r2, [r0] @ read for ownership
|
||||||
|
strlo r2, [r0] @ write for ownership
|
||||||
|
#endif
|
||||||
blo 1b
|
blo 1b
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
|
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
|
||||||
@ -263,12 +271,12 @@ v6_dma_clean_range:
|
|||||||
* - end - virtual end address of region
|
* - end - virtual end address of region
|
||||||
*/
|
*/
|
||||||
ENTRY(v6_dma_flush_range)
|
ENTRY(v6_dma_flush_range)
|
||||||
|
#ifdef CONFIG_DMA_CACHE_RWFO
|
||||||
|
ldrb r2, [r0] @ read for ownership
|
||||||
|
strb r2, [r0] @ write for ownership
|
||||||
|
#endif
|
||||||
bic r0, r0, #D_CACHE_LINE_SIZE - 1
|
bic r0, r0, #D_CACHE_LINE_SIZE - 1
|
||||||
1:
|
1:
|
||||||
#ifdef CONFIG_DMA_CACHE_RWFO
|
|
||||||
ldr r2, [r0] @ read for ownership
|
|
||||||
str r2, [r0] @ write for ownership
|
|
||||||
#endif
|
|
||||||
#ifdef HARVARD_CACHE
|
#ifdef HARVARD_CACHE
|
||||||
mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line
|
mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line
|
||||||
#else
|
#else
|
||||||
@ -276,6 +284,10 @@ ENTRY(v6_dma_flush_range)
|
|||||||
#endif
|
#endif
|
||||||
add r0, r0, #D_CACHE_LINE_SIZE
|
add r0, r0, #D_CACHE_LINE_SIZE
|
||||||
cmp r0, r1
|
cmp r0, r1
|
||||||
|
#ifdef CONFIG_DMA_CACHE_RWFO
|
||||||
|
ldrlob r2, [r0] @ read for ownership
|
||||||
|
strlob r2, [r0] @ write for ownership
|
||||||
|
#endif
|
||||||
blo 1b
|
blo 1b
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
|
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
|
||||||
|
@ -173,15 +173,22 @@ ENTRY(v7_coherent_user_range)
|
|||||||
UNWIND(.fnstart )
|
UNWIND(.fnstart )
|
||||||
dcache_line_size r2, r3
|
dcache_line_size r2, r3
|
||||||
sub r3, r2, #1
|
sub r3, r2, #1
|
||||||
bic r0, r0, r3
|
bic r12, r0, r3
|
||||||
1:
|
1:
|
||||||
USER( mcr p15, 0, r0, c7, c11, 1 ) @ clean D line to the point of unification
|
USER( mcr p15, 0, r12, c7, c11, 1 ) @ clean D line to the point of unification
|
||||||
dsb
|
add r12, r12, r2
|
||||||
USER( mcr p15, 0, r0, c7, c5, 1 ) @ invalidate I line
|
cmp r12, r1
|
||||||
add r0, r0, r2
|
|
||||||
2:
|
|
||||||
cmp r0, r1
|
|
||||||
blo 1b
|
blo 1b
|
||||||
|
dsb
|
||||||
|
icache_line_size r2, r3
|
||||||
|
sub r3, r2, #1
|
||||||
|
bic r12, r0, r3
|
||||||
|
2:
|
||||||
|
USER( mcr p15, 0, r12, c7, c5, 1 ) @ invalidate I line
|
||||||
|
add r12, r12, r2
|
||||||
|
cmp r12, r1
|
||||||
|
blo 2b
|
||||||
|
3:
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
ALT_SMP(mcr p15, 0, r0, c7, c1, 6) @ invalidate BTB Inner Shareable
|
ALT_SMP(mcr p15, 0, r0, c7, c1, 6) @ invalidate BTB Inner Shareable
|
||||||
ALT_UP(mcr p15, 0, r0, c7, c5, 6) @ invalidate BTB
|
ALT_UP(mcr p15, 0, r0, c7, c5, 6) @ invalidate BTB
|
||||||
@ -194,10 +201,10 @@ ENTRY(v7_coherent_user_range)
|
|||||||
* isn't mapped, just try the next page.
|
* isn't mapped, just try the next page.
|
||||||
*/
|
*/
|
||||||
9001:
|
9001:
|
||||||
mov r0, r0, lsr #12
|
mov r12, r12, lsr #12
|
||||||
mov r0, r0, lsl #12
|
mov r12, r12, lsl #12
|
||||||
add r0, r0, #4096
|
add r12, r12, #4096
|
||||||
b 2b
|
b 3b
|
||||||
UNWIND(.fnend )
|
UNWIND(.fnend )
|
||||||
ENDPROC(v7_coherent_kern_range)
|
ENDPROC(v7_coherent_kern_range)
|
||||||
ENDPROC(v7_coherent_user_range)
|
ENDPROC(v7_coherent_user_range)
|
||||||
|
@ -61,17 +61,27 @@
|
|||||||
.endm
|
.endm
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cache_line_size - get the cache line size from the CSIDR register
|
* dcache_line_size - get the minimum D-cache line size from the CTR register
|
||||||
* (available on ARMv7+). It assumes that the CSSR register was configured
|
* on ARMv7.
|
||||||
* to access the L1 data cache CSIDR.
|
|
||||||
*/
|
*/
|
||||||
.macro dcache_line_size, reg, tmp
|
.macro dcache_line_size, reg, tmp
|
||||||
mrc p15, 1, \tmp, c0, c0, 0 @ read CSIDR
|
mrc p15, 0, \tmp, c0, c0, 1 @ read ctr
|
||||||
and \tmp, \tmp, #7 @ cache line size encoding
|
lsr \tmp, \tmp, #16
|
||||||
mov \reg, #16 @ size offset
|
and \tmp, \tmp, #0xf @ cache line size encoding
|
||||||
|
mov \reg, #4 @ bytes per word
|
||||||
mov \reg, \reg, lsl \tmp @ actual cache line size
|
mov \reg, \reg, lsl \tmp @ actual cache line size
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
/*
|
||||||
|
* icache_line_size - get the minimum I-cache line size from the CTR register
|
||||||
|
* on ARMv7.
|
||||||
|
*/
|
||||||
|
.macro icache_line_size, reg, tmp
|
||||||
|
mrc p15, 0, \tmp, c0, c0, 1 @ read ctr
|
||||||
|
and \tmp, \tmp, #0xf @ cache line size encoding
|
||||||
|
mov \reg, #4 @ bytes per word
|
||||||
|
mov \reg, \reg, lsl \tmp @ actual cache line size
|
||||||
|
.endm
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sanity check the PTE configuration for the code below - which makes
|
* Sanity check the PTE configuration for the code below - which makes
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
|
||||||
#include <plat/common.h>
|
#include <plat/common.h>
|
||||||
#include <plat/board.h>
|
#include <plat/board.h>
|
||||||
@ -164,7 +165,7 @@ static int __init omap_init_clocksource_32k(void)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
sync_32k_ick = clk_get(NULL, "omap_32ksync_ick");
|
sync_32k_ick = clk_get(NULL, "omap_32ksync_ick");
|
||||||
if (sync_32k_ick)
|
if (!IS_ERR(sync_32k_ick))
|
||||||
clk_enable(sync_32k_ick);
|
clk_enable(sync_32k_ick);
|
||||||
|
|
||||||
clocksource_32k.mult = clocksource_hz2mult(32768,
|
clocksource_32k.mult = clocksource_hz2mult(32768,
|
||||||
|
@ -148,6 +148,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id)
|
|||||||
DEBUG_LL_OMAP3(3, craneboard);
|
DEBUG_LL_OMAP3(3, craneboard);
|
||||||
DEBUG_LL_OMAP3(3, igep0020);
|
DEBUG_LL_OMAP3(3, igep0020);
|
||||||
DEBUG_LL_OMAP3(3, igep0030);
|
DEBUG_LL_OMAP3(3, igep0030);
|
||||||
|
DEBUG_LL_OMAP3(3, nokia_rm680);
|
||||||
DEBUG_LL_OMAP3(3, nokia_rx51);
|
DEBUG_LL_OMAP3(3, nokia_rx51);
|
||||||
DEBUG_LL_OMAP3(3, omap3517evm);
|
DEBUG_LL_OMAP3(3, omap3517evm);
|
||||||
DEBUG_LL_OMAP3(3, omap3_beagle);
|
DEBUG_LL_OMAP3(3, omap3_beagle);
|
||||||
|
@ -166,7 +166,7 @@ static void __init omap_detect_sram(void)
|
|||||||
cpu_is_omap1710())
|
cpu_is_omap1710())
|
||||||
omap_sram_size = 0x4000; /* 16K */
|
omap_sram_size = 0x4000; /* 16K */
|
||||||
else if (cpu_is_omap1611())
|
else if (cpu_is_omap1611())
|
||||||
omap_sram_size = 0x3e800; /* 250K */
|
omap_sram_size = SZ_256K;
|
||||||
else {
|
else {
|
||||||
printk(KERN_ERR "Could not detect SRAM size\n");
|
printk(KERN_ERR "Could not detect SRAM size\n");
|
||||||
omap_sram_size = 0x4000;
|
omap_sram_size = 0x4000;
|
||||||
|
@ -88,7 +88,7 @@ static struct cpu_table cpu_ids[] __initdata = {
|
|||||||
{
|
{
|
||||||
.idcode = 0x32440000,
|
.idcode = 0x32440000,
|
||||||
.idmask = 0xffffffff,
|
.idmask = 0xffffffff,
|
||||||
.map_io = s3c244x_map_io,
|
.map_io = s3c2440_map_io,
|
||||||
.init_clocks = s3c244x_init_clocks,
|
.init_clocks = s3c244x_init_clocks,
|
||||||
.init_uarts = s3c244x_init_uarts,
|
.init_uarts = s3c244x_init_uarts,
|
||||||
.init = s3c2440_init,
|
.init = s3c2440_init,
|
||||||
@ -97,7 +97,7 @@ static struct cpu_table cpu_ids[] __initdata = {
|
|||||||
{
|
{
|
||||||
.idcode = 0x32440001,
|
.idcode = 0x32440001,
|
||||||
.idmask = 0xffffffff,
|
.idmask = 0xffffffff,
|
||||||
.map_io = s3c244x_map_io,
|
.map_io = s3c2440_map_io,
|
||||||
.init_clocks = s3c244x_init_clocks,
|
.init_clocks = s3c244x_init_clocks,
|
||||||
.init_uarts = s3c244x_init_uarts,
|
.init_uarts = s3c244x_init_uarts,
|
||||||
.init = s3c2440_init,
|
.init = s3c2440_init,
|
||||||
@ -106,7 +106,7 @@ static struct cpu_table cpu_ids[] __initdata = {
|
|||||||
{
|
{
|
||||||
.idcode = 0x32440aaa,
|
.idcode = 0x32440aaa,
|
||||||
.idmask = 0xffffffff,
|
.idmask = 0xffffffff,
|
||||||
.map_io = s3c244x_map_io,
|
.map_io = s3c2442_map_io,
|
||||||
.init_clocks = s3c244x_init_clocks,
|
.init_clocks = s3c244x_init_clocks,
|
||||||
.init_uarts = s3c244x_init_uarts,
|
.init_uarts = s3c244x_init_uarts,
|
||||||
.init = s3c2442_init,
|
.init = s3c2442_init,
|
||||||
@ -115,7 +115,7 @@ static struct cpu_table cpu_ids[] __initdata = {
|
|||||||
{
|
{
|
||||||
.idcode = 0x32440aab,
|
.idcode = 0x32440aab,
|
||||||
.idmask = 0xffffffff,
|
.idmask = 0xffffffff,
|
||||||
.map_io = s3c244x_map_io,
|
.map_io = s3c2442_map_io,
|
||||||
.init_clocks = s3c244x_init_clocks,
|
.init_clocks = s3c244x_init_clocks,
|
||||||
.init_uarts = s3c244x_init_uarts,
|
.init_uarts = s3c244x_init_uarts,
|
||||||
.init = s3c2442_init,
|
.init = s3c2442_init,
|
||||||
|
@ -82,8 +82,6 @@ static struct s3c_gpio_cfg s3c24xx_gpiocfg_banka = {
|
|||||||
struct s3c_gpio_cfg s3c24xx_gpiocfg_default = {
|
struct s3c_gpio_cfg s3c24xx_gpiocfg_default = {
|
||||||
.set_config = s3c_gpio_setcfg_s3c24xx,
|
.set_config = s3c_gpio_setcfg_s3c24xx,
|
||||||
.get_config = s3c_gpio_getcfg_s3c24xx,
|
.get_config = s3c_gpio_getcfg_s3c24xx,
|
||||||
.set_pull = s3c_gpio_setpull_1up,
|
|
||||||
.get_pull = s3c_gpio_getpull_1up,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct s3c_gpio_chip s3c24xx_gpios[] = {
|
struct s3c_gpio_chip s3c24xx_gpios[] = {
|
||||||
|
@ -21,17 +21,22 @@ extern void s3c244x_init_clocks(int xtal);
|
|||||||
#else
|
#else
|
||||||
#define s3c244x_init_clocks NULL
|
#define s3c244x_init_clocks NULL
|
||||||
#define s3c244x_init_uarts NULL
|
#define s3c244x_init_uarts NULL
|
||||||
#define s3c244x_map_io NULL
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_S3C2440
|
#ifdef CONFIG_CPU_S3C2440
|
||||||
extern int s3c2440_init(void);
|
extern int s3c2440_init(void);
|
||||||
|
|
||||||
|
extern void s3c2440_map_io(void);
|
||||||
#else
|
#else
|
||||||
#define s3c2440_init NULL
|
#define s3c2440_init NULL
|
||||||
|
#define s3c2440_map_io NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_S3C2442
|
#ifdef CONFIG_CPU_S3C2442
|
||||||
extern int s3c2442_init(void);
|
extern int s3c2442_init(void);
|
||||||
|
|
||||||
|
extern void s3c2442_map_io(void);
|
||||||
#else
|
#else
|
||||||
#define s3c2442_init NULL
|
#define s3c2442_init NULL
|
||||||
|
#define s3c2442_map_io NULL
|
||||||
#endif
|
#endif
|
||||||
|
@ -280,18 +280,17 @@ s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_S3C_GPIO_PULL_UP
|
#if defined(CONFIG_S3C_GPIO_PULL_UP) || defined(CONFIG_S3C_GPIO_PULL_DOWN)
|
||||||
int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
|
static int s3c_gpio_setpull_1(struct s3c_gpio_chip *chip,
|
||||||
unsigned int off, s3c_gpio_pull_t pull)
|
unsigned int off, s3c_gpio_pull_t pull,
|
||||||
|
s3c_gpio_pull_t updown)
|
||||||
{
|
{
|
||||||
void __iomem *reg = chip->base + 0x08;
|
void __iomem *reg = chip->base + 0x08;
|
||||||
u32 pup = __raw_readl(reg);
|
u32 pup = __raw_readl(reg);
|
||||||
|
|
||||||
pup = __raw_readl(reg);
|
if (pull == updown)
|
||||||
|
|
||||||
if (pup == S3C_GPIO_PULL_UP)
|
|
||||||
pup &= ~(1 << off);
|
pup &= ~(1 << off);
|
||||||
else if (pup == S3C_GPIO_PULL_NONE)
|
else if (pull == S3C_GPIO_PULL_NONE)
|
||||||
pup |= (1 << off);
|
pup |= (1 << off);
|
||||||
else
|
else
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -300,17 +299,45 @@ int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip,
|
static s3c_gpio_pull_t s3c_gpio_getpull_1(struct s3c_gpio_chip *chip,
|
||||||
unsigned int off)
|
unsigned int off, s3c_gpio_pull_t updown)
|
||||||
{
|
{
|
||||||
void __iomem *reg = chip->base + 0x08;
|
void __iomem *reg = chip->base + 0x08;
|
||||||
u32 pup = __raw_readl(reg);
|
u32 pup = __raw_readl(reg);
|
||||||
|
|
||||||
pup &= (1 << off);
|
pup &= (1 << off);
|
||||||
return pup ? S3C_GPIO_PULL_NONE : S3C_GPIO_PULL_UP;
|
return pup ? S3C_GPIO_PULL_NONE : updown;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_S3C_GPIO_PULL_UP || CONFIG_S3C_GPIO_PULL_DOWN */
|
||||||
|
|
||||||
|
#ifdef CONFIG_S3C_GPIO_PULL_UP
|
||||||
|
s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off)
|
||||||
|
{
|
||||||
|
return s3c_gpio_getpull_1(chip, off, S3C_GPIO_PULL_UP);
|
||||||
|
}
|
||||||
|
|
||||||
|
int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off, s3c_gpio_pull_t pull)
|
||||||
|
{
|
||||||
|
return s3c_gpio_setpull_1(chip, off, pull, S3C_GPIO_PULL_UP);
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_S3C_GPIO_PULL_UP */
|
#endif /* CONFIG_S3C_GPIO_PULL_UP */
|
||||||
|
|
||||||
|
#ifdef CONFIG_S3C_GPIO_PULL_DOWN
|
||||||
|
s3c_gpio_pull_t s3c_gpio_getpull_1down(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off)
|
||||||
|
{
|
||||||
|
return s3c_gpio_getpull_1(chip, off, S3C_GPIO_PULL_DOWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
int s3c_gpio_setpull_1down(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off, s3c_gpio_pull_t pull)
|
||||||
|
{
|
||||||
|
return s3c_gpio_setpull_1(chip, off, pull, S3C_GPIO_PULL_DOWN);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_S3C_GPIO_PULL_DOWN */
|
||||||
|
|
||||||
#ifdef CONFIG_S5P_GPIO_DRVSTR
|
#ifdef CONFIG_S5P_GPIO_DRVSTR
|
||||||
s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin)
|
s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin)
|
||||||
{
|
{
|
||||||
|
@ -209,6 +209,17 @@ extern s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip,
|
|||||||
extern s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip,
|
extern s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip,
|
||||||
unsigned int off);
|
unsigned int off);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* s3c_gpio_getpull_1down() - Get configuration for choice of down or none
|
||||||
|
* @chip: The gpio chip that the GPIO pin belongs to
|
||||||
|
* @off: The offset to the pin to get the configuration of.
|
||||||
|
*
|
||||||
|
* This helper function reads the state of the pull-down resistor for the
|
||||||
|
* given GPIO in the same case as s3c_gpio_setpull_1down.
|
||||||
|
*/
|
||||||
|
extern s3c_gpio_pull_t s3c_gpio_getpull_1down(struct s3c_gpio_chip *chip,
|
||||||
|
unsigned int off);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* s3c_gpio_setpull_s3c2443() - Pull configuration for s3c2443.
|
* s3c_gpio_setpull_s3c2443() - Pull configuration for s3c2443.
|
||||||
* @chip: The gpio chip that is being configured.
|
* @chip: The gpio chip that is being configured.
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#
|
#
|
||||||
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
||||||
#
|
#
|
||||||
# Last update: Thu Sep 9 22:43:01 2010
|
# Last update: Sun Dec 12 23:24:27 2010
|
||||||
#
|
#
|
||||||
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
||||||
#
|
#
|
||||||
@ -2321,7 +2321,7 @@ mx31txtr MACH_MX31TXTR MX31TXTR 2332
|
|||||||
u380 MACH_U380 U380 2333
|
u380 MACH_U380 U380 2333
|
||||||
oamp3_hualu MACH_HUALU_BOARD HUALU_BOARD 2334
|
oamp3_hualu MACH_HUALU_BOARD HUALU_BOARD 2334
|
||||||
npcmx50 MACH_NPCMX50 NPCMX50 2335
|
npcmx50 MACH_NPCMX50 NPCMX50 2335
|
||||||
mx51_lange51 MACH_MX51_LANGE51 MX51_LANGE51 2336
|
mx51_efikamx MACH_MX51_EFIKAMX MX51_EFIKAMX 2336
|
||||||
mx51_lange52 MACH_MX51_LANGE52 MX51_LANGE52 2337
|
mx51_lange52 MACH_MX51_LANGE52 MX51_LANGE52 2337
|
||||||
riom MACH_RIOM RIOM 2338
|
riom MACH_RIOM RIOM 2338
|
||||||
comcas MACH_COMCAS COMCAS 2339
|
comcas MACH_COMCAS COMCAS 2339
|
||||||
@ -2355,7 +2355,7 @@ at91sam9263cs MACH_AT91SAM9263CS AT91SAM9263CS 2366
|
|||||||
csb732 MACH_CSB732 CSB732 2367
|
csb732 MACH_CSB732 CSB732 2367
|
||||||
u8500 MACH_U8500 U8500 2368
|
u8500 MACH_U8500 U8500 2368
|
||||||
huqiu MACH_HUQIU HUQIU 2369
|
huqiu MACH_HUQIU HUQIU 2369
|
||||||
mx51_kunlun MACH_MX51_KUNLUN MX51_KUNLUN 2370
|
mx51_efikasb MACH_MX51_EFIKASB MX51_EFIKASB 2370
|
||||||
pmt1g MACH_PMT1G PMT1G 2371
|
pmt1g MACH_PMT1G PMT1G 2371
|
||||||
htcelf MACH_HTCELF HTCELF 2372
|
htcelf MACH_HTCELF HTCELF 2372
|
||||||
armadillo420 MACH_ARMADILLO420 ARMADILLO420 2373
|
armadillo420 MACH_ARMADILLO420 ARMADILLO420 2373
|
||||||
@ -2971,7 +2971,7 @@ premierwave_en MACH_PREMIERWAVE_EN PREMIERWAVE_EN 2985
|
|||||||
wasabi MACH_WASABI WASABI 2986
|
wasabi MACH_WASABI WASABI 2986
|
||||||
vivow MACH_VIVOW VIVOW 2987
|
vivow MACH_VIVOW VIVOW 2987
|
||||||
mx50_rdp MACH_MX50_RDP MX50_RDP 2988
|
mx50_rdp MACH_MX50_RDP MX50_RDP 2988
|
||||||
universal MACH_UNIVERSAL UNIVERSAL 2989
|
universal_c210 MACH_UNIVERSAL_C210 UNIVERSAL_C210 2989
|
||||||
real6410 MACH_REAL6410 REAL6410 2990
|
real6410 MACH_REAL6410 REAL6410 2990
|
||||||
spx_sakura MACH_SPX_SAKURA SPX_SAKURA 2991
|
spx_sakura MACH_SPX_SAKURA SPX_SAKURA 2991
|
||||||
ij3k_2440 MACH_IJ3K_2440 IJ3K_2440 2992
|
ij3k_2440 MACH_IJ3K_2440 IJ3K_2440 2992
|
||||||
@ -3044,3 +3044,178 @@ harvest_desoto MACH_HARVEST_DESOTO HARVEST_DESOTO 3059
|
|||||||
msm8x60_qrdc MACH_MSM8X60_QRDC MSM8X60_QRDC 3060
|
msm8x60_qrdc MACH_MSM8X60_QRDC MSM8X60_QRDC 3060
|
||||||
spear900 MACH_SPEAR900 SPEAR900 3061
|
spear900 MACH_SPEAR900 SPEAR900 3061
|
||||||
pcontrol_g20 MACH_PCONTROL_G20 PCONTROL_G20 3062
|
pcontrol_g20 MACH_PCONTROL_G20 PCONTROL_G20 3062
|
||||||
|
rdstor MACH_RDSTOR RDSTOR 3063
|
||||||
|
usdloader MACH_USDLOADER USDLOADER 3064
|
||||||
|
tsoploader MACH_TSOPLOADER TSOPLOADER 3065
|
||||||
|
kronos MACH_KRONOS KRONOS 3066
|
||||||
|
ffcore MACH_FFCORE FFCORE 3067
|
||||||
|
mone MACH_MONE MONE 3068
|
||||||
|
unit2s MACH_UNIT2S UNIT2S 3069
|
||||||
|
acer_a5 MACH_ACER_A5 ACER_A5 3070
|
||||||
|
etherpro_isp MACH_ETHERPRO_ISP ETHERPRO_ISP 3071
|
||||||
|
stretchs7000 MACH_STRETCHS7000 STRETCHS7000 3072
|
||||||
|
p87_smartsim MACH_P87_SMARTSIM P87_SMARTSIM 3073
|
||||||
|
tulip MACH_TULIP TULIP 3074
|
||||||
|
sunflower MACH_SUNFLOWER SUNFLOWER 3075
|
||||||
|
rib MACH_RIB RIB 3076
|
||||||
|
clod MACH_CLOD CLOD 3077
|
||||||
|
rump MACH_RUMP RUMP 3078
|
||||||
|
tenderloin MACH_TENDERLOIN TENDERLOIN 3079
|
||||||
|
shortloin MACH_SHORTLOIN SHORTLOIN 3080
|
||||||
|
crespo MACH_CRESPO CRESPO 3081
|
||||||
|
antares MACH_ANTARES ANTARES 3082
|
||||||
|
wb40n MACH_WB40N WB40N 3083
|
||||||
|
herring MACH_HERRING HERRING 3084
|
||||||
|
naxy400 MACH_NAXY400 NAXY400 3085
|
||||||
|
naxy1200 MACH_NAXY1200 NAXY1200 3086
|
||||||
|
vpr200 MACH_VPR200 VPR200 3087
|
||||||
|
bug20 MACH_BUG20 BUG20 3088
|
||||||
|
goflexnet MACH_GOFLEXNET GOFLEXNET 3089
|
||||||
|
torbreck MACH_TORBRECK TORBRECK 3090
|
||||||
|
saarb_mg1 MACH_SAARB_MG1 SAARB_MG1 3091
|
||||||
|
callisto MACH_CALLISTO CALLISTO 3092
|
||||||
|
multhsu MACH_MULTHSU MULTHSU 3093
|
||||||
|
saluda MACH_SALUDA SALUDA 3094
|
||||||
|
pemp_omap3_apollo MACH_PEMP_OMAP3_APOLLO PEMP_OMAP3_APOLLO 3095
|
||||||
|
vc0718 MACH_VC0718 VC0718 3096
|
||||||
|
mvblx MACH_MVBLX MVBLX 3097
|
||||||
|
inhand_apeiron MACH_INHAND_APEIRON INHAND_APEIRON 3098
|
||||||
|
inhand_fury MACH_INHAND_FURY INHAND_FURY 3099
|
||||||
|
inhand_siren MACH_INHAND_SIREN INHAND_SIREN 3100
|
||||||
|
hdnvp MACH_HDNVP HDNVP 3101
|
||||||
|
softwinner MACH_SOFTWINNER SOFTWINNER 3102
|
||||||
|
prima2_evb MACH_PRIMA2_EVB PRIMA2_EVB 3103
|
||||||
|
nas6210 MACH_NAS6210 NAS6210 3104
|
||||||
|
unisdev MACH_UNISDEV UNISDEV 3105
|
||||||
|
sbca11 MACH_SBCA11 SBCA11 3106
|
||||||
|
saga MACH_SAGA SAGA 3107
|
||||||
|
ns_k330 MACH_NS_K330 NS_K330 3108
|
||||||
|
tanna MACH_TANNA TANNA 3109
|
||||||
|
imate8502 MACH_IMATE8502 IMATE8502 3110
|
||||||
|
aspen MACH_ASPEN ASPEN 3111
|
||||||
|
daintree_cwac MACH_DAINTREE_CWAC DAINTREE_CWAC 3112
|
||||||
|
zmx25 MACH_ZMX25 ZMX25 3113
|
||||||
|
maple1 MACH_MAPLE1 MAPLE1 3114
|
||||||
|
qsd8x72_surf MACH_QSD8X72_SURF QSD8X72_SURF 3115
|
||||||
|
qsd8x72_ffa MACH_QSD8X72_FFA QSD8X72_FFA 3116
|
||||||
|
abilene MACH_ABILENE ABILENE 3117
|
||||||
|
eigen_ttr MACH_EIGEN_TTR EIGEN_TTR 3118
|
||||||
|
iomega_ix2_200 MACH_IOMEGA_IX2_200 IOMEGA_IX2_200 3119
|
||||||
|
coretec_vcx7400 MACH_CORETEC_VCX7400 CORETEC_VCX7400 3120
|
||||||
|
santiago MACH_SANTIAGO SANTIAGO 3121
|
||||||
|
mx257sol MACH_MX257SOL MX257SOL 3122
|
||||||
|
strasbourg MACH_STRASBOURG STRASBOURG 3123
|
||||||
|
msm8x60_fluid MACH_MSM8X60_FLUID MSM8X60_FLUID 3124
|
||||||
|
smartqv5 MACH_SMARTQV5 SMARTQV5 3125
|
||||||
|
smartqv3 MACH_SMARTQV3 SMARTQV3 3126
|
||||||
|
smartqv7 MACH_SMARTQV7 SMARTQV7 3127
|
||||||
|
paz00 MACH_PAZ00 PAZ00 3128
|
||||||
|
acmenetusfoxg20 MACH_ACMENETUSFOXG20 ACMENETUSFOXG20 3129
|
||||||
|
htcwillow MACH_HTCWILLOW HTCWILLOW 3130
|
||||||
|
fwbd_0404 MACH_FWBD_0404 FWBD_0404 3131
|
||||||
|
hdgu MACH_HDGU HDGU 3132
|
||||||
|
pyramid MACH_PYRAMID PYRAMID 3133
|
||||||
|
epiphan MACH_EPIPHAN EPIPHAN 3134
|
||||||
|
omap_bender MACH_OMAP_BENDER OMAP_BENDER 3135
|
||||||
|
gurnard MACH_GURNARD GURNARD 3136
|
||||||
|
gtl_it5100 MACH_GTL_IT5100 GTL_IT5100 3137
|
||||||
|
bcm2708 MACH_BCM2708 BCM2708 3138
|
||||||
|
mx51_ggc MACH_MX51_GGC MX51_GGC 3139
|
||||||
|
sharespace MACH_SHARESPACE SHARESPACE 3140
|
||||||
|
haba_knx_explorer MACH_HABA_KNX_EXPLORER HABA_KNX_EXPLORER 3141
|
||||||
|
simtec_kirkmod MACH_SIMTEC_KIRKMOD SIMTEC_KIRKMOD 3142
|
||||||
|
crux MACH_CRUX CRUX 3143
|
||||||
|
mx51_bravo MACH_MX51_BRAVO MX51_BRAVO 3144
|
||||||
|
charon MACH_CHARON CHARON 3145
|
||||||
|
picocom3 MACH_PICOCOM3 PICOCOM3 3146
|
||||||
|
picocom4 MACH_PICOCOM4 PICOCOM4 3147
|
||||||
|
serrano MACH_SERRANO SERRANO 3148
|
||||||
|
doubleshot MACH_DOUBLESHOT DOUBLESHOT 3149
|
||||||
|
evsy MACH_EVSY EVSY 3150
|
||||||
|
huashan MACH_HUASHAN HUASHAN 3151
|
||||||
|
lausanne MACH_LAUSANNE LAUSANNE 3152
|
||||||
|
emerald MACH_EMERALD EMERALD 3153
|
||||||
|
tqma35 MACH_TQMA35 TQMA35 3154
|
||||||
|
marvel MACH_MARVEL MARVEL 3155
|
||||||
|
manuae MACH_MANUAE MANUAE 3156
|
||||||
|
chacha MACH_CHACHA CHACHA 3157
|
||||||
|
lemon MACH_LEMON LEMON 3158
|
||||||
|
csc MACH_CSC CSC 3159
|
||||||
|
gira_knxip_router MACH_GIRA_KNXIP_ROUTER GIRA_KNXIP_ROUTER 3160
|
||||||
|
t20 MACH_T20 T20 3161
|
||||||
|
hdmini MACH_HDMINI HDMINI 3162
|
||||||
|
sciphone_g2 MACH_SCIPHONE_G2 SCIPHONE_G2 3163
|
||||||
|
express MACH_EXPRESS EXPRESS 3164
|
||||||
|
express_kt MACH_EXPRESS_KT EXPRESS_KT 3165
|
||||||
|
maximasp MACH_MAXIMASP MAXIMASP 3166
|
||||||
|
nitrogen_imx51 MACH_NITROGEN_IMX51 NITROGEN_IMX51 3167
|
||||||
|
nitrogen_imx53 MACH_NITROGEN_IMX53 NITROGEN_IMX53 3168
|
||||||
|
sunfire MACH_SUNFIRE SUNFIRE 3169
|
||||||
|
arowana MACH_AROWANA AROWANA 3170
|
||||||
|
tegra_daytona MACH_TEGRA_DAYTONA TEGRA_DAYTONA 3171
|
||||||
|
tegra_swordfish MACH_TEGRA_SWORDFISH TEGRA_SWORDFISH 3172
|
||||||
|
edison MACH_EDISON EDISON 3173
|
||||||
|
svp8500v1 MACH_SVP8500V1 SVP8500V1 3174
|
||||||
|
svp8500v2 MACH_SVP8500V2 SVP8500V2 3175
|
||||||
|
svp5500 MACH_SVP5500 SVP5500 3176
|
||||||
|
b5500 MACH_B5500 B5500 3177
|
||||||
|
s5500 MACH_S5500 S5500 3178
|
||||||
|
icon MACH_ICON ICON 3179
|
||||||
|
elephant MACH_ELEPHANT ELEPHANT 3180
|
||||||
|
msm8x60_fusion MACH_MSM8X60_FUSION MSM8X60_FUSION 3181
|
||||||
|
shooter MACH_SHOOTER SHOOTER 3182
|
||||||
|
spade_lte MACH_SPADE_LTE SPADE_LTE 3183
|
||||||
|
philhwani MACH_PHILHWANI PHILHWANI 3184
|
||||||
|
gsncomm MACH_GSNCOMM GSNCOMM 3185
|
||||||
|
strasbourg_a2 MACH_STRASBOURG_A2 STRASBOURG_A2 3186
|
||||||
|
mmm MACH_MMM MMM 3187
|
||||||
|
davinci_dm365_bv MACH_DAVINCI_DM365_BV DAVINCI_DM365_BV 3188
|
||||||
|
ag5evm MACH_AG5EVM AG5EVM 3189
|
||||||
|
sc575plc MACH_SC575PLC SC575PLC 3190
|
||||||
|
sc575hmi MACH_SC575IPC SC575IPC 3191
|
||||||
|
omap3_tdm3730 MACH_OMAP3_TDM3730 OMAP3_TDM3730 3192
|
||||||
|
g7 MACH_G7 G7 3193
|
||||||
|
top9000_eval MACH_TOP9000_EVAL TOP9000_EVAL 3194
|
||||||
|
top9000_su MACH_TOP9000_SU TOP9000_SU 3195
|
||||||
|
utm300 MACH_UTM300 UTM300 3196
|
||||||
|
tsunagi MACH_TSUNAGI TSUNAGI 3197
|
||||||
|
ts75xx MACH_TS75XX TS75XX 3198
|
||||||
|
msm8x60_fusn_ffa MACH_MSM8X60_FUSN_FFA MSM8X60_FUSN_FFA 3199
|
||||||
|
ts47xx MACH_TS47XX TS47XX 3200
|
||||||
|
da850_k5 MACH_DA850_K5 DA850_K5 3201
|
||||||
|
ax502 MACH_AX502 AX502 3202
|
||||||
|
igep0032 MACH_IGEP0032 IGEP0032 3203
|
||||||
|
antero MACH_ANTERO ANTERO 3204
|
||||||
|
synergy MACH_SYNERGY SYNERGY 3205
|
||||||
|
ics_if_voip MACH_ICS_IF_VOIP ICS_IF_VOIP 3206
|
||||||
|
wlf_cragg_6410 MACH_WLF_CRAGG_6410 WLF_CRAGG_6410 3207
|
||||||
|
punica MACH_PUNICA PUNICA 3208
|
||||||
|
sbc_nt250 MACH_SBC_NT250 SBC_NT250 3209
|
||||||
|
mx27_wmultra MACH_MX27_WMULTRA MX27_WMULTRA 3210
|
||||||
|
mackerel MACH_MACKEREL MACKEREL 3211
|
||||||
|
fa9x27 MACH_FA9X27 FA9X27 3213
|
||||||
|
ns2816tb MACH_NS2816TB NS2816TB 3214
|
||||||
|
ns2816_ntpad MACH_NS2816_NTPAD NS2816_NTPAD 3215
|
||||||
|
ns2816_ntnb MACH_NS2816_NTNB NS2816_NTNB 3216
|
||||||
|
kaen MACH_KAEN KAEN 3217
|
||||||
|
nv1000 MACH_NV1000 NV1000 3218
|
||||||
|
nuc950ts MACH_NUC950TS NUC950TS 3219
|
||||||
|
nokia_rm680 MACH_NOKIA_RM680 NOKIA_RM680 3220
|
||||||
|
ast2200 MACH_AST2200 AST2200 3221
|
||||||
|
lead MACH_LEAD LEAD 3222
|
||||||
|
unino1 MACH_UNINO1 UNINO1 3223
|
||||||
|
greeco MACH_GREECO GREECO 3224
|
||||||
|
verdi MACH_VERDI VERDI 3225
|
||||||
|
dm6446_adbox MACH_DM6446_ADBOX DM6446_ADBOX 3226
|
||||||
|
quad_salsa MACH_QUAD_SALSA QUAD_SALSA 3227
|
||||||
|
abb_gma_1_1 MACH_ABB_GMA_1_1 ABB_GMA_1_1 3228
|
||||||
|
svcid MACH_SVCID SVCID 3229
|
||||||
|
msm8960_sim MACH_MSM8960_SIM MSM8960_SIM 3230
|
||||||
|
msm8960_rumi3 MACH_MSM8960_RUMI3 MSM8960_RUMI3 3231
|
||||||
|
icon_g MACH_ICON_G ICON_G 3232
|
||||||
|
mb3 MACH_MB3 MB3 3233
|
||||||
|
gsia18s MACH_GSIA18S GSIA18S 3234
|
||||||
|
pivicc MACH_PIVICC PIVICC 3235
|
||||||
|
pcm048 MACH_PCM048 PCM048 3236
|
||||||
|
dds MACH_DDS DDS 3237
|
||||||
|
chalten_xa1 MACH_CHALTEN_XA1 CHALTEN_XA1 3238
|
||||||
|
@ -73,7 +73,8 @@ void gdbstub_io_init(void)
|
|||||||
GDBPORT_SERIAL_IER = UART_IER_RDI | UART_IER_RLSI;
|
GDBPORT_SERIAL_IER = UART_IER_RDI | UART_IER_RLSI;
|
||||||
|
|
||||||
/* permit level 0 IRQs to take place */
|
/* permit level 0 IRQs to take place */
|
||||||
local_change_intr_mask_level(NUM2EPSW_IM(CONFIG_GDBSTUB_IRQ_LEVEL + 1));
|
arch_local_change_intr_mask_level(
|
||||||
|
NUM2EPSW_IM(CONFIG_GDBSTUB_IRQ_LEVEL + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -87,7 +87,8 @@ void __init gdbstub_io_init(void)
|
|||||||
tmp = *gdbstub_port->_control;
|
tmp = *gdbstub_port->_control;
|
||||||
|
|
||||||
/* permit level 0 IRQs only */
|
/* permit level 0 IRQs only */
|
||||||
local_change_intr_mask_level(NUM2EPSW_IM(CONFIG_GDBSTUB_IRQ_LEVEL + 1));
|
arch_local_change_intr_mask_level(
|
||||||
|
NUM2EPSW_IM(CONFIG_GDBSTUB_IRQ_LEVEL + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1194,7 +1194,8 @@ static int gdbstub(struct pt_regs *regs, enum exception_code excep)
|
|||||||
|
|
||||||
asm volatile("mov mdr,%0" : "=d"(mdr));
|
asm volatile("mov mdr,%0" : "=d"(mdr));
|
||||||
local_save_flags(epsw);
|
local_save_flags(epsw);
|
||||||
local_change_intr_mask_level(NUM2EPSW_IM(CONFIG_GDBSTUB_IRQ_LEVEL + 1));
|
arch_local_change_intr_mask_level(
|
||||||
|
NUM2EPSW_IM(CONFIG_GDBSTUB_IRQ_LEVEL + 1));
|
||||||
|
|
||||||
gdbstub_store_fpu();
|
gdbstub_store_fpu();
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <linux/kernel_stat.h>
|
#include <linux/kernel_stat.h>
|
||||||
#include <linux/rcupdate.h>
|
#include <linux/rcupdate.h>
|
||||||
#include <linux/posix-timers.h>
|
#include <linux/posix-timers.h>
|
||||||
|
#include <linux/cpu.h>
|
||||||
|
|
||||||
#include <asm/s390_ext.h>
|
#include <asm/s390_ext.h>
|
||||||
#include <asm/timer.h>
|
#include <asm/timer.h>
|
||||||
@ -566,6 +567,23 @@ void init_cpu_vtimer(void)
|
|||||||
__ctl_set_bit(0,10);
|
__ctl_set_bit(0,10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __cpuinit s390_nohz_notify(struct notifier_block *self,
|
||||||
|
unsigned long action, void *hcpu)
|
||||||
|
{
|
||||||
|
struct s390_idle_data *idle;
|
||||||
|
long cpu = (long) hcpu;
|
||||||
|
|
||||||
|
idle = &per_cpu(s390_idle, cpu);
|
||||||
|
switch (action) {
|
||||||
|
case CPU_DYING:
|
||||||
|
case CPU_DYING_FROZEN:
|
||||||
|
idle->nohz_delay = 0;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return NOTIFY_OK;
|
||||||
|
}
|
||||||
|
|
||||||
void __init vtime_init(void)
|
void __init vtime_init(void)
|
||||||
{
|
{
|
||||||
/* request the cpu timer external interrupt */
|
/* request the cpu timer external interrupt */
|
||||||
@ -574,5 +592,6 @@ void __init vtime_init(void)
|
|||||||
|
|
||||||
/* Enable cpu timer interrupts on the boot cpu. */
|
/* Enable cpu timer interrupts on the boot cpu. */
|
||||||
init_cpu_vtimer();
|
init_cpu_vtimer();
|
||||||
|
cpu_notifier(s390_nohz_notify, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,8 @@ config SUPERH
|
|||||||
select HAVE_SPARSE_IRQ
|
select HAVE_SPARSE_IRQ
|
||||||
select RTC_LIB
|
select RTC_LIB
|
||||||
select GENERIC_ATOMIC64
|
select GENERIC_ATOMIC64
|
||||||
select GENERIC_HARDIRQS_NO_DEPRECATED
|
# Support the deprecated APIs until MFD and GPIOLIB catch up.
|
||||||
|
select GENERIC_HARDIRQS_NO_DEPRECATED if !MFD_SUPPORT && !GPIOLIB
|
||||||
help
|
help
|
||||||
The SuperH is a RISC processor targeted for use in embedded systems
|
The SuperH is a RISC processor targeted for use in embedded systems
|
||||||
and consumer electronics; it was also used in the Sega Dreamcast
|
and consumer electronics; it was also used in the Sega Dreamcast
|
||||||
|
@ -368,8 +368,9 @@
|
|||||||
#define __NR_sendmsg 355
|
#define __NR_sendmsg 355
|
||||||
#define __NR_recvmsg 356
|
#define __NR_recvmsg 356
|
||||||
#define __NR_recvmmsg 357
|
#define __NR_recvmmsg 357
|
||||||
|
#define __NR_accept4 358
|
||||||
|
|
||||||
#define NR_syscalls 358
|
#define NR_syscalls 359
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
|
@ -375,3 +375,4 @@ ENTRY(sys_call_table)
|
|||||||
.long sys_sendmsg /* 355 */
|
.long sys_sendmsg /* 355 */
|
||||||
.long sys_recvmsg
|
.long sys_recvmsg
|
||||||
.long sys_recvmmsg
|
.long sys_recvmmsg
|
||||||
|
.long sys_accept4
|
||||||
|
@ -39,7 +39,7 @@ struct linux_dev_v2_funcs {
|
|||||||
int (*v2_dev_open)(char *devpath);
|
int (*v2_dev_open)(char *devpath);
|
||||||
void (*v2_dev_close)(int d);
|
void (*v2_dev_close)(int d);
|
||||||
int (*v2_dev_read)(int d, char *buf, int nbytes);
|
int (*v2_dev_read)(int d, char *buf, int nbytes);
|
||||||
int (*v2_dev_write)(int d, char *buf, int nbytes);
|
int (*v2_dev_write)(int d, const char *buf, int nbytes);
|
||||||
int (*v2_dev_seek)(int d, int hi, int lo);
|
int (*v2_dev_seek)(int d, int hi, int lo);
|
||||||
|
|
||||||
/* Never issued (multistage load support) */
|
/* Never issued (multistage load support) */
|
||||||
|
@ -60,25 +60,6 @@ extern char *prom_getbootargs(void);
|
|||||||
extern char *prom_mapio(char *virt_hint, int io_space, unsigned int phys_addr, unsigned int num_bytes);
|
extern char *prom_mapio(char *virt_hint, int io_space, unsigned int phys_addr, unsigned int num_bytes);
|
||||||
extern void prom_unmapio(char *virt_addr, unsigned int num_bytes);
|
extern void prom_unmapio(char *virt_addr, unsigned int num_bytes);
|
||||||
|
|
||||||
/* Device operations. */
|
|
||||||
|
|
||||||
/* Open the device described by the passed string. Note, that the format
|
|
||||||
* of the string is different on V0 vs. V2->higher proms. The caller must
|
|
||||||
* know what he/she is doing! Returns the device descriptor, an int.
|
|
||||||
*/
|
|
||||||
extern int prom_devopen(char *device_string);
|
|
||||||
|
|
||||||
/* Close a previously opened device described by the passed integer
|
|
||||||
* descriptor.
|
|
||||||
*/
|
|
||||||
extern int prom_devclose(int device_handle);
|
|
||||||
|
|
||||||
/* Do a seek operation on the device described by the passed integer
|
|
||||||
* descriptor.
|
|
||||||
*/
|
|
||||||
extern void prom_seek(int device_handle, unsigned int seek_hival,
|
|
||||||
unsigned int seek_lowval);
|
|
||||||
|
|
||||||
/* Miscellaneous routines, don't really fit in any category per se. */
|
/* Miscellaneous routines, don't really fit in any category per se. */
|
||||||
|
|
||||||
/* Reboot the machine with the command line passed. */
|
/* Reboot the machine with the command line passed. */
|
||||||
@ -121,19 +102,8 @@ extern int prom_getrev(void);
|
|||||||
/* Get the prom firmware revision. */
|
/* Get the prom firmware revision. */
|
||||||
extern int prom_getprev(void);
|
extern int prom_getprev(void);
|
||||||
|
|
||||||
/* Character operations to/from the console.... */
|
/* Write a buffer of characters to the console. */
|
||||||
|
extern void prom_console_write_buf(const char *buf, int len);
|
||||||
/* Non-blocking get character from console. */
|
|
||||||
extern int prom_nbgetchar(void);
|
|
||||||
|
|
||||||
/* Non-blocking put character to console. */
|
|
||||||
extern int prom_nbputchar(char character);
|
|
||||||
|
|
||||||
/* Blocking get character from console. */
|
|
||||||
extern char prom_getchar(void);
|
|
||||||
|
|
||||||
/* Blocking put character to console. */
|
|
||||||
extern void prom_putchar(char character);
|
|
||||||
|
|
||||||
/* Prom's internal routines, don't use in kernel/boot code. */
|
/* Prom's internal routines, don't use in kernel/boot code. */
|
||||||
extern void prom_printf(const char *fmt, ...);
|
extern void prom_printf(const char *fmt, ...);
|
||||||
@ -238,7 +208,6 @@ extern int prom_node_has_property(phandle node, char *property);
|
|||||||
extern int prom_setprop(phandle node, const char *prop_name, char *prop_value,
|
extern int prom_setprop(phandle node, const char *prop_name, char *prop_value,
|
||||||
int value_size);
|
int value_size);
|
||||||
|
|
||||||
extern phandle prom_pathtoinode(char *path);
|
|
||||||
extern phandle prom_inst2pkg(int);
|
extern phandle prom_inst2pkg(int);
|
||||||
|
|
||||||
/* Dorking with Bus ranges... */
|
/* Dorking with Bus ranges... */
|
||||||
|
@ -67,27 +67,6 @@ extern void prom_init(void *cif_handler, void *cif_stack);
|
|||||||
/* Boot argument acquisition, returns the boot command line string. */
|
/* Boot argument acquisition, returns the boot command line string. */
|
||||||
extern char *prom_getbootargs(void);
|
extern char *prom_getbootargs(void);
|
||||||
|
|
||||||
/* Device utilities. */
|
|
||||||
|
|
||||||
/* Device operations. */
|
|
||||||
|
|
||||||
/* Open the device described by the passed string. Note, that the format
|
|
||||||
* of the string is different on V0 vs. V2->higher proms. The caller must
|
|
||||||
* know what he/she is doing! Returns the device descriptor, an int.
|
|
||||||
*/
|
|
||||||
extern int prom_devopen(const char *device_string);
|
|
||||||
|
|
||||||
/* Close a previously opened device described by the passed integer
|
|
||||||
* descriptor.
|
|
||||||
*/
|
|
||||||
extern int prom_devclose(int device_handle);
|
|
||||||
|
|
||||||
/* Do a seek operation on the device described by the passed integer
|
|
||||||
* descriptor.
|
|
||||||
*/
|
|
||||||
extern void prom_seek(int device_handle, unsigned int seek_hival,
|
|
||||||
unsigned int seek_lowval);
|
|
||||||
|
|
||||||
/* Miscellaneous routines, don't really fit in any category per se. */
|
/* Miscellaneous routines, don't really fit in any category per se. */
|
||||||
|
|
||||||
/* Reboot the machine with the command line passed. */
|
/* Reboot the machine with the command line passed. */
|
||||||
@ -109,33 +88,14 @@ extern void prom_halt(void) __attribute__ ((noreturn));
|
|||||||
/* Halt and power-off the machine. */
|
/* Halt and power-off the machine. */
|
||||||
extern void prom_halt_power_off(void) __attribute__ ((noreturn));
|
extern void prom_halt_power_off(void) __attribute__ ((noreturn));
|
||||||
|
|
||||||
/* Set the PROM 'sync' callback function to the passed function pointer.
|
|
||||||
* When the user gives the 'sync' command at the prom prompt while the
|
|
||||||
* kernel is still active, the prom will call this routine.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef int (*callback_func_t)(long *cmd);
|
|
||||||
extern void prom_setcallback(callback_func_t func_ptr);
|
|
||||||
|
|
||||||
/* Acquire the IDPROM of the root node in the prom device tree. This
|
/* Acquire the IDPROM of the root node in the prom device tree. This
|
||||||
* gets passed a buffer where you would like it stuffed. The return value
|
* gets passed a buffer where you would like it stuffed. The return value
|
||||||
* is the format type of this idprom or 0xff on error.
|
* is the format type of this idprom or 0xff on error.
|
||||||
*/
|
*/
|
||||||
extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size);
|
extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size);
|
||||||
|
|
||||||
/* Character operations to/from the console.... */
|
/* Write a buffer of characters to the console. */
|
||||||
|
extern void prom_console_write_buf(const char *buf, int len);
|
||||||
/* Non-blocking get character from console. */
|
|
||||||
extern int prom_nbgetchar(void);
|
|
||||||
|
|
||||||
/* Non-blocking put character to console. */
|
|
||||||
extern int prom_nbputchar(char character);
|
|
||||||
|
|
||||||
/* Blocking get character from console. */
|
|
||||||
extern char prom_getchar(void);
|
|
||||||
|
|
||||||
/* Blocking put character to console. */
|
|
||||||
extern void prom_putchar(char character);
|
|
||||||
|
|
||||||
/* Prom's internal routines, don't use in kernel/boot code. */
|
/* Prom's internal routines, don't use in kernel/boot code. */
|
||||||
extern void prom_printf(const char *fmt, ...);
|
extern void prom_printf(const char *fmt, ...);
|
||||||
@ -279,9 +239,7 @@ extern phandle prom_finddevice(const char *name);
|
|||||||
extern int prom_setprop(phandle node, const char *prop_name, char *prop_value,
|
extern int prom_setprop(phandle node, const char *prop_name, char *prop_value,
|
||||||
int value_size);
|
int value_size);
|
||||||
|
|
||||||
extern phandle prom_pathtoinode(const char *path);
|
|
||||||
extern phandle prom_inst2pkg(int);
|
extern phandle prom_inst2pkg(int);
|
||||||
extern int prom_service_exists(const char *service_name);
|
|
||||||
extern void prom_sun4v_guest_soft_state(void);
|
extern void prom_sun4v_guest_soft_state(void);
|
||||||
|
|
||||||
extern int prom_ihandle2path(int handle, char *buffer, int bufsize);
|
extern int prom_ihandle2path(int handle, char *buffer, int bufsize);
|
||||||
|
@ -114,7 +114,7 @@ void __init leon_init_timers(irq_handler_t counter_fn)
|
|||||||
if (leon3_gptimer_regs && leon3_irqctrl_regs) {
|
if (leon3_gptimer_regs && leon3_irqctrl_regs) {
|
||||||
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].val, 0);
|
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].val, 0);
|
||||||
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].rld,
|
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].rld,
|
||||||
(((1000000 / 100) - 1)));
|
(((1000000 / HZ) - 1)));
|
||||||
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].ctrl, 0);
|
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].ctrl, 0);
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
@ -128,7 +128,7 @@ void __init leon_init_timers(irq_handler_t counter_fn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].val, 0);
|
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].val, 0);
|
||||||
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].rld, (((1000000/100) - 1)));
|
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].rld, (((1000000/HZ) - 1)));
|
||||||
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].ctrl, 0);
|
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[1].ctrl, 0);
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ ccflags := -Werror
|
|||||||
|
|
||||||
lib-y := bootstr_$(BITS).o
|
lib-y := bootstr_$(BITS).o
|
||||||
lib-$(CONFIG_SPARC32) += devmap.o
|
lib-$(CONFIG_SPARC32) += devmap.o
|
||||||
lib-y += devops_$(BITS).o
|
|
||||||
lib-y += init_$(BITS).o
|
lib-y += init_$(BITS).o
|
||||||
lib-$(CONFIG_SPARC32) += memory.o
|
lib-$(CONFIG_SPARC32) += memory.o
|
||||||
lib-y += misc_$(BITS).o
|
lib-y += misc_$(BITS).o
|
||||||
|
@ -16,63 +16,26 @@
|
|||||||
|
|
||||||
extern void restore_current(void);
|
extern void restore_current(void);
|
||||||
|
|
||||||
/* Non blocking get character from console input device, returns -1
|
|
||||||
* if no input was taken. This can be used for polling.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
prom_nbgetchar(void)
|
|
||||||
{
|
|
||||||
static char inc;
|
|
||||||
int i = -1;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&prom_lock, flags);
|
|
||||||
switch(prom_vers) {
|
|
||||||
case PROM_V0:
|
|
||||||
i = (*(romvec->pv_nbgetchar))();
|
|
||||||
break;
|
|
||||||
case PROM_V2:
|
|
||||||
case PROM_V3:
|
|
||||||
if( (*(romvec->pv_v2devops).v2_dev_read)(*romvec->pv_v2bootargs.fd_stdin , &inc, 0x1) == 1) {
|
|
||||||
i = inc;
|
|
||||||
} else {
|
|
||||||
i = -1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
i = -1;
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
restore_current();
|
|
||||||
spin_unlock_irqrestore(&prom_lock, flags);
|
|
||||||
return i; /* Ugh, we could spin forever on unsupported proms ;( */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Non blocking put character to console device, returns -1 if
|
/* Non blocking put character to console device, returns -1 if
|
||||||
* unsuccessful.
|
* unsuccessful.
|
||||||
*/
|
*/
|
||||||
int
|
static int prom_nbputchar(const char *buf)
|
||||||
prom_nbputchar(char c)
|
|
||||||
{
|
{
|
||||||
static char outc;
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int i = -1;
|
int i = -1;
|
||||||
|
|
||||||
spin_lock_irqsave(&prom_lock, flags);
|
spin_lock_irqsave(&prom_lock, flags);
|
||||||
switch(prom_vers) {
|
switch(prom_vers) {
|
||||||
case PROM_V0:
|
case PROM_V0:
|
||||||
i = (*(romvec->pv_nbputchar))(c);
|
i = (*(romvec->pv_nbputchar))(*buf);
|
||||||
break;
|
break;
|
||||||
case PROM_V2:
|
case PROM_V2:
|
||||||
case PROM_V3:
|
case PROM_V3:
|
||||||
outc = c;
|
if ((*(romvec->pv_v2devops).v2_dev_write)(*romvec->pv_v2bootargs.fd_stdout,
|
||||||
if( (*(romvec->pv_v2devops).v2_dev_write)(*romvec->pv_v2bootargs.fd_stdout, &outc, 0x1) == 1)
|
buf, 0x1) == 1)
|
||||||
i = 0;
|
i = 0;
|
||||||
else
|
|
||||||
i = -1;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
i = -1;
|
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
restore_current();
|
restore_current();
|
||||||
@ -80,18 +43,14 @@ prom_nbputchar(char c)
|
|||||||
return i; /* Ugh, we could spin forever on unsupported proms ;( */
|
return i; /* Ugh, we could spin forever on unsupported proms ;( */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Blocking version of get character routine above. */
|
void prom_console_write_buf(const char *buf, int len)
|
||||||
char
|
|
||||||
prom_getchar(void)
|
|
||||||
{
|
{
|
||||||
int character;
|
while (len) {
|
||||||
while((character = prom_nbgetchar()) == -1) ;
|
int n = prom_nbputchar(buf);
|
||||||
return (char) character;
|
if (n)
|
||||||
|
continue;
|
||||||
|
len--;
|
||||||
|
buf++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Blocking version of put character routine above. */
|
|
||||||
void
|
|
||||||
prom_putchar(char c)
|
|
||||||
{
|
|
||||||
while(prom_nbputchar(c) == -1) ;
|
|
||||||
}
|
|
||||||
|
@ -15,85 +15,34 @@
|
|||||||
|
|
||||||
extern int prom_stdin, prom_stdout;
|
extern int prom_stdin, prom_stdout;
|
||||||
|
|
||||||
/* Non blocking get character from console input device, returns -1
|
static int __prom_console_write_buf(const char *buf, int len)
|
||||||
* if no input was taken. This can be used for polling.
|
|
||||||
*/
|
|
||||||
inline int
|
|
||||||
prom_nbgetchar(void)
|
|
||||||
{
|
{
|
||||||
unsigned long args[7];
|
unsigned long args[7];
|
||||||
char inc;
|
int ret;
|
||||||
|
|
||||||
args[0] = (unsigned long) "read";
|
|
||||||
args[1] = 3;
|
|
||||||
args[2] = 1;
|
|
||||||
args[3] = (unsigned int) prom_stdin;
|
|
||||||
args[4] = (unsigned long) &inc;
|
|
||||||
args[5] = 1;
|
|
||||||
args[6] = (unsigned long) -1;
|
|
||||||
|
|
||||||
p1275_cmd_direct(args);
|
|
||||||
|
|
||||||
if (args[6] == 1)
|
|
||||||
return inc;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Non blocking put character to console device, returns -1 if
|
|
||||||
* unsuccessful.
|
|
||||||
*/
|
|
||||||
inline int
|
|
||||||
prom_nbputchar(char c)
|
|
||||||
{
|
|
||||||
unsigned long args[7];
|
|
||||||
char outc;
|
|
||||||
|
|
||||||
outc = c;
|
|
||||||
|
|
||||||
args[0] = (unsigned long) "write";
|
args[0] = (unsigned long) "write";
|
||||||
args[1] = 3;
|
args[1] = 3;
|
||||||
args[2] = 1;
|
args[2] = 1;
|
||||||
args[3] = (unsigned int) prom_stdout;
|
args[3] = (unsigned int) prom_stdout;
|
||||||
args[4] = (unsigned long) &outc;
|
args[4] = (unsigned long) buf;
|
||||||
args[5] = 1;
|
args[5] = (unsigned int) len;
|
||||||
args[6] = (unsigned long) -1;
|
args[6] = (unsigned long) -1;
|
||||||
|
|
||||||
p1275_cmd_direct(args);
|
p1275_cmd_direct(args);
|
||||||
|
|
||||||
if (args[6] == 1)
|
ret = (int) args[6];
|
||||||
return 0;
|
if (ret < 0)
|
||||||
else
|
|
||||||
return -1;
|
return -1;
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Blocking version of get character routine above. */
|
void prom_console_write_buf(const char *buf, int len)
|
||||||
char
|
|
||||||
prom_getchar(void)
|
|
||||||
{
|
{
|
||||||
int character;
|
while (len) {
|
||||||
while((character = prom_nbgetchar()) == -1) ;
|
int n = __prom_console_write_buf(buf, len);
|
||||||
return (char) character;
|
if (n < 0)
|
||||||
}
|
continue;
|
||||||
|
len -= n;
|
||||||
/* Blocking version of put character routine above. */
|
buf += len;
|
||||||
void
|
}
|
||||||
prom_putchar(char c)
|
|
||||||
{
|
|
||||||
prom_nbputchar(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
prom_puts(const char *s, int len)
|
|
||||||
{
|
|
||||||
unsigned long args[7];
|
|
||||||
|
|
||||||
args[0] = (unsigned long) "write";
|
|
||||||
args[1] = 3;
|
|
||||||
args[2] = 1;
|
|
||||||
args[3] = (unsigned int) prom_stdout;
|
|
||||||
args[4] = (unsigned long) s;
|
|
||||||
args[5] = len;
|
|
||||||
args[6] = (unsigned long) -1;
|
|
||||||
|
|
||||||
p1275_cmd_direct(args);
|
|
||||||
}
|
}
|
||||||
|
@ -1,87 +0,0 @@
|
|||||||
/*
|
|
||||||
* devops.c: Device operations using the PROM.
|
|
||||||
*
|
|
||||||
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
|
|
||||||
*/
|
|
||||||
#include <linux/types.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
|
|
||||||
#include <asm/openprom.h>
|
|
||||||
#include <asm/oplib.h>
|
|
||||||
|
|
||||||
extern void restore_current(void);
|
|
||||||
|
|
||||||
/* Open the device described by the string 'dstr'. Returns the handle
|
|
||||||
* to that device used for subsequent operations on that device.
|
|
||||||
* Returns -1 on failure.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
prom_devopen(char *dstr)
|
|
||||||
{
|
|
||||||
int handle;
|
|
||||||
unsigned long flags;
|
|
||||||
spin_lock_irqsave(&prom_lock, flags);
|
|
||||||
switch(prom_vers) {
|
|
||||||
case PROM_V0:
|
|
||||||
handle = (*(romvec->pv_v0devops.v0_devopen))(dstr);
|
|
||||||
if(handle == 0) handle = -1;
|
|
||||||
break;
|
|
||||||
case PROM_V2:
|
|
||||||
case PROM_V3:
|
|
||||||
handle = (*(romvec->pv_v2devops.v2_dev_open))(dstr);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
handle = -1;
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
restore_current();
|
|
||||||
spin_unlock_irqrestore(&prom_lock, flags);
|
|
||||||
|
|
||||||
return handle;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Close the device described by device handle 'dhandle'. */
|
|
||||||
int
|
|
||||||
prom_devclose(int dhandle)
|
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
spin_lock_irqsave(&prom_lock, flags);
|
|
||||||
switch(prom_vers) {
|
|
||||||
case PROM_V0:
|
|
||||||
(*(romvec->pv_v0devops.v0_devclose))(dhandle);
|
|
||||||
break;
|
|
||||||
case PROM_V2:
|
|
||||||
case PROM_V3:
|
|
||||||
(*(romvec->pv_v2devops.v2_dev_close))(dhandle);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
restore_current();
|
|
||||||
spin_unlock_irqrestore(&prom_lock, flags);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Seek to specified location described by 'seekhi' and 'seeklo'
|
|
||||||
* for device 'dhandle'.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
prom_seek(int dhandle, unsigned int seekhi, unsigned int seeklo)
|
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
spin_lock_irqsave(&prom_lock, flags);
|
|
||||||
switch(prom_vers) {
|
|
||||||
case PROM_V0:
|
|
||||||
(*(romvec->pv_v0devops.v0_seekdev))(dhandle, seekhi, seeklo);
|
|
||||||
break;
|
|
||||||
case PROM_V2:
|
|
||||||
case PROM_V3:
|
|
||||||
(*(romvec->pv_v2devops.v2_dev_seek))(dhandle, seekhi, seeklo);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
restore_current();
|
|
||||||
spin_unlock_irqrestore(&prom_lock, flags);
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
/*
|
|
||||||
* devops.c: Device operations using the PROM.
|
|
||||||
*
|
|
||||||
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
|
|
||||||
* Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
|
|
||||||
*/
|
|
||||||
#include <linux/types.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
|
|
||||||
#include <asm/openprom.h>
|
|
||||||
#include <asm/oplib.h>
|
|
||||||
|
|
||||||
/* Open the device described by the string 'dstr'. Returns the handle
|
|
||||||
* to that device used for subsequent operations on that device.
|
|
||||||
* Returns 0 on failure.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
prom_devopen(const char *dstr)
|
|
||||||
{
|
|
||||||
unsigned long args[5];
|
|
||||||
|
|
||||||
args[0] = (unsigned long) "open";
|
|
||||||
args[1] = 1;
|
|
||||||
args[2] = 1;
|
|
||||||
args[3] = (unsigned long) dstr;
|
|
||||||
args[4] = (unsigned long) -1;
|
|
||||||
|
|
||||||
p1275_cmd_direct(args);
|
|
||||||
|
|
||||||
return (int) args[4];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Close the device described by device handle 'dhandle'. */
|
|
||||||
int
|
|
||||||
prom_devclose(int dhandle)
|
|
||||||
{
|
|
||||||
unsigned long args[4];
|
|
||||||
|
|
||||||
args[0] = (unsigned long) "close";
|
|
||||||
args[1] = 1;
|
|
||||||
args[2] = 0;
|
|
||||||
args[3] = (unsigned int) dhandle;
|
|
||||||
|
|
||||||
p1275_cmd_direct(args);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Seek to specified location described by 'seekhi' and 'seeklo'
|
|
||||||
* for device 'dhandle'.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
prom_seek(int dhandle, unsigned int seekhi, unsigned int seeklo)
|
|
||||||
{
|
|
||||||
unsigned long args[7];
|
|
||||||
|
|
||||||
args[0] = (unsigned long) "seek";
|
|
||||||
args[1] = 3;
|
|
||||||
args[2] = 1;
|
|
||||||
args[3] = (unsigned int) dhandle;
|
|
||||||
args[4] = seekhi;
|
|
||||||
args[5] = seeklo;
|
|
||||||
args[6] = (unsigned long) -1;
|
|
||||||
|
|
||||||
p1275_cmd_direct(args);
|
|
||||||
}
|
|
@ -18,7 +18,7 @@
|
|||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/ldc.h>
|
#include <asm/ldc.h>
|
||||||
|
|
||||||
int prom_service_exists(const char *service_name)
|
static int prom_service_exists(const char *service_name)
|
||||||
{
|
{
|
||||||
unsigned long args[5];
|
unsigned long args[5];
|
||||||
|
|
||||||
@ -150,20 +150,6 @@ void prom_halt_power_off(void)
|
|||||||
prom_halt();
|
prom_halt();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set prom sync handler to call function 'funcp'. */
|
|
||||||
void prom_setcallback(callback_func_t funcp)
|
|
||||||
{
|
|
||||||
unsigned long args[5];
|
|
||||||
if (!funcp)
|
|
||||||
return;
|
|
||||||
args[0] = (unsigned long) "set-callback";
|
|
||||||
args[1] = 1;
|
|
||||||
args[2] = 1;
|
|
||||||
args[3] = (unsigned long) funcp;
|
|
||||||
args[4] = (unsigned long) -1;
|
|
||||||
p1275_cmd_direct(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the idprom and stuff it into buffer 'idbuf'. Returns the
|
/* Get the idprom and stuff it into buffer 'idbuf'. Returns the
|
||||||
* format type. 'num_bytes' is the number of bytes that your idbuf
|
* format type. 'num_bytes' is the number of bytes that your idbuf
|
||||||
* has space for. Returns 0xff on error.
|
* has space for. Returns 0xff on error.
|
||||||
|
@ -15,22 +15,45 @@
|
|||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/spinlock.h>
|
||||||
|
|
||||||
#include <asm/openprom.h>
|
#include <asm/openprom.h>
|
||||||
#include <asm/oplib.h>
|
#include <asm/oplib.h>
|
||||||
|
|
||||||
|
#define CONSOLE_WRITE_BUF_SIZE 1024
|
||||||
|
|
||||||
static char ppbuf[1024];
|
static char ppbuf[1024];
|
||||||
|
static char console_write_buf[CONSOLE_WRITE_BUF_SIZE];
|
||||||
|
static DEFINE_RAW_SPINLOCK(console_write_lock);
|
||||||
|
|
||||||
void notrace prom_write(const char *buf, unsigned int n)
|
void notrace prom_write(const char *buf, unsigned int n)
|
||||||
{
|
{
|
||||||
char ch;
|
unsigned int dest_len;
|
||||||
|
unsigned long flags;
|
||||||
|
char *dest;
|
||||||
|
|
||||||
while (n != 0) {
|
dest = console_write_buf;
|
||||||
--n;
|
raw_spin_lock_irqsave(&console_write_lock, flags);
|
||||||
if ((ch = *buf++) == '\n')
|
|
||||||
prom_putchar('\r');
|
dest_len = 0;
|
||||||
prom_putchar(ch);
|
while (n-- != 0) {
|
||||||
|
char ch = *buf++;
|
||||||
|
if (ch == '\n') {
|
||||||
|
*dest++ = '\r';
|
||||||
|
dest_len++;
|
||||||
|
}
|
||||||
|
*dest++ = ch;
|
||||||
|
dest_len++;
|
||||||
|
if (dest_len >= CONSOLE_WRITE_BUF_SIZE - 1) {
|
||||||
|
prom_console_write_buf(console_write_buf, dest_len);
|
||||||
|
dest = console_write_buf;
|
||||||
|
dest_len = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (dest_len)
|
||||||
|
prom_console_write_buf(console_write_buf, dest_len);
|
||||||
|
|
||||||
|
raw_spin_unlock_irqrestore(&console_write_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void notrace prom_printf(const char *fmt, ...)
|
void notrace prom_printf(const char *fmt, ...)
|
||||||
|
@ -342,19 +342,3 @@ phandle prom_inst2pkg(int inst)
|
|||||||
if (node == -1) return 0;
|
if (node == -1) return 0;
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return 'node' assigned to a particular prom 'path'
|
|
||||||
* FIXME: Should work for v0 as well
|
|
||||||
*/
|
|
||||||
phandle prom_pathtoinode(char *path)
|
|
||||||
{
|
|
||||||
phandle node;
|
|
||||||
int inst;
|
|
||||||
|
|
||||||
inst = prom_devopen (path);
|
|
||||||
if (inst == -1) return 0;
|
|
||||||
node = prom_inst2pkg (inst);
|
|
||||||
prom_devclose (inst);
|
|
||||||
if (node == -1) return 0;
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
@ -374,24 +374,6 @@ inline phandle prom_inst2pkg(int inst)
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return 'node' assigned to a particular prom 'path'
|
|
||||||
* FIXME: Should work for v0 as well
|
|
||||||
*/
|
|
||||||
phandle prom_pathtoinode(const char *path)
|
|
||||||
{
|
|
||||||
phandle node;
|
|
||||||
int inst;
|
|
||||||
|
|
||||||
inst = prom_devopen (path);
|
|
||||||
if (inst == 0)
|
|
||||||
return 0;
|
|
||||||
node = prom_inst2pkg(inst);
|
|
||||||
prom_devclose(inst);
|
|
||||||
if (node == -1)
|
|
||||||
return 0;
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
int prom_ihandle2path(int handle, char *buffer, int bufsize)
|
int prom_ihandle2path(int handle, char *buffer, int bufsize)
|
||||||
{
|
{
|
||||||
unsigned long args[7];
|
unsigned long args[7];
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
* by the Free Software Foundation.
|
* by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/err.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
@ -11,6 +11,7 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src);
|
|||||||
void pvclock_read_wallclock(struct pvclock_wall_clock *wall,
|
void pvclock_read_wallclock(struct pvclock_wall_clock *wall,
|
||||||
struct pvclock_vcpu_time_info *vcpu,
|
struct pvclock_vcpu_time_info *vcpu,
|
||||||
struct timespec *ts);
|
struct timespec *ts);
|
||||||
|
void pvclock_resume(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scale a 64-bit delta by scaling and multiplying by a 32-bit fraction,
|
* Scale a 64-bit delta by scaling and multiplying by a 32-bit fraction,
|
||||||
|
@ -83,6 +83,11 @@ unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src)
|
|||||||
|
|
||||||
static atomic64_t last_value = ATOMIC64_INIT(0);
|
static atomic64_t last_value = ATOMIC64_INIT(0);
|
||||||
|
|
||||||
|
void pvclock_resume(void)
|
||||||
|
{
|
||||||
|
atomic64_set(&last_value, 0);
|
||||||
|
}
|
||||||
|
|
||||||
cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
|
cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
|
||||||
{
|
{
|
||||||
struct pvclock_shadow_time shadow;
|
struct pvclock_shadow_time shadow;
|
||||||
|
@ -426,6 +426,8 @@ void xen_timer_resume(void)
|
|||||||
{
|
{
|
||||||
int cpu;
|
int cpu;
|
||||||
|
|
||||||
|
pvclock_resume();
|
||||||
|
|
||||||
if (xen_clockevent != &xen_vcpuop_clockevent)
|
if (xen_clockevent != &xen_vcpuop_clockevent)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -250,6 +250,14 @@ bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm,
|
|||||||
int ret, rw;
|
int ret, rw;
|
||||||
unsigned int dxfer_len;
|
unsigned int dxfer_len;
|
||||||
void *dxferp = NULL;
|
void *dxferp = NULL;
|
||||||
|
struct bsg_class_device *bcd = &q->bsg_dev;
|
||||||
|
|
||||||
|
/* if the LLD has been removed then the bsg_unregister_queue will
|
||||||
|
* eventually be called and the class_dev was freed, so we can no
|
||||||
|
* longer use this request_queue. Return no such address.
|
||||||
|
*/
|
||||||
|
if (!bcd->class_dev)
|
||||||
|
return ERR_PTR(-ENXIO);
|
||||||
|
|
||||||
dprintk("map hdr %llx/%u %llx/%u\n", (unsigned long long) hdr->dout_xferp,
|
dprintk("map hdr %llx/%u %llx/%u\n", (unsigned long long) hdr->dout_xferp,
|
||||||
hdr->dout_xfer_len, (unsigned long long) hdr->din_xferp,
|
hdr->dout_xfer_len, (unsigned long long) hdr->din_xferp,
|
||||||
|
@ -100,24 +100,7 @@ static const struct file_operations acpi_ac_fops = {
|
|||||||
.release = single_release,
|
.release = single_release,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
static int get_ac_property(struct power_supply *psy,
|
|
||||||
enum power_supply_property psp,
|
|
||||||
union power_supply_propval *val)
|
|
||||||
{
|
|
||||||
struct acpi_ac *ac = to_acpi_ac(psy);
|
|
||||||
switch (psp) {
|
|
||||||
case POWER_SUPPLY_PROP_ONLINE:
|
|
||||||
val->intval = ac->state;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static enum power_supply_property ac_props[] = {
|
|
||||||
POWER_SUPPLY_PROP_ONLINE,
|
|
||||||
};
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
AC Adapter Management
|
AC Adapter Management
|
||||||
-------------------------------------------------------------------------- */
|
-------------------------------------------------------------------------- */
|
||||||
@ -140,6 +123,35 @@ static int acpi_ac_get_state(struct acpi_ac *ac)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------
|
||||||
|
sysfs I/F
|
||||||
|
-------------------------------------------------------------------------- */
|
||||||
|
static int get_ac_property(struct power_supply *psy,
|
||||||
|
enum power_supply_property psp,
|
||||||
|
union power_supply_propval *val)
|
||||||
|
{
|
||||||
|
struct acpi_ac *ac = to_acpi_ac(psy);
|
||||||
|
|
||||||
|
if (!ac)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (acpi_ac_get_state(ac))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
switch (psp) {
|
||||||
|
case POWER_SUPPLY_PROP_ONLINE:
|
||||||
|
val->intval = ac->state;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum power_supply_property ac_props[] = {
|
||||||
|
POWER_SUPPLY_PROP_ONLINE,
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI_PROCFS_POWER
|
#ifdef CONFIG_ACPI_PROCFS_POWER
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
FS Interface (/proc)
|
FS Interface (/proc)
|
||||||
|
@ -86,7 +86,7 @@ static struct erst_erange {
|
|||||||
* It is used to provide exclusive accessing for ERST Error Log
|
* It is used to provide exclusive accessing for ERST Error Log
|
||||||
* Address Range too.
|
* Address Range too.
|
||||||
*/
|
*/
|
||||||
static DEFINE_SPINLOCK(erst_lock);
|
static DEFINE_RAW_SPINLOCK(erst_lock);
|
||||||
|
|
||||||
static inline int erst_errno(int command_status)
|
static inline int erst_errno(int command_status)
|
||||||
{
|
{
|
||||||
@ -421,9 +421,9 @@ ssize_t erst_get_record_count(void)
|
|||||||
if (erst_disable)
|
if (erst_disable)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
spin_lock_irqsave(&erst_lock, flags);
|
raw_spin_lock_irqsave(&erst_lock, flags);
|
||||||
count = __erst_get_record_count();
|
count = __erst_get_record_count();
|
||||||
spin_unlock_irqrestore(&erst_lock, flags);
|
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
@ -456,9 +456,9 @@ int erst_get_next_record_id(u64 *record_id)
|
|||||||
if (erst_disable)
|
if (erst_disable)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
spin_lock_irqsave(&erst_lock, flags);
|
raw_spin_lock_irqsave(&erst_lock, flags);
|
||||||
rc = __erst_get_next_record_id(record_id);
|
rc = __erst_get_next_record_id(record_id);
|
||||||
spin_unlock_irqrestore(&erst_lock, flags);
|
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -624,17 +624,17 @@ int erst_write(const struct cper_record_header *record)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (erst_erange.attr & ERST_RANGE_NVRAM) {
|
if (erst_erange.attr & ERST_RANGE_NVRAM) {
|
||||||
if (!spin_trylock_irqsave(&erst_lock, flags))
|
if (!raw_spin_trylock_irqsave(&erst_lock, flags))
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
rc = __erst_write_to_nvram(record);
|
rc = __erst_write_to_nvram(record);
|
||||||
spin_unlock_irqrestore(&erst_lock, flags);
|
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (record->record_length > erst_erange.size)
|
if (record->record_length > erst_erange.size)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (!spin_trylock_irqsave(&erst_lock, flags))
|
if (!raw_spin_trylock_irqsave(&erst_lock, flags))
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
memcpy(erst_erange.vaddr, record, record->record_length);
|
memcpy(erst_erange.vaddr, record, record->record_length);
|
||||||
rcd_erange = erst_erange.vaddr;
|
rcd_erange = erst_erange.vaddr;
|
||||||
@ -642,7 +642,7 @@ int erst_write(const struct cper_record_header *record)
|
|||||||
memcpy(&rcd_erange->persistence_information, "ER", 2);
|
memcpy(&rcd_erange->persistence_information, "ER", 2);
|
||||||
|
|
||||||
rc = __erst_write_to_storage(0);
|
rc = __erst_write_to_storage(0);
|
||||||
spin_unlock_irqrestore(&erst_lock, flags);
|
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -696,9 +696,9 @@ ssize_t erst_read(u64 record_id, struct cper_record_header *record,
|
|||||||
if (erst_disable)
|
if (erst_disable)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
spin_lock_irqsave(&erst_lock, flags);
|
raw_spin_lock_irqsave(&erst_lock, flags);
|
||||||
len = __erst_read(record_id, record, buflen);
|
len = __erst_read(record_id, record, buflen);
|
||||||
spin_unlock_irqrestore(&erst_lock, flags);
|
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(erst_read);
|
EXPORT_SYMBOL_GPL(erst_read);
|
||||||
@ -719,20 +719,20 @@ ssize_t erst_read_next(struct cper_record_header *record, size_t buflen)
|
|||||||
if (erst_disable)
|
if (erst_disable)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
spin_lock_irqsave(&erst_lock, flags);
|
raw_spin_lock_irqsave(&erst_lock, flags);
|
||||||
rc = __erst_get_next_record_id(&record_id);
|
rc = __erst_get_next_record_id(&record_id);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
spin_unlock_irqrestore(&erst_lock, flags);
|
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
/* no more record */
|
/* no more record */
|
||||||
if (record_id == APEI_ERST_INVALID_RECORD_ID) {
|
if (record_id == APEI_ERST_INVALID_RECORD_ID) {
|
||||||
spin_unlock_irqrestore(&erst_lock, flags);
|
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = __erst_read(record_id, record, buflen);
|
len = __erst_read(record_id, record, buflen);
|
||||||
spin_unlock_irqrestore(&erst_lock, flags);
|
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
@ -746,12 +746,12 @@ int erst_clear(u64 record_id)
|
|||||||
if (erst_disable)
|
if (erst_disable)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
spin_lock_irqsave(&erst_lock, flags);
|
raw_spin_lock_irqsave(&erst_lock, flags);
|
||||||
if (erst_erange.attr & ERST_RANGE_NVRAM)
|
if (erst_erange.attr & ERST_RANGE_NVRAM)
|
||||||
rc = __erst_clear_from_nvram(record_id);
|
rc = __erst_clear_from_nvram(record_id);
|
||||||
else
|
else
|
||||||
rc = __erst_clear_from_storage(record_id);
|
rc = __erst_clear_from_storage(record_id);
|
||||||
spin_unlock_irqrestore(&erst_lock, flags);
|
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -46,9 +46,9 @@ EXPORT_SYMBOL_GPL(hest_disable);
|
|||||||
|
|
||||||
/* HEST table parsing */
|
/* HEST table parsing */
|
||||||
|
|
||||||
static struct acpi_table_hest *hest_tab;
|
static struct acpi_table_hest *__read_mostly hest_tab;
|
||||||
|
|
||||||
static int hest_esrc_len_tab[ACPI_HEST_TYPE_RESERVED] = {
|
static const int hest_esrc_len_tab[ACPI_HEST_TYPE_RESERVED] = {
|
||||||
[ACPI_HEST_TYPE_IA32_CHECK] = -1, /* need further calculation */
|
[ACPI_HEST_TYPE_IA32_CHECK] = -1, /* need further calculation */
|
||||||
[ACPI_HEST_TYPE_IA32_CORRECTED_CHECK] = -1,
|
[ACPI_HEST_TYPE_IA32_CORRECTED_CHECK] = -1,
|
||||||
[ACPI_HEST_TYPE_IA32_NMI] = sizeof(struct acpi_hest_ia_nmi),
|
[ACPI_HEST_TYPE_IA32_NMI] = sizeof(struct acpi_hest_ia_nmi),
|
||||||
@ -126,7 +126,7 @@ struct ghes_arr {
|
|||||||
unsigned int count;
|
unsigned int count;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int hest_parse_ghes_count(struct acpi_hest_header *hest_hdr, void *data)
|
static int __init hest_parse_ghes_count(struct acpi_hest_header *hest_hdr, void *data)
|
||||||
{
|
{
|
||||||
int *count = data;
|
int *count = data;
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ static int hest_parse_ghes_count(struct acpi_hest_header *hest_hdr, void *data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hest_parse_ghes(struct acpi_hest_header *hest_hdr, void *data)
|
static int __init hest_parse_ghes(struct acpi_hest_header *hest_hdr, void *data)
|
||||||
{
|
{
|
||||||
struct platform_device *ghes_dev;
|
struct platform_device *ghes_dev;
|
||||||
struct ghes_arr *ghes_arr = data;
|
struct ghes_arr *ghes_arr = data;
|
||||||
@ -165,7 +165,7 @@ err:
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hest_ghes_dev_register(unsigned int ghes_count)
|
static int __init hest_ghes_dev_register(unsigned int ghes_count)
|
||||||
{
|
{
|
||||||
int rc, i;
|
int rc, i;
|
||||||
struct ghes_arr ghes_arr;
|
struct ghes_arr ghes_arr;
|
||||||
|
@ -130,6 +130,8 @@ struct acpi_battery {
|
|||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int acpi_battery_update(struct acpi_battery *battery);
|
||||||
|
|
||||||
#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);
|
#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);
|
||||||
|
|
||||||
inline int acpi_battery_present(struct acpi_battery *battery)
|
inline int acpi_battery_present(struct acpi_battery *battery)
|
||||||
@ -184,6 +186,9 @@ static int acpi_battery_get_property(struct power_supply *psy,
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
struct acpi_battery *battery = to_acpi_battery(psy);
|
struct acpi_battery *battery = to_acpi_battery(psy);
|
||||||
|
|
||||||
|
if (acpi_battery_update(battery))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
if (acpi_battery_present(battery)) {
|
if (acpi_battery_present(battery)) {
|
||||||
/* run battery update only if it is present */
|
/* run battery update only if it is present */
|
||||||
acpi_battery_get_state(battery);
|
acpi_battery_get_state(battery);
|
||||||
|
@ -934,6 +934,9 @@ static struct dmi_system_id __initdata ec_dmi_table[] = {
|
|||||||
ec_flag_msi, "MSI hardware", {
|
ec_flag_msi, "MSI hardware", {
|
||||||
DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-Star")}, NULL},
|
DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-Star")}, NULL},
|
||||||
{
|
{
|
||||||
|
ec_flag_msi, "MSI hardware", {
|
||||||
|
DMI_MATCH(DMI_CHASSIS_VENDOR, "MICRO-STAR")}, NULL},
|
||||||
|
{
|
||||||
ec_validate_ecdt, "ASUS hardware", {
|
ec_validate_ecdt, "ASUS hardware", {
|
||||||
DMI_MATCH(DMI_BIOS_VENDOR, "ASUS") }, NULL},
|
DMI_MATCH(DMI_BIOS_VENDOR, "ASUS") }, NULL},
|
||||||
{},
|
{},
|
||||||
|
@ -110,9 +110,6 @@ struct acpi_ioremap {
|
|||||||
static LIST_HEAD(acpi_ioremaps);
|
static LIST_HEAD(acpi_ioremaps);
|
||||||
static DEFINE_SPINLOCK(acpi_ioremap_lock);
|
static DEFINE_SPINLOCK(acpi_ioremap_lock);
|
||||||
|
|
||||||
#define OSI_STRING_LENGTH_MAX 64 /* arbitrary */
|
|
||||||
static char osi_setup_string[OSI_STRING_LENGTH_MAX];
|
|
||||||
|
|
||||||
static void __init acpi_osi_setup_late(void);
|
static void __init acpi_osi_setup_late(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -152,8 +149,7 @@ static struct osi_linux {
|
|||||||
unsigned int enable:1;
|
unsigned int enable:1;
|
||||||
unsigned int dmi:1;
|
unsigned int dmi:1;
|
||||||
unsigned int cmdline:1;
|
unsigned int cmdline:1;
|
||||||
unsigned int known:1;
|
} osi_linux = {0, 0, 0};
|
||||||
} osi_linux = { 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static u32 acpi_osi_handler(acpi_string interface, u32 supported)
|
static u32 acpi_osi_handler(acpi_string interface, u32 supported)
|
||||||
{
|
{
|
||||||
@ -1055,13 +1051,53 @@ static int __init acpi_os_name_setup(char *str)
|
|||||||
|
|
||||||
__setup("acpi_os_name=", acpi_os_name_setup);
|
__setup("acpi_os_name=", acpi_os_name_setup);
|
||||||
|
|
||||||
|
#define OSI_STRING_LENGTH_MAX 64 /* arbitrary */
|
||||||
|
#define OSI_STRING_ENTRIES_MAX 16 /* arbitrary */
|
||||||
|
|
||||||
|
struct osi_setup_entry {
|
||||||
|
char string[OSI_STRING_LENGTH_MAX];
|
||||||
|
bool enable;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct osi_setup_entry __initdata osi_setup_entries[OSI_STRING_ENTRIES_MAX];
|
||||||
|
|
||||||
|
void __init acpi_osi_setup(char *str)
|
||||||
|
{
|
||||||
|
struct osi_setup_entry *osi;
|
||||||
|
bool enable = true;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!acpi_gbl_create_osi_method)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (str == NULL || *str == '\0') {
|
||||||
|
printk(KERN_INFO PREFIX "_OSI method disabled\n");
|
||||||
|
acpi_gbl_create_osi_method = FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*str == '!') {
|
||||||
|
str++;
|
||||||
|
enable = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
|
||||||
|
osi = &osi_setup_entries[i];
|
||||||
|
if (!strcmp(osi->string, str)) {
|
||||||
|
osi->enable = enable;
|
||||||
|
break;
|
||||||
|
} else if (osi->string[0] == '\0') {
|
||||||
|
osi->enable = enable;
|
||||||
|
strncpy(osi->string, str, OSI_STRING_LENGTH_MAX);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void __init set_osi_linux(unsigned int enable)
|
static void __init set_osi_linux(unsigned int enable)
|
||||||
{
|
{
|
||||||
if (osi_linux.enable != enable) {
|
if (osi_linux.enable != enable)
|
||||||
osi_linux.enable = enable;
|
osi_linux.enable = enable;
|
||||||
printk(KERN_NOTICE PREFIX "%sed _OSI(Linux)\n",
|
|
||||||
enable ? "Add": "Delet");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (osi_linux.enable)
|
if (osi_linux.enable)
|
||||||
acpi_osi_setup("Linux");
|
acpi_osi_setup("Linux");
|
||||||
@ -1073,7 +1109,8 @@ static void __init set_osi_linux(unsigned int enable)
|
|||||||
|
|
||||||
static void __init acpi_cmdline_osi_linux(unsigned int enable)
|
static void __init acpi_cmdline_osi_linux(unsigned int enable)
|
||||||
{
|
{
|
||||||
osi_linux.cmdline = 1; /* cmdline set the default */
|
osi_linux.cmdline = 1; /* cmdline set the default and override DMI */
|
||||||
|
osi_linux.dmi = 0;
|
||||||
set_osi_linux(enable);
|
set_osi_linux(enable);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -1081,15 +1118,12 @@ static void __init acpi_cmdline_osi_linux(unsigned int enable)
|
|||||||
|
|
||||||
void __init acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d)
|
void __init acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d)
|
||||||
{
|
{
|
||||||
osi_linux.dmi = 1; /* DMI knows that this box asks OSI(Linux) */
|
|
||||||
|
|
||||||
printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident);
|
printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident);
|
||||||
|
|
||||||
if (enable == -1)
|
if (enable == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
osi_linux.known = 1; /* DMI knows which OSI(Linux) default needed */
|
osi_linux.dmi = 1; /* DMI knows that this box asks OSI(Linux) */
|
||||||
|
|
||||||
set_osi_linux(enable);
|
set_osi_linux(enable);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -1104,37 +1138,44 @@ void __init acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d)
|
|||||||
*/
|
*/
|
||||||
static void __init acpi_osi_setup_late(void)
|
static void __init acpi_osi_setup_late(void)
|
||||||
{
|
{
|
||||||
char *str = osi_setup_string;
|
struct osi_setup_entry *osi;
|
||||||
|
char *str;
|
||||||
|
int i;
|
||||||
|
acpi_status status;
|
||||||
|
|
||||||
if (*str == '\0')
|
for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
|
||||||
return;
|
osi = &osi_setup_entries[i];
|
||||||
|
str = osi->string;
|
||||||
|
|
||||||
if (!strcmp("!Linux", str)) {
|
if (*str == '\0')
|
||||||
acpi_cmdline_osi_linux(0); /* !enable */
|
break;
|
||||||
} else if (*str == '!') {
|
if (osi->enable) {
|
||||||
if (acpi_remove_interface(++str) == AE_OK)
|
status = acpi_install_interface(str);
|
||||||
printk(KERN_INFO PREFIX "Deleted _OSI(%s)\n", str);
|
|
||||||
} else if (!strcmp("Linux", str)) {
|
if (ACPI_SUCCESS(status))
|
||||||
acpi_cmdline_osi_linux(1); /* enable */
|
printk(KERN_INFO PREFIX "Added _OSI(%s)\n", str);
|
||||||
} else {
|
} else {
|
||||||
if (acpi_install_interface(str) == AE_OK)
|
status = acpi_remove_interface(str);
|
||||||
printk(KERN_INFO PREFIX "Added _OSI(%s)\n", str);
|
|
||||||
|
if (ACPI_SUCCESS(status))
|
||||||
|
printk(KERN_INFO PREFIX "Deleted _OSI(%s)\n", str);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int __init acpi_osi_setup(char *str)
|
static int __init osi_setup(char *str)
|
||||||
{
|
{
|
||||||
if (str == NULL || *str == '\0') {
|
if (str && !strcmp("Linux", str))
|
||||||
printk(KERN_INFO PREFIX "_OSI method disabled\n");
|
acpi_cmdline_osi_linux(1);
|
||||||
acpi_gbl_create_osi_method = FALSE;
|
else if (str && !strcmp("!Linux", str))
|
||||||
} else {
|
acpi_cmdline_osi_linux(0);
|
||||||
strncpy(osi_setup_string, str, OSI_STRING_LENGTH_MAX);
|
else
|
||||||
}
|
acpi_osi_setup(str);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
__setup("acpi_osi=", acpi_osi_setup);
|
__setup("acpi_osi=", osi_setup);
|
||||||
|
|
||||||
/* enable serialization to combat AE_ALREADY_EXISTS errors */
|
/* enable serialization to combat AE_ALREADY_EXISTS errors */
|
||||||
static int __init acpi_serialize_setup(char *str)
|
static int __init acpi_serialize_setup(char *str)
|
||||||
@ -1530,7 +1571,7 @@ acpi_status __init acpi_os_initialize(void)
|
|||||||
return AE_OK;
|
return AE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
acpi_status acpi_os_initialize1(void)
|
acpi_status __init acpi_os_initialize1(void)
|
||||||
{
|
{
|
||||||
kacpid_wq = create_workqueue("kacpid");
|
kacpid_wq = create_workqueue("kacpid");
|
||||||
kacpi_notify_wq = create_workqueue("kacpi_notify");
|
kacpi_notify_wq = create_workqueue("kacpi_notify");
|
||||||
|
@ -213,11 +213,13 @@ static int acpi_power_on(acpi_handle handle)
|
|||||||
resource->name));
|
resource->name));
|
||||||
} else {
|
} else {
|
||||||
result = __acpi_power_on(resource);
|
result = __acpi_power_on(resource);
|
||||||
|
if (result)
|
||||||
|
resource->ref_count--;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&resource->resource_lock);
|
mutex_unlock(&resource->resource_lock);
|
||||||
|
|
||||||
return 0;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int acpi_power_off_device(acpi_handle handle)
|
static int acpi_power_off_device(acpi_handle handle)
|
||||||
@ -465,10 +467,12 @@ int acpi_power_transition(struct acpi_device *device, int state)
|
|||||||
struct acpi_handle_list *tl = NULL; /* Target Resources */
|
struct acpi_handle_list *tl = NULL; /* Target Resources */
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
|
|
||||||
if (!device || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3))
|
if (!device || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (device->power.state == state)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if ((device->power.state < ACPI_STATE_D0)
|
if ((device->power.state < ACPI_STATE_D0)
|
||||||
|| (device->power.state > ACPI_STATE_D3))
|
|| (device->power.state > ACPI_STATE_D3))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
@ -488,10 +492,6 @@ int acpi_power_transition(struct acpi_device *device, int state)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device->power.state == state) {
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Then we dereference all power resources used in the current list.
|
* Then we dereference all power resources used in the current list.
|
||||||
*/
|
*/
|
||||||
|
@ -156,15 +156,6 @@ static int cpufreq_set_cur_state(unsigned int cpu, int state)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int acpi_thermal_cpufreq_increase(unsigned int cpu)
|
|
||||||
{
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
static int acpi_thermal_cpufreq_decrease(unsigned int cpu)
|
|
||||||
{
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int acpi_processor_get_limit_info(struct acpi_processor *pr)
|
int acpi_processor_get_limit_info(struct acpi_processor *pr)
|
||||||
|
@ -27,8 +27,6 @@
|
|||||||
|
|
||||||
static u8 sleep_states[ACPI_S_STATE_COUNT];
|
static u8 sleep_states[ACPI_S_STATE_COUNT];
|
||||||
|
|
||||||
static u32 acpi_target_sleep_state = ACPI_STATE_S0;
|
|
||||||
|
|
||||||
static void acpi_sleep_tts_switch(u32 acpi_state)
|
static void acpi_sleep_tts_switch(u32 acpi_state)
|
||||||
{
|
{
|
||||||
union acpi_object in_arg = { ACPI_TYPE_INTEGER };
|
union acpi_object in_arg = { ACPI_TYPE_INTEGER };
|
||||||
@ -81,6 +79,8 @@ static int acpi_sleep_prepare(u32 acpi_state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI_SLEEP
|
#ifdef CONFIG_ACPI_SLEEP
|
||||||
|
static u32 acpi_target_sleep_state = ACPI_STATE_S0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The ACPI specification wants us to save NVS memory regions during hibernation
|
* The ACPI specification wants us to save NVS memory regions during hibernation
|
||||||
* and to restore them during the subsequent resume. Windows does that also for
|
* and to restore them during the subsequent resume. Windows does that also for
|
||||||
@ -427,6 +427,14 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
|
|||||||
DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1Z1E"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "VPCEB1Z1E"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.callback = init_nvs_nosave,
|
||||||
|
.ident = "Sony Vaio VGN-NW130D",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-NW130D"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_SUSPEND */
|
#endif /* CONFIG_SUSPEND */
|
||||||
|
@ -154,7 +154,7 @@ static int __init adummy_init(void)
|
|||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
atm_dev = atm_dev_register(DEV_LABEL, &adummy_ops, -1, NULL);
|
atm_dev = atm_dev_register(DEV_LABEL, NULL, &adummy_ops, -1, NULL);
|
||||||
if (!atm_dev) {
|
if (!atm_dev) {
|
||||||
printk(KERN_ERR DEV_LABEL ": atm_dev_register() failed\n");
|
printk(KERN_ERR DEV_LABEL ": atm_dev_register() failed\n");
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
|
@ -2244,7 +2244,8 @@ static int __devinit amb_probe(struct pci_dev *pci_dev, const struct pci_device_
|
|||||||
goto out_reset;
|
goto out_reset;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->atm_dev = atm_dev_register (DEV_LABEL, &amb_ops, -1, NULL);
|
dev->atm_dev = atm_dev_register (DEV_LABEL, &pci_dev->dev, &amb_ops, -1,
|
||||||
|
NULL);
|
||||||
if (!dev->atm_dev) {
|
if (!dev->atm_dev) {
|
||||||
PRINTD (DBG_ERR, "failed to register Madge ATM adapter");
|
PRINTD (DBG_ERR, "failed to register Madge ATM adapter");
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
|
@ -366,7 +366,7 @@ static int atmtcp_create(int itf,int persist,struct atm_dev **result)
|
|||||||
if (!dev_data)
|
if (!dev_data)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
dev = atm_dev_register(DEV_LABEL,&atmtcp_v_dev_ops,itf,NULL);
|
dev = atm_dev_register(DEV_LABEL,NULL,&atmtcp_v_dev_ops,itf,NULL);
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
kfree(dev_data);
|
kfree(dev_data);
|
||||||
return itf == -1 ? -ENOMEM : -EBUSY;
|
return itf == -1 ? -ENOMEM : -EBUSY;
|
||||||
|
@ -2244,7 +2244,7 @@ static int __devinit eni_init_one(struct pci_dev *pci_dev,
|
|||||||
&zeroes);
|
&zeroes);
|
||||||
if (!cpu_zeroes) goto out1;
|
if (!cpu_zeroes) goto out1;
|
||||||
}
|
}
|
||||||
dev = atm_dev_register(DEV_LABEL,&ops,-1,NULL);
|
dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &ops, -1, NULL);
|
||||||
if (!dev) goto out2;
|
if (!dev) goto out2;
|
||||||
pci_set_drvdata(pci_dev, dev);
|
pci_set_drvdata(pci_dev, dev);
|
||||||
eni_dev->pci_dev = pci_dev;
|
eni_dev->pci_dev = pci_dev;
|
||||||
|
@ -1911,7 +1911,7 @@ static int __devinit firestream_init_one (struct pci_dev *pci_dev,
|
|||||||
fs_dev, sizeof (struct fs_dev));
|
fs_dev, sizeof (struct fs_dev));
|
||||||
if (!fs_dev)
|
if (!fs_dev)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
atm_dev = atm_dev_register("fs", &ops, -1, NULL);
|
atm_dev = atm_dev_register("fs", &pci_dev->dev, &ops, -1, NULL);
|
||||||
if (!atm_dev)
|
if (!atm_dev)
|
||||||
goto err_out_free_fs_dev;
|
goto err_out_free_fs_dev;
|
||||||
|
|
||||||
|
@ -2567,14 +2567,14 @@ release:
|
|||||||
|
|
||||||
|
|
||||||
static int __devinit
|
static int __devinit
|
||||||
fore200e_register(struct fore200e* fore200e)
|
fore200e_register(struct fore200e* fore200e, struct device *parent)
|
||||||
{
|
{
|
||||||
struct atm_dev* atm_dev;
|
struct atm_dev* atm_dev;
|
||||||
|
|
||||||
DPRINTK(2, "device %s being registered\n", fore200e->name);
|
DPRINTK(2, "device %s being registered\n", fore200e->name);
|
||||||
|
|
||||||
atm_dev = atm_dev_register(fore200e->bus->proc_name, &fore200e_ops, -1,
|
atm_dev = atm_dev_register(fore200e->bus->proc_name, parent, &fore200e_ops,
|
||||||
NULL);
|
-1, NULL);
|
||||||
if (atm_dev == NULL) {
|
if (atm_dev == NULL) {
|
||||||
printk(FORE200E "unable to register device %s\n", fore200e->name);
|
printk(FORE200E "unable to register device %s\n", fore200e->name);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
@ -2594,9 +2594,9 @@ fore200e_register(struct fore200e* fore200e)
|
|||||||
|
|
||||||
|
|
||||||
static int __devinit
|
static int __devinit
|
||||||
fore200e_init(struct fore200e* fore200e)
|
fore200e_init(struct fore200e* fore200e, struct device *parent)
|
||||||
{
|
{
|
||||||
if (fore200e_register(fore200e) < 0)
|
if (fore200e_register(fore200e, parent) < 0)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (fore200e->bus->configure(fore200e) < 0)
|
if (fore200e->bus->configure(fore200e) < 0)
|
||||||
@ -2662,7 +2662,7 @@ static int __devinit fore200e_sba_probe(struct platform_device *op,
|
|||||||
|
|
||||||
sprintf(fore200e->name, "%s-%d", bus->model_name, index);
|
sprintf(fore200e->name, "%s-%d", bus->model_name, index);
|
||||||
|
|
||||||
err = fore200e_init(fore200e);
|
err = fore200e_init(fore200e, &op->dev);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
fore200e_shutdown(fore200e);
|
fore200e_shutdown(fore200e);
|
||||||
kfree(fore200e);
|
kfree(fore200e);
|
||||||
@ -2740,7 +2740,7 @@ fore200e_pca_detect(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent
|
|||||||
|
|
||||||
sprintf(fore200e->name, "%s-%d", bus->model_name, index);
|
sprintf(fore200e->name, "%s-%d", bus->model_name, index);
|
||||||
|
|
||||||
err = fore200e_init(fore200e);
|
err = fore200e_init(fore200e, &pci_dev->dev);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
fore200e_shutdown(fore200e);
|
fore200e_shutdown(fore200e);
|
||||||
goto out_free;
|
goto out_free;
|
||||||
|
@ -366,7 +366,7 @@ he_init_one(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent)
|
|||||||
goto init_one_failure;
|
goto init_one_failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
atm_dev = atm_dev_register(DEV_LABEL, &he_ops, -1, NULL);
|
atm_dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &he_ops, -1, NULL);
|
||||||
if (!atm_dev) {
|
if (!atm_dev) {
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto init_one_failure;
|
goto init_one_failure;
|
||||||
|
@ -2733,7 +2733,8 @@ static int __devinit hrz_probe(struct pci_dev *pci_dev, const struct pci_device_
|
|||||||
PRINTD(DBG_INFO, "found Madge ATM adapter (hrz) at: IO %x, IRQ %u, MEM %p",
|
PRINTD(DBG_INFO, "found Madge ATM adapter (hrz) at: IO %x, IRQ %u, MEM %p",
|
||||||
iobase, irq, membase);
|
iobase, irq, membase);
|
||||||
|
|
||||||
dev->atm_dev = atm_dev_register(DEV_LABEL, &hrz_ops, -1, NULL);
|
dev->atm_dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &hrz_ops, -1,
|
||||||
|
NULL);
|
||||||
if (!(dev->atm_dev)) {
|
if (!(dev->atm_dev)) {
|
||||||
PRINTD(DBG_ERR, "failed to register Madge ATM adapter");
|
PRINTD(DBG_ERR, "failed to register Madge ATM adapter");
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
|
@ -3698,7 +3698,8 @@ idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)
|
|||||||
goto err_out_iounmap;
|
goto err_out_iounmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = atm_dev_register("idt77252", &idt77252_ops, -1, NULL);
|
dev = atm_dev_register("idt77252", &pcidev->dev, &idt77252_ops, -1,
|
||||||
|
NULL);
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
printk("%s: can't register atm device\n", card->name);
|
printk("%s: can't register atm device\n", card->name);
|
||||||
err = -EIO;
|
err = -EIO;
|
||||||
|
@ -3172,7 +3172,7 @@ static int __devinit ia_init_one(struct pci_dev *pdev,
|
|||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto err_out_free_iadev;
|
goto err_out_free_iadev;
|
||||||
}
|
}
|
||||||
dev = atm_dev_register(DEV_LABEL, &ops, -1, NULL);
|
dev = atm_dev_register(DEV_LABEL, &pdev->dev, &ops, -1, NULL);
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err_out_disable_dev;
|
goto err_out_disable_dev;
|
||||||
|
@ -2591,7 +2591,7 @@ static int __devinit lanai_init_one(struct pci_dev *pci,
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
atmdev = atm_dev_register(DEV_LABEL, &ops, -1, NULL);
|
atmdev = atm_dev_register(DEV_LABEL, &pci->dev, &ops, -1, NULL);
|
||||||
if (atmdev == NULL) {
|
if (atmdev == NULL) {
|
||||||
printk(KERN_ERR DEV_LABEL
|
printk(KERN_ERR DEV_LABEL
|
||||||
": couldn't register atm device!\n");
|
": couldn't register atm device!\n");
|
||||||
|
@ -771,7 +771,8 @@ static int __devinit ns_init_card(int i, struct pci_dev *pcidev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Register device */
|
/* Register device */
|
||||||
card->atmdev = atm_dev_register("nicstar", &atm_ops, -1, NULL);
|
card->atmdev = atm_dev_register("nicstar", &card->pcidev->dev, &atm_ops,
|
||||||
|
-1, NULL);
|
||||||
if (card->atmdev == NULL) {
|
if (card->atmdev == NULL) {
|
||||||
printk("nicstar%d: can't register device.\n", i);
|
printk("nicstar%d: can't register device.\n", i);
|
||||||
error = 17;
|
error = 17;
|
||||||
|
@ -166,7 +166,7 @@ static irqreturn_t solos_irq(int irq, void *dev_id);
|
|||||||
static struct atm_vcc* find_vcc(struct atm_dev *dev, short vpi, int vci);
|
static struct atm_vcc* find_vcc(struct atm_dev *dev, short vpi, int vci);
|
||||||
static int list_vccs(int vci);
|
static int list_vccs(int vci);
|
||||||
static void release_vccs(struct atm_dev *dev);
|
static void release_vccs(struct atm_dev *dev);
|
||||||
static int atm_init(struct solos_card *);
|
static int atm_init(struct solos_card *, struct device *);
|
||||||
static void atm_remove(struct solos_card *);
|
static void atm_remove(struct solos_card *);
|
||||||
static int send_command(struct solos_card *card, int dev, const char *buf, size_t size);
|
static int send_command(struct solos_card *card, int dev, const char *buf, size_t size);
|
||||||
static void solos_bh(unsigned long);
|
static void solos_bh(unsigned long);
|
||||||
@ -1210,7 +1210,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|||||||
if (db_firmware_upgrade)
|
if (db_firmware_upgrade)
|
||||||
flash_upgrade(card, 3);
|
flash_upgrade(card, 3);
|
||||||
|
|
||||||
err = atm_init(card);
|
err = atm_init(card, &dev->dev);
|
||||||
if (err)
|
if (err)
|
||||||
goto out_free_irq;
|
goto out_free_irq;
|
||||||
|
|
||||||
@ -1233,7 +1233,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int atm_init(struct solos_card *card)
|
static int atm_init(struct solos_card *card, struct device *parent)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1244,7 +1244,7 @@ static int atm_init(struct solos_card *card)
|
|||||||
skb_queue_head_init(&card->tx_queue[i]);
|
skb_queue_head_init(&card->tx_queue[i]);
|
||||||
skb_queue_head_init(&card->cli_queue[i]);
|
skb_queue_head_init(&card->cli_queue[i]);
|
||||||
|
|
||||||
card->atmdev[i] = atm_dev_register("solos-pci", &fpga_ops, -1, NULL);
|
card->atmdev[i] = atm_dev_register("solos-pci", parent, &fpga_ops, -1, NULL);
|
||||||
if (!card->atmdev[i]) {
|
if (!card->atmdev[i]) {
|
||||||
dev_err(&card->dev->dev, "Could not register ATM device %d\n", i);
|
dev_err(&card->dev->dev, "Could not register ATM device %d\n", i);
|
||||||
atm_remove(card);
|
atm_remove(card);
|
||||||
|
@ -1597,7 +1597,7 @@ static int __devinit zatm_init_one(struct pci_dev *pci_dev,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = atm_dev_register(DEV_LABEL, &ops, -1, NULL);
|
dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &ops, -1, NULL);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
goto out_free;
|
goto out_free;
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ struct blk_shadow {
|
|||||||
static DEFINE_MUTEX(blkfront_mutex);
|
static DEFINE_MUTEX(blkfront_mutex);
|
||||||
static const struct block_device_operations xlvbd_block_fops;
|
static const struct block_device_operations xlvbd_block_fops;
|
||||||
|
|
||||||
#define BLK_RING_SIZE __RING_SIZE((struct blkif_sring *)0, PAGE_SIZE)
|
#define BLK_RING_SIZE __CONST_RING_SIZE(blkif, PAGE_SIZE)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We have one of these per vbd, whether ide, scsi or 'other'. They
|
* We have one of these per vbd, whether ide, scsi or 'other'. They
|
||||||
|
@ -35,6 +35,10 @@
|
|||||||
static struct usb_device_id ath3k_table[] = {
|
static struct usb_device_id ath3k_table[] = {
|
||||||
/* Atheros AR3011 */
|
/* Atheros AR3011 */
|
||||||
{ USB_DEVICE(0x0CF3, 0x3000) },
|
{ USB_DEVICE(0x0CF3, 0x3000) },
|
||||||
|
|
||||||
|
/* Atheros AR3011 with sflash firmware*/
|
||||||
|
{ USB_DEVICE(0x0CF3, 0x3002) },
|
||||||
|
|
||||||
{ } /* Terminating entry */
|
{ } /* Terminating entry */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -99,6 +99,9 @@ static struct usb_device_id blacklist_table[] = {
|
|||||||
/* Broadcom BCM2033 without firmware */
|
/* Broadcom BCM2033 without firmware */
|
||||||
{ USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE },
|
{ USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE },
|
||||||
|
|
||||||
|
/* Atheros 3011 with sflash firmware */
|
||||||
|
{ USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },
|
||||||
|
|
||||||
/* Broadcom BCM2035 */
|
/* Broadcom BCM2035 */
|
||||||
{ USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
|
{ USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
|
||||||
{ USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
|
{ USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
|
||||||
@ -239,7 +242,8 @@ static void btusb_intr_complete(struct urb *urb)
|
|||||||
|
|
||||||
err = usb_submit_urb(urb, GFP_ATOMIC);
|
err = usb_submit_urb(urb, GFP_ATOMIC);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
BT_ERR("%s urb %p failed to resubmit (%d)",
|
if (err != -EPERM)
|
||||||
|
BT_ERR("%s urb %p failed to resubmit (%d)",
|
||||||
hdev->name, urb, -err);
|
hdev->name, urb, -err);
|
||||||
usb_unanchor_urb(urb);
|
usb_unanchor_urb(urb);
|
||||||
}
|
}
|
||||||
@ -323,7 +327,8 @@ static void btusb_bulk_complete(struct urb *urb)
|
|||||||
|
|
||||||
err = usb_submit_urb(urb, GFP_ATOMIC);
|
err = usb_submit_urb(urb, GFP_ATOMIC);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
BT_ERR("%s urb %p failed to resubmit (%d)",
|
if (err != -EPERM)
|
||||||
|
BT_ERR("%s urb %p failed to resubmit (%d)",
|
||||||
hdev->name, urb, -err);
|
hdev->name, urb, -err);
|
||||||
usb_unanchor_urb(urb);
|
usb_unanchor_urb(urb);
|
||||||
}
|
}
|
||||||
@ -412,7 +417,8 @@ static void btusb_isoc_complete(struct urb *urb)
|
|||||||
|
|
||||||
err = usb_submit_urb(urb, GFP_ATOMIC);
|
err = usb_submit_urb(urb, GFP_ATOMIC);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
BT_ERR("%s urb %p failed to resubmit (%d)",
|
if (err != -EPERM)
|
||||||
|
BT_ERR("%s urb %p failed to resubmit (%d)",
|
||||||
hdev->name, urb, -err);
|
hdev->name, urb, -err);
|
||||||
usb_unanchor_urb(urb);
|
usb_unanchor_urb(urb);
|
||||||
}
|
}
|
||||||
|
@ -812,8 +812,10 @@ static int intel_fake_agp_fetch_size(void)
|
|||||||
|
|
||||||
static void i830_cleanup(void)
|
static void i830_cleanup(void)
|
||||||
{
|
{
|
||||||
kunmap(intel_private.i8xx_page);
|
if (intel_private.i8xx_flush_page) {
|
||||||
intel_private.i8xx_flush_page = NULL;
|
kunmap(intel_private.i8xx_flush_page);
|
||||||
|
intel_private.i8xx_flush_page = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
__free_page(intel_private.i8xx_page);
|
__free_page(intel_private.i8xx_page);
|
||||||
intel_private.i8xx_page = NULL;
|
intel_private.i8xx_page = NULL;
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");
|
MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");
|
||||||
MODULE_DESCRIPTION("Generic userspace <-> kernelspace connector.");
|
MODULE_DESCRIPTION("Generic userspace <-> kernelspace connector.");
|
||||||
|
MODULE_ALIAS_NET_PF_PROTO(PF_NETLINK, NETLINK_CONNECTOR);
|
||||||
|
|
||||||
static struct cn_dev cdev;
|
static struct cn_dev cdev;
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
ifeq ($(CONFIG_DMADEVICES_DEBUG),y)
|
ifeq ($(CONFIG_DMADEVICES_DEBUG),y)
|
||||||
EXTRA_CFLAGS += -DDEBUG
|
ccflags-y += -DDEBUG
|
||||||
endif
|
endif
|
||||||
ifeq ($(CONFIG_DMADEVICES_VDEBUG),y)
|
ifeq ($(CONFIG_DMADEVICES_VDEBUG),y)
|
||||||
EXTRA_CFLAGS += -DVERBOSE_DEBUG
|
ccflags-y += -DVERBOSE_DEBUG
|
||||||
endif
|
endif
|
||||||
|
|
||||||
obj-$(CONFIG_DMA_ENGINE) += dmaengine.o
|
obj-$(CONFIG_DMA_ENGINE) += dmaengine.o
|
||||||
|
@ -722,7 +722,7 @@ atc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
|
|||||||
desc->lli.daddr = mem;
|
desc->lli.daddr = mem;
|
||||||
desc->lli.ctrla = ctrla
|
desc->lli.ctrla = ctrla
|
||||||
| ATC_DST_WIDTH(mem_width)
|
| ATC_DST_WIDTH(mem_width)
|
||||||
| len >> mem_width;
|
| len >> reg_width;
|
||||||
desc->lli.ctrlb = ctrlb;
|
desc->lli.ctrlb = ctrlb;
|
||||||
|
|
||||||
if (!first) {
|
if (!first) {
|
||||||
|
@ -50,9 +50,11 @@ static void dma_init(struct fsldma_chan *chan)
|
|||||||
* EIE - Error interrupt enable
|
* EIE - Error interrupt enable
|
||||||
* EOSIE - End of segments interrupt enable (basic mode)
|
* EOSIE - End of segments interrupt enable (basic mode)
|
||||||
* EOLNIE - End of links interrupt enable
|
* EOLNIE - End of links interrupt enable
|
||||||
|
* BWC - Bandwidth sharing among channels
|
||||||
*/
|
*/
|
||||||
DMA_OUT(chan, &chan->regs->mr, FSL_DMA_MR_EIE
|
DMA_OUT(chan, &chan->regs->mr, FSL_DMA_MR_BWC
|
||||||
| FSL_DMA_MR_EOLNIE | FSL_DMA_MR_EOSIE, 32);
|
| FSL_DMA_MR_EIE | FSL_DMA_MR_EOLNIE
|
||||||
|
| FSL_DMA_MR_EOSIE, 32);
|
||||||
break;
|
break;
|
||||||
case FSL_DMA_IP_83XX:
|
case FSL_DMA_IP_83XX:
|
||||||
/* Set the channel to below modes:
|
/* Set the channel to below modes:
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved.
|
* Copyright (C) 2007-2010 Freescale Semiconductor, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* Author:
|
* Author:
|
||||||
* Zhang Wei <wei.zhang@freescale.com>, Jul 2007
|
* Zhang Wei <wei.zhang@freescale.com>, Jul 2007
|
||||||
@ -36,6 +36,13 @@
|
|||||||
#define FSL_DMA_MR_DAHE 0x00002000
|
#define FSL_DMA_MR_DAHE 0x00002000
|
||||||
#define FSL_DMA_MR_SAHE 0x00001000
|
#define FSL_DMA_MR_SAHE 0x00001000
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bandwidth/pause control determines how many bytes a given
|
||||||
|
* channel is allowed to transfer before the DMA engine pauses
|
||||||
|
* the current channel and switches to the next channel
|
||||||
|
*/
|
||||||
|
#define FSL_DMA_MR_BWC 0x08000000
|
||||||
|
|
||||||
/* Special MR definition for MPC8349 */
|
/* Special MR definition for MPC8349 */
|
||||||
#define FSL_DMA_MR_EOTIE 0x00000080
|
#define FSL_DMA_MR_EOTIE 0x00000080
|
||||||
#define FSL_DMA_MR_PRC_RM 0x00000800
|
#define FSL_DMA_MR_PRC_RM 0x00000800
|
||||||
|
@ -379,7 +379,7 @@ static int __init imxdma_probe(struct platform_device *pdev)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_init:
|
err_init:
|
||||||
while (i-- >= 0) {
|
while (--i >= 0) {
|
||||||
struct imxdma_channel *imxdmac = &imxdma->channel[i];
|
struct imxdma_channel *imxdmac = &imxdma->channel[i];
|
||||||
imx_dma_free(imxdmac->imxdma_channel);
|
imx_dma_free(imxdmac->imxdma_channel);
|
||||||
}
|
}
|
||||||
|
@ -951,7 +951,7 @@ static struct dma_async_tx_descriptor *sdma_prep_slave_sg(
|
|||||||
struct sdma_buffer_descriptor *bd = &sdmac->bd[i];
|
struct sdma_buffer_descriptor *bd = &sdmac->bd[i];
|
||||||
int param;
|
int param;
|
||||||
|
|
||||||
bd->buffer_addr = sgl->dma_address;
|
bd->buffer_addr = sg->dma_address;
|
||||||
|
|
||||||
count = sg->length;
|
count = sg->length;
|
||||||
|
|
||||||
@ -1385,7 +1385,7 @@ static int __init sdma_module_init(void)
|
|||||||
{
|
{
|
||||||
return platform_driver_probe(&sdma_driver, sdma_probe);
|
return platform_driver_probe(&sdma_driver, sdma_probe);
|
||||||
}
|
}
|
||||||
subsys_initcall(sdma_module_init);
|
module_init(sdma_module_init);
|
||||||
|
|
||||||
MODULE_AUTHOR("Sascha Hauer, Pengutronix <s.hauer@pengutronix.de>");
|
MODULE_AUTHOR("Sascha Hauer, Pengutronix <s.hauer@pengutronix.de>");
|
||||||
MODULE_DESCRIPTION("i.MX SDMA driver");
|
MODULE_DESCRIPTION("i.MX SDMA driver");
|
||||||
|
@ -1075,7 +1075,6 @@ static int mid_setup_dma(struct pci_dev *pdev)
|
|||||||
if (NULL == dma->dma_pool) {
|
if (NULL == dma->dma_pool) {
|
||||||
pr_err("ERR_MDMA:pci_pool_create failed\n");
|
pr_err("ERR_MDMA:pci_pool_create failed\n");
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
kfree(dma);
|
|
||||||
goto err_dma_pool;
|
goto err_dma_pool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1186,7 +1185,6 @@ err_engine:
|
|||||||
free_irq(pdev->irq, dma);
|
free_irq(pdev->irq, dma);
|
||||||
err_irq:
|
err_irq:
|
||||||
pci_pool_destroy(dma->dma_pool);
|
pci_pool_destroy(dma->dma_pool);
|
||||||
kfree(dma);
|
|
||||||
err_dma_pool:
|
err_dma_pool:
|
||||||
pr_err("ERR_MDMA:setup_dma failed: %d\n", err);
|
pr_err("ERR_MDMA:setup_dma failed: %d\n", err);
|
||||||
return err;
|
return err;
|
||||||
@ -1413,7 +1411,7 @@ static const struct dev_pm_ops intel_mid_dma_pm = {
|
|||||||
.runtime_idle = dma_runtime_idle,
|
.runtime_idle = dma_runtime_idle,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pci_driver intel_mid_dma_pci = {
|
static struct pci_driver intel_mid_dma_pci_driver = {
|
||||||
.name = "Intel MID DMA",
|
.name = "Intel MID DMA",
|
||||||
.id_table = intel_mid_dma_ids,
|
.id_table = intel_mid_dma_ids,
|
||||||
.probe = intel_mid_dma_probe,
|
.probe = intel_mid_dma_probe,
|
||||||
@ -1431,13 +1429,13 @@ static int __init intel_mid_dma_init(void)
|
|||||||
{
|
{
|
||||||
pr_debug("INFO_MDMA: LNW DMA Driver Version %s\n",
|
pr_debug("INFO_MDMA: LNW DMA Driver Version %s\n",
|
||||||
INTEL_MID_DMA_DRIVER_VERSION);
|
INTEL_MID_DMA_DRIVER_VERSION);
|
||||||
return pci_register_driver(&intel_mid_dma_pci);
|
return pci_register_driver(&intel_mid_dma_pci_driver);
|
||||||
}
|
}
|
||||||
fs_initcall(intel_mid_dma_init);
|
fs_initcall(intel_mid_dma_init);
|
||||||
|
|
||||||
static void __exit intel_mid_dma_exit(void)
|
static void __exit intel_mid_dma_exit(void)
|
||||||
{
|
{
|
||||||
pci_unregister_driver(&intel_mid_dma_pci);
|
pci_unregister_driver(&intel_mid_dma_pci_driver);
|
||||||
}
|
}
|
||||||
module_exit(intel_mid_dma_exit);
|
module_exit(intel_mid_dma_exit);
|
||||||
|
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
obj-$(CONFIG_INTEL_IOATDMA) += ioatdma.o
|
obj-$(CONFIG_INTEL_IOATDMA) += ioatdma.o
|
||||||
ioatdma-objs := pci.o dma.o dma_v2.o dma_v3.o dca.o
|
ioatdma-y := pci.o dma.o dma_v2.o dma_v3.o dca.o
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user