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
|
||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||
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.
|
||||
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);
|
||||
int (*invalidatepage) (struct page *, unsigned long);
|
||||
int (*releasepage) (struct page *, int);
|
||||
void (*freepage)(struct page *);
|
||||
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
||||
loff_t offset, unsigned long nr_segs);
|
||||
int (*launder_page) (struct page *);
|
||||
|
||||
locking rules:
|
||||
All except set_page_dirty may block
|
||||
All except set_page_dirty and freepage may block
|
||||
|
||||
BKL PageLocked(page) i_mutex
|
||||
writepage: no yes, unlocks (see below)
|
||||
@ -193,6 +194,7 @@ perform_write: no n/a yes
|
||||
bmap: no
|
||||
invalidatepage: no yes
|
||||
releasepage: no yes
|
||||
freepage: no yes
|
||||
direct_IO: no
|
||||
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,
|
||||
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
|
||||
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
|
||||
|
@ -534,6 +534,7 @@ struct address_space_operations {
|
||||
sector_t (*bmap)(struct address_space *, sector_t);
|
||||
int (*invalidatepage) (struct page *, unsigned long);
|
||||
int (*releasepage) (struct page *, int);
|
||||
void (*freepage)(struct page *);
|
||||
ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
|
||||
loff_t offset, unsigned long nr_segs);
|
||||
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
|
||||
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 - that is IO requests which bypass the page cache
|
||||
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
|
||||
|
||||
ARM/BCMRING ARM ARCHITECTURE
|
||||
M: Leo Chen <leochen@broadcom.com>
|
||||
M: Jiandong Zheng <jdzheng@broadcom.com>
|
||||
M: Scott Branden <sbranden@broadcom.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: arch/arm/mach-bcmring
|
||||
|
||||
ARM/BCMRING MTD NAND DRIVER
|
||||
M: Leo Chen <leochen@broadcom.com>
|
||||
M: Jiandong Zheng <jdzheng@broadcom.com>
|
||||
M: Scott Branden <sbranden@broadcom.com>
|
||||
L: linux-mtd@lists.infradead.org
|
||||
S: Maintained
|
||||
@ -815,7 +815,7 @@ F: drivers/mmc/host/msm_sdcc.c
|
||||
F: drivers/mmc/host/msm_sdcc.h
|
||||
F: drivers/serial/msm_serial.h
|
||||
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
|
||||
|
||||
ARM/TOSA MACHINE SUPPORT
|
||||
@ -5932,7 +5932,6 @@ F: include/linux/tty.h
|
||||
|
||||
TULIP NETWORK DRIVERS
|
||||
M: Grant Grundler <grundler@parisc-linux.org>
|
||||
M: Kyle McMartin <kyle@mcmartin.ca>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/tulip/
|
||||
@ -6584,6 +6583,15 @@ F: include/linux/mfd/wm8400*
|
||||
F: include/sound/wm????.h
|
||||
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
|
||||
M: Andrew Hendry <andrew.hendry@gmail.com>
|
||||
L: linux-x25@vger.kernel.org
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 37
|
||||
EXTRAVERSION = -rc5
|
||||
EXTRAVERSION = -rc6
|
||||
NAME = Flesh-Eating Bats with Fangs
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -1311,7 +1311,7 @@ config HZ
|
||||
|
||||
config THUMB2_KERNEL
|
||||
bool "Compile the kernel in Thumb-2 mode"
|
||||
depends on CPU_V7 && EXPERIMENTAL
|
||||
depends on CPU_V7 && !CPU_V6 && EXPERIMENTAL
|
||||
select AEABI
|
||||
select ARM_ASM_UNIFIED
|
||||
help
|
||||
@ -1759,7 +1759,7 @@ comment "At least one emulation must be selected"
|
||||
|
||||
config FPE_NWFPE
|
||||
bool "NWFPE math emulation"
|
||||
depends on !AEABI || OABI_COMPAT
|
||||
depends on (!AEABI || OABI_COMPAT) && !THUMB2_KERNEL
|
||||
---help---
|
||||
Say Y to include the NWFPE floating point emulator in the kernel.
|
||||
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(twsi5, MMP2_TWSI5, 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);
|
||||
|
||||
|
@ -220,6 +220,12 @@ config MACH_NOKIA_N8X0
|
||||
select MACH_NOKIA_N810
|
||||
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
|
||||
bool "Nokia RX-51 board"
|
||||
depends on ARCH_OMAP3
|
||||
|
@ -140,8 +140,11 @@ obj-$(CONFIG_MACH_OMAP_3430SDP) += board-3430sdp.o \
|
||||
hsmmc.o \
|
||||
board-flash.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 \
|
||||
board-rx51-sdram.o \
|
||||
sdram-nokia.o \
|
||||
board-rx51-peripherals.o \
|
||||
board-rx51-video.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 "pm.h"
|
||||
#include "sdram-nokia.h"
|
||||
|
||||
#define RX51_GPIO_SLEEP_IND 162
|
||||
|
||||
struct omap_sdrc_params *rx51_get_sdram_timings(void);
|
||||
extern void rx51_video_mem_init(void);
|
||||
|
||||
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_size = ARRAY_SIZE(rx51_config);
|
||||
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);
|
||||
omap_init_irq();
|
||||
}
|
||||
|
@ -216,7 +216,7 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
|
||||
{
|
||||
.name = "wl1271",
|
||||
.mmc = 3,
|
||||
.caps = MMC_CAP_4_BIT_DATA,
|
||||
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
|
||||
.gpio_wp = -EINVAL,
|
||||
.gpio_cd = -EINVAL,
|
||||
.nonremovable = true,
|
||||
|
@ -298,7 +298,7 @@ static int __init _omap2_init_reprogram_sdrc(void)
|
||||
return 0;
|
||||
|
||||
dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck");
|
||||
if (!dpll3_m2_ck)
|
||||
if (IS_ERR(dpll3_m2_ck))
|
||||
return -EINVAL;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/seq_file.h>
|
||||
@ -354,23 +371,6 @@ void pm_dbg_update_time(struct powerdomain *pwrdm, int prev)
|
||||
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)
|
||||
{
|
||||
struct seq_file *s = (struct seq_file *)user;
|
||||
|
@ -53,6 +53,19 @@
|
||||
#include <plat/powerdomain.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_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl,
|
||||
void __iomem *sdrc_power);
|
||||
@ -120,8 +133,9 @@ static void omap2_enter_full_retention(void)
|
||||
goto no_sleep;
|
||||
|
||||
/* Block console output in case it is on one of the OMAP UARTs */
|
||||
if (try_acquire_console_sem())
|
||||
goto no_sleep;
|
||||
if (!is_suspending())
|
||||
if (try_acquire_console_sem())
|
||||
goto no_sleep;
|
||||
|
||||
omap_uart_prepare_idle(0);
|
||||
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(0);
|
||||
|
||||
release_console_sem();
|
||||
if (!is_suspending())
|
||||
release_console_sem();
|
||||
|
||||
no_sleep:
|
||||
if (omap2_pm_debug) {
|
||||
@ -284,6 +299,12 @@ static void omap2_pm_idle(void)
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
static int omap2_pm_begin(suspend_state_t state)
|
||||
{
|
||||
suspend_state = state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap2_pm_prepare(void)
|
||||
{
|
||||
/* We cannot sleep in idle until we have resumed */
|
||||
@ -333,10 +354,17 @@ static void omap2_pm_finish(void)
|
||||
enable_hlt();
|
||||
}
|
||||
|
||||
static void omap2_pm_end(void)
|
||||
{
|
||||
suspend_state = PM_SUSPEND_ON;
|
||||
}
|
||||
|
||||
static struct platform_suspend_ops omap_pm_ops = {
|
||||
.begin = omap2_pm_begin,
|
||||
.prepare = omap2_pm_prepare,
|
||||
.enter = omap2_pm_enter,
|
||||
.finish = omap2_pm_finish,
|
||||
.end = omap2_pm_end,
|
||||
.valid = suspend_valid_only_mem,
|
||||
};
|
||||
|
||||
|
@ -50,6 +50,19 @@
|
||||
#include "sdrc.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 */
|
||||
#define OMAP343X_TABLE_ADDRESS_OFFSET 0xc4
|
||||
#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 */
|
||||
if (per_next_state < PWRDM_POWER_ON ||
|
||||
core_next_state < PWRDM_POWER_ON)
|
||||
if (try_acquire_console_sem())
|
||||
goto console_still_active;
|
||||
if (!is_suspending())
|
||||
if (per_next_state < PWRDM_POWER_ON ||
|
||||
core_next_state < PWRDM_POWER_ON)
|
||||
if (try_acquire_console_sem())
|
||||
goto console_still_active;
|
||||
|
||||
/* PER */
|
||||
if (per_next_state < PWRDM_POWER_ON) {
|
||||
@ -470,7 +484,8 @@ void omap_sram_idle(void)
|
||||
omap_uart_resume_idle(3);
|
||||
}
|
||||
|
||||
release_console_sem();
|
||||
if (!is_suspending())
|
||||
release_console_sem();
|
||||
|
||||
console_still_active:
|
||||
/* Disable IO-PAD and IO-CHAIN wakeup */
|
||||
@ -514,8 +529,6 @@ static void omap3_pm_idle(void)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SUSPEND
|
||||
static suspend_state_t suspend_state;
|
||||
|
||||
static int omap3_pm_prepare(void)
|
||||
{
|
||||
disable_hlt();
|
||||
|
@ -243,13 +243,14 @@
|
||||
#define OMAP24XX_EN_GPT1_MASK (1 << 0)
|
||||
|
||||
/* PM_WKST_WKUP, CM_IDLEST_WKUP shared bits */
|
||||
#define OMAP24XX_ST_GPIOS_SHIFT (1 << 2)
|
||||
#define OMAP24XX_ST_GPIOS_MASK 2
|
||||
#define OMAP24XX_ST_GPT1_SHIFT (1 << 0)
|
||||
#define OMAP24XX_ST_GPT1_MASK 0
|
||||
#define OMAP24XX_ST_GPIOS_SHIFT 2
|
||||
#define OMAP24XX_ST_GPIOS_MASK (1 << 2)
|
||||
#define OMAP24XX_ST_GPT1_SHIFT 0
|
||||
#define OMAP24XX_ST_GPT1_MASK (1 << 0)
|
||||
|
||||
/* 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 */
|
||||
|
@ -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>
|
||||
*
|
||||
@ -22,6 +22,7 @@
|
||||
#include <plat/clock.h>
|
||||
#include <plat/sdrc.h>
|
||||
|
||||
#include "sdram-nokia.h"
|
||||
|
||||
/* In picoseconds, except for tREF (ns), tXP, tCKE, tWTR (clks) */
|
||||
struct sdram_timings {
|
||||
@ -43,9 +44,28 @@ struct sdram_timings {
|
||||
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,
|
||||
.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)
|
||||
{
|
||||
/* In picoseconds */
|
||||
@ -110,12 +162,12 @@ static int set_sdrc_timing_regval(u32 *regval, int st_bit, int end_bit,
|
||||
#ifdef DEBUG
|
||||
#define SDRC_SET_ONE(reg, st, end, field, rate) \
|
||||
if (set_sdrc_timing_regval((reg), (st), (end), \
|
||||
rx51_timings->field, (rate), #field) < 0) \
|
||||
memory_timings->field, (rate), #field) < 0) \
|
||||
err = -1;
|
||||
#else
|
||||
#define SDRC_SET_ONE(reg, st, end, field, rate) \
|
||||
if (set_sdrc_timing_regval((reg), (st), (end), \
|
||||
rx51_timings->field) < 0) \
|
||||
memory_timings->field) < 0) \
|
||||
err = -1;
|
||||
#endif
|
||||
|
||||
@ -148,18 +200,19 @@ static int set_sdrc_timing_regval_ps(u32 *regval, int st_bit, int end_bit,
|
||||
#ifdef DEBUG
|
||||
#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \
|
||||
if (set_sdrc_timing_regval_ps((reg), (st), (end), \
|
||||
rx51_timings->field, \
|
||||
memory_timings->field, \
|
||||
(rate), #field) < 0) \
|
||||
err = -1;
|
||||
|
||||
#else
|
||||
#define SDRC_SET_ONE_PS(reg, st, end, field, rate) \
|
||||
if (set_sdrc_timing_regval_ps((reg), (st), (end), \
|
||||
rx51_timings->field, (rate)) < 0) \
|
||||
memory_timings->field, (rate)) < 0) \
|
||||
err = -1;
|
||||
#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 rfr, l;
|
||||
@ -184,7 +237,7 @@ static int sdrc_timings(int id, long rate)
|
||||
SDRC_SET_ONE(&actim_ctrlb, 16, 17, tWTR, 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)
|
||||
rfr = 65535;
|
||||
else
|
||||
@ -197,25 +250,30 @@ static int sdrc_timings(int id, long rate)
|
||||
l = rfr << 8;
|
||||
rfr_ctrl = l | 0x1; /* autorefresh, reload counter with 1xARCV */
|
||||
|
||||
rx51_sdrc_params[id].rate = rate;
|
||||
rx51_sdrc_params[id].actim_ctrla = actim_ctrla;
|
||||
rx51_sdrc_params[id].actim_ctrlb = actim_ctrlb;
|
||||
rx51_sdrc_params[id].rfr_ctrl = rfr_ctrl;
|
||||
rx51_sdrc_params[id].mr = 0x32;
|
||||
nokia_sdrc_params[id].rate = rate;
|
||||
nokia_sdrc_params[id].actim_ctrla = actim_ctrla;
|
||||
nokia_sdrc_params[id].actim_ctrlb = actim_ctrlb;
|
||||
nokia_sdrc_params[id].rfr_ctrl = rfr_ctrl;
|
||||
nokia_sdrc_params[id].mr = 0x32;
|
||||
|
||||
rx51_sdrc_params[id + 1].rate = 0;
|
||||
nokia_sdrc_params[id + 1].rate = 0;
|
||||
|
||||
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);
|
||||
err |= sdrc_timings(1, 83000000);
|
||||
err |= sdrc_timings(2, 166000000);
|
||||
for (i = 0; i < ARRAY_SIZE(nokia_timings); i++) {
|
||||
err |= sdrc_timings(i, nokia_timings[i].rate,
|
||||
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
|
||||
******************************************************************************/
|
||||
#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,
|
||||
unsigned int ctrl)
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ config CPU_S3C2412
|
||||
config CPU_S3C2412_ONLY
|
||||
bool
|
||||
depends on ARCH_S3C2410 && !CPU_S3C2400 && !CPU_S3C2410 && \
|
||||
!CPU_2416 && !CPU_S3C2440 && !CPU_S3C2442 && \
|
||||
!CPU_S3C2416 && !CPU_S3C2440 && !CPU_S3C2442 && \
|
||||
!CPU_S3C2443 && CPU_S3C2412
|
||||
default y if CPU_S3C2412
|
||||
|
||||
|
@ -35,9 +35,12 @@ menu "S3C2416 Machines"
|
||||
config MACH_SMDK2416
|
||||
bool "SMDK2416"
|
||||
select CPU_S3C2416
|
||||
select MACH_SMDK
|
||||
select S3C_DEV_FB
|
||||
select S3C_DEV_HSMMC
|
||||
select S3C_DEV_HSMMC1
|
||||
select S3C_DEV_NAND
|
||||
select S3C_DEV_USB_HOST
|
||||
select S3C2416_PM if PM
|
||||
help
|
||||
Say Y here if you are using an SMDK2416
|
||||
|
@ -18,6 +18,7 @@ config CPU_S3C2440
|
||||
config CPU_S3C2442
|
||||
bool
|
||||
select CPU_ARM920T
|
||||
select S3C_GPIO_PULL_DOWN
|
||||
select S3C2410_CLOCK
|
||||
select S3C2410_GPIO
|
||||
select S3C2410_PM if PM
|
||||
@ -178,6 +179,9 @@ config MACH_MINI2440
|
||||
bool "MINI2440 development board"
|
||||
select CPU_S3C2440
|
||||
select EEPROM_AT24
|
||||
select NEW_LEDS
|
||||
select LEDS_CLASS
|
||||
select LEDS_TRIGGER
|
||||
select LEDS_TRIGGER_BACKLIGHT
|
||||
select S3C_DEV_NAND
|
||||
select S3C_DEV_USB_HOST
|
||||
|
@ -46,9 +46,6 @@ int __init s3c2440_init(void)
|
||||
{
|
||||
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 */
|
||||
|
||||
s3c_device_wdt.resource[1].start = IRQ_S3C2440_WDT;
|
||||
@ -58,3 +55,11 @@ int __init s3c2440_init(void)
|
||||
|
||||
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/ioport.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
@ -43,6 +44,11 @@
|
||||
|
||||
#include <plat/clock.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 */
|
||||
|
||||
@ -163,3 +169,11 @@ int __init s3c2442_init(void)
|
||||
|
||||
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
|
||||
bool
|
||||
depends on ARCH_S3C2410
|
||||
select CPU_ARM920T
|
||||
select S3C2443_DMA if S3C2410_DMA
|
||||
select CPU_LLSERIAL_S3C2440
|
||||
select SAMSUNG_CLKSRC
|
||||
|
@ -203,6 +203,10 @@ ENTRY(v6_flush_kern_dcache_area)
|
||||
* - end - virtual end address of region
|
||||
*/
|
||||
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
|
||||
bic r0, r0, #D_CACHE_LINE_SIZE - 1
|
||||
#ifdef HARVARD_CACHE
|
||||
@ -211,6 +215,10 @@ v6_dma_inv_range:
|
||||
mcrne p15, 0, r0, c7, c11, 1 @ clean unified line
|
||||
#endif
|
||||
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
|
||||
#ifdef HARVARD_CACHE
|
||||
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
|
||||
#endif
|
||||
1:
|
||||
#ifdef CONFIG_DMA_CACHE_RWFO
|
||||
ldr r2, [r0] @ read for ownership
|
||||
str r2, [r0] @ write for ownership
|
||||
#endif
|
||||
#ifdef HARVARD_CACHE
|
||||
mcr p15, 0, r0, c7, c6, 1 @ invalidate D line
|
||||
#else
|
||||
@ -229,6 +233,10 @@ v6_dma_inv_range:
|
||||
#endif
|
||||
add r0, r0, #D_CACHE_LINE_SIZE
|
||||
cmp r0, r1
|
||||
#ifdef CONFIG_DMA_CACHE_RWFO
|
||||
ldrlo r2, [r0] @ read for ownership
|
||||
strlo r2, [r0] @ write for ownership
|
||||
#endif
|
||||
blo 1b
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
|
||||
@ -263,12 +271,12 @@ v6_dma_clean_range:
|
||||
* - end - virtual end address of region
|
||||
*/
|
||||
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
|
||||
1:
|
||||
#ifdef CONFIG_DMA_CACHE_RWFO
|
||||
ldr r2, [r0] @ read for ownership
|
||||
str r2, [r0] @ write for ownership
|
||||
#endif
|
||||
#ifdef HARVARD_CACHE
|
||||
mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line
|
||||
#else
|
||||
@ -276,6 +284,10 @@ ENTRY(v6_dma_flush_range)
|
||||
#endif
|
||||
add r0, r0, #D_CACHE_LINE_SIZE
|
||||
cmp r0, r1
|
||||
#ifdef CONFIG_DMA_CACHE_RWFO
|
||||
ldrlob r2, [r0] @ read for ownership
|
||||
strlob r2, [r0] @ write for ownership
|
||||
#endif
|
||||
blo 1b
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
|
||||
|
@ -173,15 +173,22 @@ ENTRY(v7_coherent_user_range)
|
||||
UNWIND(.fnstart )
|
||||
dcache_line_size r2, r3
|
||||
sub r3, r2, #1
|
||||
bic r0, r0, r3
|
||||
bic r12, r0, r3
|
||||
1:
|
||||
USER( mcr p15, 0, r0, c7, c11, 1 ) @ clean D line to the point of unification
|
||||
dsb
|
||||
USER( mcr p15, 0, r0, c7, c5, 1 ) @ invalidate I line
|
||||
add r0, r0, r2
|
||||
2:
|
||||
cmp r0, r1
|
||||
USER( mcr p15, 0, r12, c7, c11, 1 ) @ clean D line to the point of unification
|
||||
add r12, r12, r2
|
||||
cmp r12, r1
|
||||
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
|
||||
ALT_SMP(mcr p15, 0, r0, c7, c1, 6) @ invalidate BTB Inner Shareable
|
||||
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.
|
||||
*/
|
||||
9001:
|
||||
mov r0, r0, lsr #12
|
||||
mov r0, r0, lsl #12
|
||||
add r0, r0, #4096
|
||||
b 2b
|
||||
mov r12, r12, lsr #12
|
||||
mov r12, r12, lsl #12
|
||||
add r12, r12, #4096
|
||||
b 3b
|
||||
UNWIND(.fnend )
|
||||
ENDPROC(v7_coherent_kern_range)
|
||||
ENDPROC(v7_coherent_user_range)
|
||||
|
@ -61,17 +61,27 @@
|
||||
.endm
|
||||
|
||||
/*
|
||||
* cache_line_size - get the cache line size from the CSIDR register
|
||||
* (available on ARMv7+). It assumes that the CSSR register was configured
|
||||
* to access the L1 data cache CSIDR.
|
||||
* dcache_line_size - get the minimum D-cache line size from the CTR register
|
||||
* on ARMv7.
|
||||
*/
|
||||
.macro dcache_line_size, reg, tmp
|
||||
mrc p15, 1, \tmp, c0, c0, 0 @ read CSIDR
|
||||
and \tmp, \tmp, #7 @ cache line size encoding
|
||||
mov \reg, #16 @ size offset
|
||||
mrc p15, 0, \tmp, c0, c0, 1 @ read ctr
|
||||
lsr \tmp, \tmp, #16
|
||||
and \tmp, \tmp, #0xf @ cache line size encoding
|
||||
mov \reg, #4 @ bytes per word
|
||||
mov \reg, \reg, lsl \tmp @ actual cache line size
|
||||
.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
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
#include <plat/common.h>
|
||||
#include <plat/board.h>
|
||||
@ -164,7 +165,7 @@ static int __init omap_init_clocksource_32k(void)
|
||||
return -ENODEV;
|
||||
|
||||
sync_32k_ick = clk_get(NULL, "omap_32ksync_ick");
|
||||
if (sync_32k_ick)
|
||||
if (!IS_ERR(sync_32k_ick))
|
||||
clk_enable(sync_32k_ick);
|
||||
|
||||
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, igep0020);
|
||||
DEBUG_LL_OMAP3(3, igep0030);
|
||||
DEBUG_LL_OMAP3(3, nokia_rm680);
|
||||
DEBUG_LL_OMAP3(3, nokia_rx51);
|
||||
DEBUG_LL_OMAP3(3, omap3517evm);
|
||||
DEBUG_LL_OMAP3(3, omap3_beagle);
|
||||
|
@ -166,7 +166,7 @@ static void __init omap_detect_sram(void)
|
||||
cpu_is_omap1710())
|
||||
omap_sram_size = 0x4000; /* 16K */
|
||||
else if (cpu_is_omap1611())
|
||||
omap_sram_size = 0x3e800; /* 250K */
|
||||
omap_sram_size = SZ_256K;
|
||||
else {
|
||||
printk(KERN_ERR "Could not detect SRAM size\n");
|
||||
omap_sram_size = 0x4000;
|
||||
|
@ -88,7 +88,7 @@ static struct cpu_table cpu_ids[] __initdata = {
|
||||
{
|
||||
.idcode = 0x32440000,
|
||||
.idmask = 0xffffffff,
|
||||
.map_io = s3c244x_map_io,
|
||||
.map_io = s3c2440_map_io,
|
||||
.init_clocks = s3c244x_init_clocks,
|
||||
.init_uarts = s3c244x_init_uarts,
|
||||
.init = s3c2440_init,
|
||||
@ -97,7 +97,7 @@ static struct cpu_table cpu_ids[] __initdata = {
|
||||
{
|
||||
.idcode = 0x32440001,
|
||||
.idmask = 0xffffffff,
|
||||
.map_io = s3c244x_map_io,
|
||||
.map_io = s3c2440_map_io,
|
||||
.init_clocks = s3c244x_init_clocks,
|
||||
.init_uarts = s3c244x_init_uarts,
|
||||
.init = s3c2440_init,
|
||||
@ -106,7 +106,7 @@ static struct cpu_table cpu_ids[] __initdata = {
|
||||
{
|
||||
.idcode = 0x32440aaa,
|
||||
.idmask = 0xffffffff,
|
||||
.map_io = s3c244x_map_io,
|
||||
.map_io = s3c2442_map_io,
|
||||
.init_clocks = s3c244x_init_clocks,
|
||||
.init_uarts = s3c244x_init_uarts,
|
||||
.init = s3c2442_init,
|
||||
@ -115,7 +115,7 @@ static struct cpu_table cpu_ids[] __initdata = {
|
||||
{
|
||||
.idcode = 0x32440aab,
|
||||
.idmask = 0xffffffff,
|
||||
.map_io = s3c244x_map_io,
|
||||
.map_io = s3c2442_map_io,
|
||||
.init_clocks = s3c244x_init_clocks,
|
||||
.init_uarts = s3c244x_init_uarts,
|
||||
.init = s3c2442_init,
|
||||
|
@ -82,8 +82,6 @@ static struct s3c_gpio_cfg s3c24xx_gpiocfg_banka = {
|
||||
struct s3c_gpio_cfg s3c24xx_gpiocfg_default = {
|
||||
.set_config = s3c_gpio_setcfg_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[] = {
|
||||
|
@ -21,17 +21,22 @@ extern void s3c244x_init_clocks(int xtal);
|
||||
#else
|
||||
#define s3c244x_init_clocks NULL
|
||||
#define s3c244x_init_uarts NULL
|
||||
#define s3c244x_map_io NULL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_S3C2440
|
||||
extern int s3c2440_init(void);
|
||||
|
||||
extern void s3c2440_map_io(void);
|
||||
#else
|
||||
#define s3c2440_init NULL
|
||||
#define s3c2440_map_io NULL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_S3C2442
|
||||
extern int s3c2442_init(void);
|
||||
|
||||
extern void s3c2442_map_io(void);
|
||||
#else
|
||||
#define s3c2442_init NULL
|
||||
#define s3c2442_map_io NULL
|
||||
#endif
|
||||
|
@ -280,18 +280,17 @@ s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_S3C_GPIO_PULL_UP
|
||||
int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
|
||||
unsigned int off, s3c_gpio_pull_t pull)
|
||||
#if defined(CONFIG_S3C_GPIO_PULL_UP) || defined(CONFIG_S3C_GPIO_PULL_DOWN)
|
||||
static int s3c_gpio_setpull_1(struct s3c_gpio_chip *chip,
|
||||
unsigned int off, s3c_gpio_pull_t pull,
|
||||
s3c_gpio_pull_t updown)
|
||||
{
|
||||
void __iomem *reg = chip->base + 0x08;
|
||||
u32 pup = __raw_readl(reg);
|
||||
|
||||
pup = __raw_readl(reg);
|
||||
|
||||
if (pup == S3C_GPIO_PULL_UP)
|
||||
if (pull == updown)
|
||||
pup &= ~(1 << off);
|
||||
else if (pup == S3C_GPIO_PULL_NONE)
|
||||
else if (pull == S3C_GPIO_PULL_NONE)
|
||||
pup |= (1 << off);
|
||||
else
|
||||
return -EINVAL;
|
||||
@ -300,17 +299,45 @@ int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
|
||||
return 0;
|
||||
}
|
||||
|
||||
s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip,
|
||||
unsigned int off)
|
||||
static s3c_gpio_pull_t s3c_gpio_getpull_1(struct s3c_gpio_chip *chip,
|
||||
unsigned int off, s3c_gpio_pull_t updown)
|
||||
{
|
||||
void __iomem *reg = chip->base + 0x08;
|
||||
u32 pup = __raw_readl(reg);
|
||||
|
||||
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 */
|
||||
|
||||
#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
|
||||
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,
|
||||
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.
|
||||
* @chip: The gpio chip that is being configured.
|
||||
|
@ -12,7 +12,7 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
@ -2321,7 +2321,7 @@ mx31txtr MACH_MX31TXTR MX31TXTR 2332
|
||||
u380 MACH_U380 U380 2333
|
||||
oamp3_hualu MACH_HUALU_BOARD HUALU_BOARD 2334
|
||||
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
|
||||
riom MACH_RIOM RIOM 2338
|
||||
comcas MACH_COMCAS COMCAS 2339
|
||||
@ -2355,7 +2355,7 @@ at91sam9263cs MACH_AT91SAM9263CS AT91SAM9263CS 2366
|
||||
csb732 MACH_CSB732 CSB732 2367
|
||||
u8500 MACH_U8500 U8500 2368
|
||||
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
|
||||
htcelf MACH_HTCELF HTCELF 2372
|
||||
armadillo420 MACH_ARMADILLO420 ARMADILLO420 2373
|
||||
@ -2971,7 +2971,7 @@ premierwave_en MACH_PREMIERWAVE_EN PREMIERWAVE_EN 2985
|
||||
wasabi MACH_WASABI WASABI 2986
|
||||
vivow MACH_VIVOW VIVOW 2987
|
||||
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
|
||||
spx_sakura MACH_SPX_SAKURA SPX_SAKURA 2991
|
||||
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
|
||||
spear900 MACH_SPEAR900 SPEAR900 3061
|
||||
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;
|
||||
|
||||
/* 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;
|
||||
|
||||
/* 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));
|
||||
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();
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/posix-timers.h>
|
||||
#include <linux/cpu.h>
|
||||
|
||||
#include <asm/s390_ext.h>
|
||||
#include <asm/timer.h>
|
||||
@ -566,6 +567,23 @@ void init_cpu_vtimer(void)
|
||||
__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)
|
||||
{
|
||||
/* request the cpu timer external interrupt */
|
||||
@ -574,5 +592,6 @@ void __init vtime_init(void)
|
||||
|
||||
/* Enable cpu timer interrupts on the boot cpu. */
|
||||
init_cpu_vtimer();
|
||||
cpu_notifier(s390_nohz_notify, 0);
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,8 @@ config SUPERH
|
||||
select HAVE_SPARSE_IRQ
|
||||
select RTC_LIB
|
||||
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
|
||||
The SuperH is a RISC processor targeted for use in embedded systems
|
||||
and consumer electronics; it was also used in the Sega Dreamcast
|
||||
|
@ -368,8 +368,9 @@
|
||||
#define __NR_sendmsg 355
|
||||
#define __NR_recvmsg 356
|
||||
#define __NR_recvmmsg 357
|
||||
#define __NR_accept4 358
|
||||
|
||||
#define NR_syscalls 358
|
||||
#define NR_syscalls 359
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
|
@ -375,3 +375,4 @@ ENTRY(sys_call_table)
|
||||
.long sys_sendmsg /* 355 */
|
||||
.long sys_recvmsg
|
||||
.long sys_recvmmsg
|
||||
.long sys_accept4
|
||||
|
@ -39,7 +39,7 @@ struct linux_dev_v2_funcs {
|
||||
int (*v2_dev_open)(char *devpath);
|
||||
void (*v2_dev_close)(int d);
|
||||
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);
|
||||
|
||||
/* 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 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. */
|
||||
|
||||
/* Reboot the machine with the command line passed. */
|
||||
@ -121,19 +102,8 @@ extern int prom_getrev(void);
|
||||
/* Get the prom firmware revision. */
|
||||
extern int prom_getprev(void);
|
||||
|
||||
/* Character operations to/from the console.... */
|
||||
|
||||
/* 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);
|
||||
/* Write a buffer of characters to the console. */
|
||||
extern void prom_console_write_buf(const char *buf, int len);
|
||||
|
||||
/* Prom's internal routines, don't use in kernel/boot code. */
|
||||
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,
|
||||
int value_size);
|
||||
|
||||
extern phandle prom_pathtoinode(char *path);
|
||||
extern phandle prom_inst2pkg(int);
|
||||
|
||||
/* 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. */
|
||||
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. */
|
||||
|
||||
/* 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. */
|
||||
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
|
||||
* gets passed a buffer where you would like it stuffed. The return value
|
||||
* is the format type of this idprom or 0xff on error.
|
||||
*/
|
||||
extern unsigned char prom_get_idprom(char *idp_buffer, int idpbuf_size);
|
||||
|
||||
/* Character operations to/from the console.... */
|
||||
|
||||
/* 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);
|
||||
/* Write a buffer of characters to the console. */
|
||||
extern void prom_console_write_buf(const char *buf, int len);
|
||||
|
||||
/* Prom's internal routines, don't use in kernel/boot code. */
|
||||
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,
|
||||
int value_size);
|
||||
|
||||
extern phandle prom_pathtoinode(const char *path);
|
||||
extern phandle prom_inst2pkg(int);
|
||||
extern int prom_service_exists(const char *service_name);
|
||||
extern void prom_sun4v_guest_soft_state(void);
|
||||
|
||||
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) {
|
||||
LEON3_BYPASS_STORE_PA(&leon3_gptimer_regs->e[0].val, 0);
|
||||
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);
|
||||
|
||||
#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].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);
|
||||
# endif
|
||||
|
||||
|
@ -6,7 +6,6 @@ ccflags := -Werror
|
||||
|
||||
lib-y := bootstr_$(BITS).o
|
||||
lib-$(CONFIG_SPARC32) += devmap.o
|
||||
lib-y += devops_$(BITS).o
|
||||
lib-y += init_$(BITS).o
|
||||
lib-$(CONFIG_SPARC32) += memory.o
|
||||
lib-y += misc_$(BITS).o
|
||||
|
@ -16,63 +16,26 @@
|
||||
|
||||
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
|
||||
* unsuccessful.
|
||||
*/
|
||||
int
|
||||
prom_nbputchar(char c)
|
||||
static int prom_nbputchar(const char *buf)
|
||||
{
|
||||
static char outc;
|
||||
unsigned long flags;
|
||||
int i = -1;
|
||||
|
||||
spin_lock_irqsave(&prom_lock, flags);
|
||||
switch(prom_vers) {
|
||||
case PROM_V0:
|
||||
i = (*(romvec->pv_nbputchar))(c);
|
||||
i = (*(romvec->pv_nbputchar))(*buf);
|
||||
break;
|
||||
case PROM_V2:
|
||||
case PROM_V3:
|
||||
outc = c;
|
||||
if( (*(romvec->pv_v2devops).v2_dev_write)(*romvec->pv_v2bootargs.fd_stdout, &outc, 0x1) == 1)
|
||||
if ((*(romvec->pv_v2devops).v2_dev_write)(*romvec->pv_v2bootargs.fd_stdout,
|
||||
buf, 0x1) == 1)
|
||||
i = 0;
|
||||
else
|
||||
i = -1;
|
||||
break;
|
||||
default:
|
||||
i = -1;
|
||||
break;
|
||||
};
|
||||
restore_current();
|
||||
@ -80,18 +43,14 @@ prom_nbputchar(char c)
|
||||
return i; /* Ugh, we could spin forever on unsupported proms ;( */
|
||||
}
|
||||
|
||||
/* Blocking version of get character routine above. */
|
||||
char
|
||||
prom_getchar(void)
|
||||
void prom_console_write_buf(const char *buf, int len)
|
||||
{
|
||||
int character;
|
||||
while((character = prom_nbgetchar()) == -1) ;
|
||||
return (char) character;
|
||||
while (len) {
|
||||
int n = prom_nbputchar(buf);
|
||||
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;
|
||||
|
||||
/* Non blocking get character from console input device, returns -1
|
||||
* if no input was taken. This can be used for polling.
|
||||
*/
|
||||
inline int
|
||||
prom_nbgetchar(void)
|
||||
static int __prom_console_write_buf(const char *buf, int len)
|
||||
{
|
||||
unsigned long args[7];
|
||||
char inc;
|
||||
|
||||
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;
|
||||
int ret;
|
||||
|
||||
args[0] = (unsigned long) "write";
|
||||
args[1] = 3;
|
||||
args[2] = 1;
|
||||
args[3] = (unsigned int) prom_stdout;
|
||||
args[4] = (unsigned long) &outc;
|
||||
args[5] = 1;
|
||||
args[4] = (unsigned long) buf;
|
||||
args[5] = (unsigned int) len;
|
||||
args[6] = (unsigned long) -1;
|
||||
|
||||
p1275_cmd_direct(args);
|
||||
|
||||
if (args[6] == 1)
|
||||
return 0;
|
||||
else
|
||||
ret = (int) args[6];
|
||||
if (ret < 0)
|
||||
return -1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Blocking version of get character routine above. */
|
||||
char
|
||||
prom_getchar(void)
|
||||
void prom_console_write_buf(const char *buf, int len)
|
||||
{
|
||||
int character;
|
||||
while((character = prom_nbgetchar()) == -1) ;
|
||||
return (char) character;
|
||||
}
|
||||
|
||||
/* Blocking version of put character routine above. */
|
||||
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);
|
||||
while (len) {
|
||||
int n = __prom_console_write_buf(buf, len);
|
||||
if (n < 0)
|
||||
continue;
|
||||
len -= n;
|
||||
buf += len;
|
||||
}
|
||||
}
|
||||
|
@ -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/ldc.h>
|
||||
|
||||
int prom_service_exists(const char *service_name)
|
||||
static int prom_service_exists(const char *service_name)
|
||||
{
|
||||
unsigned long args[5];
|
||||
|
||||
@ -150,20 +150,6 @@ void prom_halt_power_off(void)
|
||||
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
|
||||
* format type. 'num_bytes' is the number of bytes that your idbuf
|
||||
* has space for. Returns 0xff on error.
|
||||
|
@ -15,22 +15,45 @@
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include <asm/openprom.h>
|
||||
#include <asm/oplib.h>
|
||||
|
||||
#define CONSOLE_WRITE_BUF_SIZE 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)
|
||||
{
|
||||
char ch;
|
||||
unsigned int dest_len;
|
||||
unsigned long flags;
|
||||
char *dest;
|
||||
|
||||
while (n != 0) {
|
||||
--n;
|
||||
if ((ch = *buf++) == '\n')
|
||||
prom_putchar('\r');
|
||||
prom_putchar(ch);
|
||||
dest = console_write_buf;
|
||||
raw_spin_lock_irqsave(&console_write_lock, flags);
|
||||
|
||||
dest_len = 0;
|
||||
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, ...)
|
||||
|
@ -342,19 +342,3 @@ phandle prom_inst2pkg(int inst)
|
||||
if (node == -1) return 0;
|
||||
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' 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)
|
||||
{
|
||||
unsigned long args[7];
|
||||
|
@ -10,6 +10,7 @@
|
||||
* by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.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,
|
||||
struct pvclock_vcpu_time_info *vcpu,
|
||||
struct timespec *ts);
|
||||
void pvclock_resume(void);
|
||||
|
||||
/*
|
||||
* 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);
|
||||
|
||||
void pvclock_resume(void)
|
||||
{
|
||||
atomic64_set(&last_value, 0);
|
||||
}
|
||||
|
||||
cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
|
||||
{
|
||||
struct pvclock_shadow_time shadow;
|
||||
|
@ -426,6 +426,8 @@ void xen_timer_resume(void)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
pvclock_resume();
|
||||
|
||||
if (xen_clockevent != &xen_vcpuop_clockevent)
|
||||
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;
|
||||
unsigned int dxfer_len;
|
||||
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,
|
||||
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,
|
||||
};
|
||||
#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
|
||||
-------------------------------------------------------------------------- */
|
||||
@ -140,6 +123,35 @@ static int acpi_ac_get_state(struct acpi_ac *ac)
|
||||
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
|
||||
/* --------------------------------------------------------------------------
|
||||
FS Interface (/proc)
|
||||
|
@ -86,7 +86,7 @@ static struct erst_erange {
|
||||
* It is used to provide exclusive accessing for ERST Error Log
|
||||
* Address Range too.
|
||||
*/
|
||||
static DEFINE_SPINLOCK(erst_lock);
|
||||
static DEFINE_RAW_SPINLOCK(erst_lock);
|
||||
|
||||
static inline int erst_errno(int command_status)
|
||||
{
|
||||
@ -421,9 +421,9 @@ ssize_t erst_get_record_count(void)
|
||||
if (erst_disable)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&erst_lock, flags);
|
||||
raw_spin_lock_irqsave(&erst_lock, flags);
|
||||
count = __erst_get_record_count();
|
||||
spin_unlock_irqrestore(&erst_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||
|
||||
return count;
|
||||
}
|
||||
@ -456,9 +456,9 @@ int erst_get_next_record_id(u64 *record_id)
|
||||
if (erst_disable)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&erst_lock, flags);
|
||||
raw_spin_lock_irqsave(&erst_lock, flags);
|
||||
rc = __erst_get_next_record_id(record_id);
|
||||
spin_unlock_irqrestore(&erst_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||
|
||||
return rc;
|
||||
}
|
||||
@ -624,17 +624,17 @@ int erst_write(const struct cper_record_header *record)
|
||||
return -EINVAL;
|
||||
|
||||
if (erst_erange.attr & ERST_RANGE_NVRAM) {
|
||||
if (!spin_trylock_irqsave(&erst_lock, flags))
|
||||
if (!raw_spin_trylock_irqsave(&erst_lock, flags))
|
||||
return -EBUSY;
|
||||
rc = __erst_write_to_nvram(record);
|
||||
spin_unlock_irqrestore(&erst_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (record->record_length > erst_erange.size)
|
||||
return -EINVAL;
|
||||
|
||||
if (!spin_trylock_irqsave(&erst_lock, flags))
|
||||
if (!raw_spin_trylock_irqsave(&erst_lock, flags))
|
||||
return -EBUSY;
|
||||
memcpy(erst_erange.vaddr, record, record->record_length);
|
||||
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);
|
||||
|
||||
rc = __erst_write_to_storage(0);
|
||||
spin_unlock_irqrestore(&erst_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||
|
||||
return rc;
|
||||
}
|
||||
@ -696,9 +696,9 @@ ssize_t erst_read(u64 record_id, struct cper_record_header *record,
|
||||
if (erst_disable)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&erst_lock, flags);
|
||||
raw_spin_lock_irqsave(&erst_lock, flags);
|
||||
len = __erst_read(record_id, record, buflen);
|
||||
spin_unlock_irqrestore(&erst_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||
return len;
|
||||
}
|
||||
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)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&erst_lock, flags);
|
||||
raw_spin_lock_irqsave(&erst_lock, flags);
|
||||
rc = __erst_get_next_record_id(&record_id);
|
||||
if (rc) {
|
||||
spin_unlock_irqrestore(&erst_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||
return rc;
|
||||
}
|
||||
/* no more record */
|
||||
if (record_id == APEI_ERST_INVALID_RECORD_ID) {
|
||||
spin_unlock_irqrestore(&erst_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
len = __erst_read(record_id, record, buflen);
|
||||
spin_unlock_irqrestore(&erst_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||
|
||||
return len;
|
||||
}
|
||||
@ -746,12 +746,12 @@ int erst_clear(u64 record_id)
|
||||
if (erst_disable)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&erst_lock, flags);
|
||||
raw_spin_lock_irqsave(&erst_lock, flags);
|
||||
if (erst_erange.attr & ERST_RANGE_NVRAM)
|
||||
rc = __erst_clear_from_nvram(record_id);
|
||||
else
|
||||
rc = __erst_clear_from_storage(record_id);
|
||||
spin_unlock_irqrestore(&erst_lock, flags);
|
||||
raw_spin_unlock_irqrestore(&erst_lock, flags);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -46,9 +46,9 @@ EXPORT_SYMBOL_GPL(hest_disable);
|
||||
|
||||
/* 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_CORRECTED_CHECK] = -1,
|
||||
[ACPI_HEST_TYPE_IA32_NMI] = sizeof(struct acpi_hest_ia_nmi),
|
||||
@ -126,7 +126,7 @@ struct ghes_arr {
|
||||
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;
|
||||
|
||||
@ -135,7 +135,7 @@ static int hest_parse_ghes_count(struct acpi_hest_header *hest_hdr, void *data)
|
||||
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 ghes_arr *ghes_arr = data;
|
||||
@ -165,7 +165,7 @@ static int hest_parse_ghes(struct acpi_hest_header *hest_hdr, void *data)
|
||||
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;
|
||||
struct ghes_arr ghes_arr;
|
||||
|
@ -130,6 +130,8 @@ struct acpi_battery {
|
||||
unsigned long flags;
|
||||
};
|
||||
|
||||
static int acpi_battery_update(struct acpi_battery *battery);
|
||||
|
||||
#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);
|
||||
|
||||
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;
|
||||
struct acpi_battery *battery = to_acpi_battery(psy);
|
||||
|
||||
if (acpi_battery_update(battery))
|
||||
return -ENODEV;
|
||||
|
||||
if (acpi_battery_present(battery)) {
|
||||
/* run battery update only if it is present */
|
||||
acpi_battery_get_state(battery);
|
||||
|
@ -934,6 +934,9 @@ static struct dmi_system_id __initdata ec_dmi_table[] = {
|
||||
ec_flag_msi, "MSI hardware", {
|
||||
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", {
|
||||
DMI_MATCH(DMI_BIOS_VENDOR, "ASUS") }, NULL},
|
||||
{},
|
||||
|
@ -110,9 +110,6 @@ struct acpi_ioremap {
|
||||
static LIST_HEAD(acpi_ioremaps);
|
||||
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);
|
||||
|
||||
/*
|
||||
@ -152,8 +149,7 @@ static struct osi_linux {
|
||||
unsigned int enable:1;
|
||||
unsigned int dmi:1;
|
||||
unsigned int cmdline:1;
|
||||
unsigned int known:1;
|
||||
} osi_linux = { 0, 0, 0, 0};
|
||||
} osi_linux = {0, 0, 0};
|
||||
|
||||
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);
|
||||
|
||||
#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)
|
||||
{
|
||||
if (osi_linux.enable != enable) {
|
||||
if (osi_linux.enable != enable)
|
||||
osi_linux.enable = enable;
|
||||
printk(KERN_NOTICE PREFIX "%sed _OSI(Linux)\n",
|
||||
enable ? "Add": "Delet");
|
||||
}
|
||||
|
||||
if (osi_linux.enable)
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
osi_linux.dmi = 1; /* DMI knows that this box asks OSI(Linux) */
|
||||
|
||||
printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident);
|
||||
|
||||
if (enable == -1)
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
char *str = osi_setup_string;
|
||||
struct osi_setup_entry *osi;
|
||||
char *str;
|
||||
int i;
|
||||
acpi_status status;
|
||||
|
||||
if (*str == '\0')
|
||||
return;
|
||||
for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
|
||||
osi = &osi_setup_entries[i];
|
||||
str = osi->string;
|
||||
|
||||
if (!strcmp("!Linux", str)) {
|
||||
acpi_cmdline_osi_linux(0); /* !enable */
|
||||
} else if (*str == '!') {
|
||||
if (acpi_remove_interface(++str) == AE_OK)
|
||||
printk(KERN_INFO PREFIX "Deleted _OSI(%s)\n", str);
|
||||
} else if (!strcmp("Linux", str)) {
|
||||
acpi_cmdline_osi_linux(1); /* enable */
|
||||
} else {
|
||||
if (acpi_install_interface(str) == AE_OK)
|
||||
printk(KERN_INFO PREFIX "Added _OSI(%s)\n", str);
|
||||
if (*str == '\0')
|
||||
break;
|
||||
if (osi->enable) {
|
||||
status = acpi_install_interface(str);
|
||||
|
||||
if (ACPI_SUCCESS(status))
|
||||
printk(KERN_INFO PREFIX "Added _OSI(%s)\n", str);
|
||||
} else {
|
||||
status = acpi_remove_interface(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') {
|
||||
printk(KERN_INFO PREFIX "_OSI method disabled\n");
|
||||
acpi_gbl_create_osi_method = FALSE;
|
||||
} else {
|
||||
strncpy(osi_setup_string, str, OSI_STRING_LENGTH_MAX);
|
||||
}
|
||||
if (str && !strcmp("Linux", str))
|
||||
acpi_cmdline_osi_linux(1);
|
||||
else if (str && !strcmp("!Linux", str))
|
||||
acpi_cmdline_osi_linux(0);
|
||||
else
|
||||
acpi_osi_setup(str);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("acpi_osi=", acpi_osi_setup);
|
||||
__setup("acpi_osi=", osi_setup);
|
||||
|
||||
/* enable serialization to combat AE_ALREADY_EXISTS errors */
|
||||
static int __init acpi_serialize_setup(char *str)
|
||||
@ -1530,7 +1571,7 @@ acpi_status __init acpi_os_initialize(void)
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
acpi_status acpi_os_initialize1(void)
|
||||
acpi_status __init acpi_os_initialize1(void)
|
||||
{
|
||||
kacpid_wq = create_workqueue("kacpid");
|
||||
kacpi_notify_wq = create_workqueue("kacpi_notify");
|
||||
|
@ -213,11 +213,13 @@ static int acpi_power_on(acpi_handle handle)
|
||||
resource->name));
|
||||
} else {
|
||||
result = __acpi_power_on(resource);
|
||||
if (result)
|
||||
resource->ref_count--;
|
||||
}
|
||||
|
||||
mutex_unlock(&resource->resource_lock);
|
||||
|
||||
return 0;
|
||||
return result;
|
||||
}
|
||||
|
||||
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 */
|
||||
int i = 0;
|
||||
|
||||
|
||||
if (!device || (state < ACPI_STATE_D0) || (state > ACPI_STATE_D3))
|
||||
return -EINVAL;
|
||||
|
||||
if (device->power.state == state)
|
||||
return 0;
|
||||
|
||||
if ((device->power.state < ACPI_STATE_D0)
|
||||
|| (device->power.state > ACPI_STATE_D3))
|
||||
return -ENODEV;
|
||||
@ -488,10 +492,6 @@ int acpi_power_transition(struct acpi_device *device, int state)
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (device->power.state == state) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
|
||||
static int acpi_thermal_cpufreq_increase(unsigned int cpu)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static int acpi_thermal_cpufreq_decrease(unsigned int cpu)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int acpi_processor_get_limit_info(struct acpi_processor *pr)
|
||||
|
@ -27,8 +27,6 @@
|
||||
|
||||
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)
|
||||
{
|
||||
union acpi_object in_arg = { ACPI_TYPE_INTEGER };
|
||||
@ -81,6 +79,8 @@ static int acpi_sleep_prepare(u32 acpi_state)
|
||||
}
|
||||
|
||||
#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
|
||||
* 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"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.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 */
|
||||
|
@ -154,7 +154,7 @@ static int __init adummy_init(void)
|
||||
err = -ENOMEM;
|
||||
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) {
|
||||
printk(KERN_ERR DEV_LABEL ": atm_dev_register() failed\n");
|
||||
err = -ENODEV;
|
||||
|
@ -2244,7 +2244,8 @@ static int __devinit amb_probe(struct pci_dev *pci_dev, const struct pci_device_
|
||||
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) {
|
||||
PRINTD (DBG_ERR, "failed to register Madge ATM adapter");
|
||||
err = -EINVAL;
|
||||
|
@ -366,7 +366,7 @@ static int atmtcp_create(int itf,int persist,struct atm_dev **result)
|
||||
if (!dev_data)
|
||||
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) {
|
||||
kfree(dev_data);
|
||||
return itf == -1 ? -ENOMEM : -EBUSY;
|
||||
|
@ -2244,7 +2244,7 @@ static int __devinit eni_init_one(struct pci_dev *pci_dev,
|
||||
&zeroes);
|
||||
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;
|
||||
pci_set_drvdata(pci_dev, 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));
|
||||
if (!fs_dev)
|
||||
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)
|
||||
goto err_out_free_fs_dev;
|
||||
|
||||
|
@ -2567,14 +2567,14 @@ fore200e_load_and_start_fw(struct fore200e* fore200e)
|
||||
|
||||
|
||||
static int __devinit
|
||||
fore200e_register(struct fore200e* fore200e)
|
||||
fore200e_register(struct fore200e* fore200e, struct device *parent)
|
||||
{
|
||||
struct atm_dev* atm_dev;
|
||||
|
||||
DPRINTK(2, "device %s being registered\n", fore200e->name);
|
||||
|
||||
atm_dev = atm_dev_register(fore200e->bus->proc_name, &fore200e_ops, -1,
|
||||
NULL);
|
||||
atm_dev = atm_dev_register(fore200e->bus->proc_name, parent, &fore200e_ops,
|
||||
-1, NULL);
|
||||
if (atm_dev == NULL) {
|
||||
printk(FORE200E "unable to register device %s\n", fore200e->name);
|
||||
return -ENODEV;
|
||||
@ -2594,9 +2594,9 @@ fore200e_register(struct fore200e* fore200e)
|
||||
|
||||
|
||||
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;
|
||||
|
||||
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);
|
||||
|
||||
err = fore200e_init(fore200e);
|
||||
err = fore200e_init(fore200e, &op->dev);
|
||||
if (err < 0) {
|
||||
fore200e_shutdown(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);
|
||||
|
||||
err = fore200e_init(fore200e);
|
||||
err = fore200e_init(fore200e, &pci_dev->dev);
|
||||
if (err < 0) {
|
||||
fore200e_shutdown(fore200e);
|
||||
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;
|
||||
}
|
||||
|
||||
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) {
|
||||
err = -ENODEV;
|
||||
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",
|
||||
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)) {
|
||||
PRINTD(DBG_ERR, "failed to register Madge ATM adapter");
|
||||
err = -EINVAL;
|
||||
|
@ -3698,7 +3698,8 @@ idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)
|
||||
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) {
|
||||
printk("%s: can't register atm device\n", card->name);
|
||||
err = -EIO;
|
||||
|
@ -3172,7 +3172,7 @@ static int __devinit ia_init_one(struct pci_dev *pdev,
|
||||
ret = -ENODEV;
|
||||
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) {
|
||||
ret = -ENOMEM;
|
||||
goto err_out_disable_dev;
|
||||
|
@ -2591,7 +2591,7 @@ static int __devinit lanai_init_one(struct pci_dev *pci,
|
||||
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) {
|
||||
printk(KERN_ERR DEV_LABEL
|
||||
": couldn't register atm device!\n");
|
||||
|
@ -771,7 +771,8 @@ static int __devinit ns_init_card(int i, struct pci_dev *pcidev)
|
||||
}
|
||||
|
||||
/* 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) {
|
||||
printk("nicstar%d: can't register device.\n", i);
|
||||
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 int list_vccs(int vci);
|
||||
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 int send_command(struct solos_card *card, int dev, const char *buf, size_t size);
|
||||
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)
|
||||
flash_upgrade(card, 3);
|
||||
|
||||
err = atm_init(card);
|
||||
err = atm_init(card, &dev->dev);
|
||||
if (err)
|
||||
goto out_free_irq;
|
||||
|
||||
@ -1233,7 +1233,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
return err;
|
||||
}
|
||||
|
||||
static int atm_init(struct solos_card *card)
|
||||
static int atm_init(struct solos_card *card, struct device *parent)
|
||||
{
|
||||
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->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]) {
|
||||
dev_err(&card->dev->dev, "Could not register ATM device %d\n", i);
|
||||
atm_remove(card);
|
||||
|
@ -1597,7 +1597,7 @@ static int __devinit zatm_init_one(struct pci_dev *pci_dev,
|
||||
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)
|
||||
goto out_free;
|
||||
|
||||
|
@ -72,7 +72,7 @@ struct blk_shadow {
|
||||
static DEFINE_MUTEX(blkfront_mutex);
|
||||
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
|
||||
|
@ -35,6 +35,10 @@
|
||||
static struct usb_device_id ath3k_table[] = {
|
||||
/* Atheros AR3011 */
|
||||
{ USB_DEVICE(0x0CF3, 0x3000) },
|
||||
|
||||
/* Atheros AR3011 with sflash firmware*/
|
||||
{ USB_DEVICE(0x0CF3, 0x3002) },
|
||||
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
|
@ -99,6 +99,9 @@ static struct usb_device_id blacklist_table[] = {
|
||||
/* Broadcom BCM2033 without firmware */
|
||||
{ USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE },
|
||||
|
||||
/* Atheros 3011 with sflash firmware */
|
||||
{ USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },
|
||||
|
||||
/* Broadcom BCM2035 */
|
||||
{ USB_DEVICE(0x0a5c, 0x2035), .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);
|
||||
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);
|
||||
usb_unanchor_urb(urb);
|
||||
}
|
||||
@ -323,7 +327,8 @@ static void btusb_bulk_complete(struct urb *urb)
|
||||
|
||||
err = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
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);
|
||||
usb_unanchor_urb(urb);
|
||||
}
|
||||
@ -412,7 +417,8 @@ static void btusb_isoc_complete(struct urb *urb)
|
||||
|
||||
err = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
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);
|
||||
usb_unanchor_urb(urb);
|
||||
}
|
||||
|
@ -812,8 +812,10 @@ static int intel_fake_agp_fetch_size(void)
|
||||
|
||||
static void i830_cleanup(void)
|
||||
{
|
||||
kunmap(intel_private.i8xx_page);
|
||||
intel_private.i8xx_flush_page = NULL;
|
||||
if (intel_private.i8xx_flush_page) {
|
||||
kunmap(intel_private.i8xx_flush_page);
|
||||
intel_private.i8xx_flush_page = NULL;
|
||||
}
|
||||
|
||||
__free_page(intel_private.i8xx_page);
|
||||
intel_private.i8xx_page = NULL;
|
||||
|
@ -36,6 +36,7 @@
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");
|
||||
MODULE_DESCRIPTION("Generic userspace <-> kernelspace connector.");
|
||||
MODULE_ALIAS_NET_PF_PROTO(PF_NETLINK, NETLINK_CONNECTOR);
|
||||
|
||||
static struct cn_dev cdev;
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
ifeq ($(CONFIG_DMADEVICES_DEBUG),y)
|
||||
EXTRA_CFLAGS += -DDEBUG
|
||||
ccflags-y += -DDEBUG
|
||||
endif
|
||||
ifeq ($(CONFIG_DMADEVICES_VDEBUG),y)
|
||||
EXTRA_CFLAGS += -DVERBOSE_DEBUG
|
||||
ccflags-y += -DVERBOSE_DEBUG
|
||||
endif
|
||||
|
||||
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.ctrla = ctrla
|
||||
| ATC_DST_WIDTH(mem_width)
|
||||
| len >> mem_width;
|
||||
| len >> reg_width;
|
||||
desc->lli.ctrlb = ctrlb;
|
||||
|
||||
if (!first) {
|
||||
|
@ -50,9 +50,11 @@ static void dma_init(struct fsldma_chan *chan)
|
||||
* EIE - Error interrupt enable
|
||||
* EOSIE - End of segments interrupt enable (basic mode)
|
||||
* EOLNIE - End of links interrupt enable
|
||||
* BWC - Bandwidth sharing among channels
|
||||
*/
|
||||
DMA_OUT(chan, &chan->regs->mr, FSL_DMA_MR_EIE
|
||||
| FSL_DMA_MR_EOLNIE | FSL_DMA_MR_EOSIE, 32);
|
||||
DMA_OUT(chan, &chan->regs->mr, FSL_DMA_MR_BWC
|
||||
| FSL_DMA_MR_EIE | FSL_DMA_MR_EOLNIE
|
||||
| FSL_DMA_MR_EOSIE, 32);
|
||||
break;
|
||||
case FSL_DMA_IP_83XX:
|
||||
/* 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:
|
||||
* Zhang Wei <wei.zhang@freescale.com>, Jul 2007
|
||||
@ -36,6 +36,13 @@
|
||||
#define FSL_DMA_MR_DAHE 0x00002000
|
||||
#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 */
|
||||
#define FSL_DMA_MR_EOTIE 0x00000080
|
||||
#define FSL_DMA_MR_PRC_RM 0x00000800
|
||||
|
@ -379,7 +379,7 @@ static int __init imxdma_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
|
||||
err_init:
|
||||
while (i-- >= 0) {
|
||||
while (--i >= 0) {
|
||||
struct imxdma_channel *imxdmac = &imxdma->channel[i];
|
||||
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];
|
||||
int param;
|
||||
|
||||
bd->buffer_addr = sgl->dma_address;
|
||||
bd->buffer_addr = sg->dma_address;
|
||||
|
||||
count = sg->length;
|
||||
|
||||
@ -1385,7 +1385,7 @@ static int __init sdma_module_init(void)
|
||||
{
|
||||
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_DESCRIPTION("i.MX SDMA driver");
|
||||
|
@ -1075,7 +1075,6 @@ static int mid_setup_dma(struct pci_dev *pdev)
|
||||
if (NULL == dma->dma_pool) {
|
||||
pr_err("ERR_MDMA:pci_pool_create failed\n");
|
||||
err = -ENOMEM;
|
||||
kfree(dma);
|
||||
goto err_dma_pool;
|
||||
}
|
||||
|
||||
@ -1186,7 +1185,6 @@ static int mid_setup_dma(struct pci_dev *pdev)
|
||||
free_irq(pdev->irq, dma);
|
||||
err_irq:
|
||||
pci_pool_destroy(dma->dma_pool);
|
||||
kfree(dma);
|
||||
err_dma_pool:
|
||||
pr_err("ERR_MDMA:setup_dma failed: %d\n", err);
|
||||
return err;
|
||||
@ -1413,7 +1411,7 @@ static const struct dev_pm_ops intel_mid_dma_pm = {
|
||||
.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",
|
||||
.id_table = intel_mid_dma_ids,
|
||||
.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",
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
|
@ -1,2 +1,2 @@
|
||||
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