提交 02ab343f 编写于 作者: G Greg Kroah-Hartman

Merge 3.12-rc4 into staging-next

We want the staging fixes in this branch as well.
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
...@@ -6,6 +6,8 @@ capability.txt ...@@ -6,6 +6,8 @@ capability.txt
- Generic Block Device Capability (/sys/block/<device>/capability) - Generic Block Device Capability (/sys/block/<device>/capability)
cfq-iosched.txt cfq-iosched.txt
- CFQ IO scheduler tunables - CFQ IO scheduler tunables
cmdline-partition.txt
- how to specify block device partitions on kernel command line
data-integrity.txt data-integrity.txt
- Block data integrity - Block data integrity
deadline-iosched.txt deadline-iosched.txt
......
Embedded device command line partition Embedded device command line partition parsing
===================================================================== =====================================================================
Read block device partition table from command line. Support for reading the block device partition table from the command line.
The partition used for fixed block device (eMMC) embedded device. It is typically used for fixed block (eMMC) embedded devices.
It is no MBR, save storage space. Bootloader can be easily accessed It has no MBR, so saves storage space. Bootloader can be easily accessed
by absolute address of data on the block device. by absolute address of data on the block device.
Users can easily change the partition. Users can easily change the partition.
......
...@@ -9,12 +9,15 @@ compulsory and any optional properties, common to all SD/MMC drivers, as ...@@ -9,12 +9,15 @@ compulsory and any optional properties, common to all SD/MMC drivers, as
described in mmc.txt, can be used. Additionally the following tmio_mmc-specific described in mmc.txt, can be used. Additionally the following tmio_mmc-specific
optional bindings can be used. optional bindings can be used.
Required properties:
- compatible: "renesas,sdhi-shmobile" - a generic sh-mobile SDHI unit
"renesas,sdhi-sh7372" - SDHI IP on SH7372 SoC
"renesas,sdhi-sh73a0" - SDHI IP on SH73A0 SoC
"renesas,sdhi-r8a73a4" - SDHI IP on R8A73A4 SoC
"renesas,sdhi-r8a7740" - SDHI IP on R8A7740 SoC
"renesas,sdhi-r8a7778" - SDHI IP on R8A7778 SoC
"renesas,sdhi-r8a7779" - SDHI IP on R8A7779 SoC
"renesas,sdhi-r8a7790" - SDHI IP on R8A7790 SoC
Optional properties: Optional properties:
- toshiba,mmc-wrprotect-disable: write-protect detection is unavailable - toshiba,mmc-wrprotect-disable: write-protect detection is unavailable
When used with Renesas SDHI hardware, the following compatibility strings
configure various model-specific properties:
"renesas,sh7372-sdhi": (default) compatible with SH7372
"renesas,r8a7740-sdhi": compatible with R8A7740: certain MMC/SD commands have to
wait for the interface to become idle.
...@@ -86,6 +86,7 @@ General Properties: ...@@ -86,6 +86,7 @@ General Properties:
Clock Properties: Clock Properties:
- fsl,cksel Timer reference clock source.
- fsl,tclk-period Timer reference clock period in nanoseconds. - fsl,tclk-period Timer reference clock period in nanoseconds.
- fsl,tmr-prsc Prescaler, divides the output clock. - fsl,tmr-prsc Prescaler, divides the output clock.
- fsl,tmr-add Frequency compensation value. - fsl,tmr-add Frequency compensation value.
...@@ -97,7 +98,7 @@ Clock Properties: ...@@ -97,7 +98,7 @@ Clock Properties:
clock. You must choose these carefully for the clock to work right. clock. You must choose these carefully for the clock to work right.
Here is how to figure good values: Here is how to figure good values:
TimerOsc = system clock MHz TimerOsc = selected reference clock MHz
tclk_period = desired clock period nanoseconds tclk_period = desired clock period nanoseconds
NominalFreq = 1000 / tclk_period MHz NominalFreq = 1000 / tclk_period MHz
FreqDivRatio = TimerOsc / NominalFreq (must be greater that 1.0) FreqDivRatio = TimerOsc / NominalFreq (must be greater that 1.0)
...@@ -114,6 +115,20 @@ Clock Properties: ...@@ -114,6 +115,20 @@ Clock Properties:
Pulse Per Second (PPS) signal, since this will be offered to the PPS Pulse Per Second (PPS) signal, since this will be offered to the PPS
subsystem to synchronize the Linux clock. subsystem to synchronize the Linux clock.
Reference clock source is determined by the value, which is holded
in CKSEL bits in TMR_CTRL register. "fsl,cksel" property keeps the
value, which will be directly written in those bits, that is why,
according to reference manual, the next clock sources can be used:
<0> - external high precision timer reference clock (TSEC_TMR_CLK
input is used for this purpose);
<1> - eTSEC system clock;
<2> - eTSEC1 transmit clock;
<3> - RTC clock input.
When this attribute is not used, eTSEC system clock will serve as
IEEE 1588 timer reference clock.
Example: Example:
ptp_clock@24E00 { ptp_clock@24E00 {
...@@ -121,6 +136,7 @@ Example: ...@@ -121,6 +136,7 @@ Example:
reg = <0x24E00 0xB0>; reg = <0x24E00 0xB0>;
interrupts = <12 0x8 13 0x8>; interrupts = <12 0x8 13 0x8>;
interrupt-parent = < &ipic >; interrupt-parent = < &ipic >;
fsl,cksel = <1>;
fsl,tclk-period = <10>; fsl,tclk-period = <10>;
fsl,tmr-prsc = <100>; fsl,tmr-prsc = <100>;
fsl,tmr-add = <0x999999A4>; fsl,tmr-add = <0x999999A4>;
......
...@@ -480,6 +480,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -480,6 +480,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
Format: <io>,<irq>,<mode> Format: <io>,<irq>,<mode>
See header of drivers/net/hamradio/baycom_ser_hdx.c. See header of drivers/net/hamradio/baycom_ser_hdx.c.
blkdevparts= Manual partition parsing of block device(s) for
embedded devices based on command line input.
See Documentation/block/cmdline-partition.txt
boot_delay= Milliseconds to delay each printk during boot. boot_delay= Milliseconds to delay each printk during boot.
Values larger than 10 seconds (10000) are changed to Values larger than 10 seconds (10000) are changed to
no delay (0). no delay (0).
...@@ -1357,7 +1361,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ...@@ -1357,7 +1361,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
pages. In the event, a node is too small to have both pages. In the event, a node is too small to have both
kernelcore and Movable pages, kernelcore pages will kernelcore and Movable pages, kernelcore pages will
take priority and other nodes will have a larger number take priority and other nodes will have a larger number
of kernelcore pages. The Movable zone is used for the of Movable pages. The Movable zone is used for the
allocation of pages that may be reclaimed or moved allocation of pages that may be reclaimed or moved
by the page migration subsystem. This means that by the page migration subsystem. This means that
HugeTLB pages may not be allocated from this zone. HugeTLB pages may not be allocated from this zone.
......
...@@ -824,15 +824,21 @@ S: Maintained ...@@ -824,15 +824,21 @@ S: Maintained
F: arch/arm/mach-gemini/ F: arch/arm/mach-gemini/
ARM/CSR SIRFPRIMA2 MACHINE SUPPORT ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
M: Barry Song <baohua.song@csr.com> M: Barry Song <baohua@kernel.org>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
T: git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git
S: Maintained S: Maintained
F: arch/arm/mach-prima2/ F: arch/arm/mach-prima2/
F: drivers/clk/clk-prima2.c
F: drivers/clocksource/timer-prima2.c
F: drivers/clocksource/timer-marco.c
F: drivers/dma/sirf-dma.c F: drivers/dma/sirf-dma.c
F: drivers/i2c/busses/i2c-sirf.c F: drivers/i2c/busses/i2c-sirf.c
F: drivers/input/misc/sirfsoc-onkey.c
F: drivers/irqchip/irq-sirfsoc.c
F: drivers/mmc/host/sdhci-sirf.c F: drivers/mmc/host/sdhci-sirf.c
F: drivers/pinctrl/sirf/ F: drivers/pinctrl/sirf/
F: drivers/rtc/rtc-sirfsoc.c
F: drivers/spi/spi-sirf.c F: drivers/spi/spi-sirf.c
ARM/EBSA110 MACHINE SUPPORT ARM/EBSA110 MACHINE SUPPORT
...@@ -4470,6 +4476,13 @@ L: linux-serial@vger.kernel.org ...@@ -4470,6 +4476,13 @@ L: linux-serial@vger.kernel.org
S: Maintained S: Maintained
F: drivers/tty/serial/ioc3_serial.c F: drivers/tty/serial/ioc3_serial.c
IOMMU DRIVERS
M: Joerg Roedel <joro@8bytes.org>
L: iommu@lists.linux-foundation.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
S: Maintained
F: drivers/iommu/
IP MASQUERADING IP MASQUERADING
M: Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar> M: Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
S: Maintained S: Maintained
...@@ -7271,9 +7284,9 @@ F: include/linux/sched.h ...@@ -7271,9 +7284,9 @@ F: include/linux/sched.h
F: include/uapi/linux/sched.h F: include/uapi/linux/sched.h
SCORE ARCHITECTURE SCORE ARCHITECTURE
M: Chen Liqin <liqin.chen@sunplusct.com> M: Chen Liqin <liqin.linux@gmail.com>
M: Lennox Wu <lennox.wu@gmail.com> M: Lennox Wu <lennox.wu@gmail.com>
W: http://www.sunplusct.com W: http://www.sunplus.com
S: Supported S: Supported
F: arch/score/ F: arch/score/
...@@ -9378,6 +9391,7 @@ F: arch/arm64/include/asm/xen/ ...@@ -9378,6 +9391,7 @@ F: arch/arm64/include/asm/xen/
XEN NETWORK BACKEND DRIVER XEN NETWORK BACKEND DRIVER
M: Ian Campbell <ian.campbell@citrix.com> M: Ian Campbell <ian.campbell@citrix.com>
M: Wei Liu <wei.liu2@citrix.com>
L: xen-devel@lists.xenproject.org (moderated for non-subscribers) L: xen-devel@lists.xenproject.org (moderated for non-subscribers)
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
S: Supported S: Supported
......
VERSION = 3 VERSION = 3
PATCHLEVEL = 12 PATCHLEVEL = 12
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc3 EXTRAVERSION = -rc4
NAME = One Giant Leap for Frogkind NAME = One Giant Leap for Frogkind
# *DOCUMENTATION* # *DOCUMENTATION*
......
...@@ -45,7 +45,14 @@ static inline int arch_spin_trylock(arch_spinlock_t *lock) ...@@ -45,7 +45,14 @@ static inline int arch_spin_trylock(arch_spinlock_t *lock)
static inline void arch_spin_unlock(arch_spinlock_t *lock) static inline void arch_spin_unlock(arch_spinlock_t *lock)
{ {
lock->slock = __ARCH_SPIN_LOCK_UNLOCKED__; unsigned int tmp = __ARCH_SPIN_LOCK_UNLOCKED__;
__asm__ __volatile__(
" ex %0, [%1] \n"
: "+r" (tmp)
: "r"(&(lock->slock))
: "memory");
smp_mb(); smp_mb();
} }
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
* Because it essentially checks if buffer end is within limit and @len is * Because it essentially checks if buffer end is within limit and @len is
* non-ngeative, which implies that buffer start will be within limit too. * non-ngeative, which implies that buffer start will be within limit too.
* *
* The reason for rewriting being, for majorit yof cases, @len is generally * The reason for rewriting being, for majority of cases, @len is generally
* compile time constant, causing first sub-expression to be compile time * compile time constant, causing first sub-expression to be compile time
* subsumed. * subsumed.
* *
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
* *
*/ */
#define __user_ok(addr, sz) (((sz) <= TASK_SIZE) && \ #define __user_ok(addr, sz) (((sz) <= TASK_SIZE) && \
(((addr)+(sz)) <= get_fs())) ((addr) <= (get_fs() - (sz))))
#define __access_ok(addr, sz) (unlikely(__kernel_ok) || \ #define __access_ok(addr, sz) (unlikely(__kernel_ok) || \
likely(__user_ok((addr), (sz)))) likely(__user_ok((addr), (sz))))
......
...@@ -101,7 +101,6 @@ SYSCALL_DEFINE0(rt_sigreturn) ...@@ -101,7 +101,6 @@ SYSCALL_DEFINE0(rt_sigreturn)
{ {
struct rt_sigframe __user *sf; struct rt_sigframe __user *sf;
unsigned int magic; unsigned int magic;
int err;
struct pt_regs *regs = current_pt_regs(); struct pt_regs *regs = current_pt_regs();
/* Always make any pending restarted system calls return -EINTR */ /* Always make any pending restarted system calls return -EINTR */
...@@ -119,15 +118,16 @@ SYSCALL_DEFINE0(rt_sigreturn) ...@@ -119,15 +118,16 @@ SYSCALL_DEFINE0(rt_sigreturn)
if (!access_ok(VERIFY_READ, sf, sizeof(*sf))) if (!access_ok(VERIFY_READ, sf, sizeof(*sf)))
goto badframe; goto badframe;
err = restore_usr_regs(regs, sf); if (__get_user(magic, &sf->sigret_magic))
err |= __get_user(magic, &sf->sigret_magic);
if (err)
goto badframe; goto badframe;
if (unlikely(is_do_ss_needed(magic))) if (unlikely(is_do_ss_needed(magic)))
if (restore_altstack(&sf->uc.uc_stack)) if (restore_altstack(&sf->uc.uc_stack))
goto badframe; goto badframe;
if (restore_usr_regs(regs, sf))
goto badframe;
/* Don't restart from sigreturn */ /* Don't restart from sigreturn */
syscall_wont_restart(regs); syscall_wont_restart(regs);
...@@ -190,6 +190,15 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info, ...@@ -190,6 +190,15 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info,
if (!sf) if (!sf)
return 1; return 1;
/*
* w/o SA_SIGINFO, struct ucontext is partially populated (only
* uc_mcontext/uc_sigmask) for kernel's normal user state preservation
* during signal handler execution. This works for SA_SIGINFO as well
* although the semantics are now overloaded (the same reg state can be
* inspected by userland: but are they allowed to fiddle with it ?
*/
err |= stash_usr_regs(sf, regs, set);
/* /*
* SA_SIGINFO requires 3 args to signal handler: * SA_SIGINFO requires 3 args to signal handler:
* #1: sig-no (common to any handler) * #1: sig-no (common to any handler)
...@@ -213,14 +222,6 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info, ...@@ -213,14 +222,6 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info,
magic = MAGIC_SIGALTSTK; magic = MAGIC_SIGALTSTK;
} }
/*
* w/o SA_SIGINFO, struct ucontext is partially populated (only
* uc_mcontext/uc_sigmask) for kernel's normal user state preservation
* during signal handler execution. This works for SA_SIGINFO as well
* although the semantics are now overloaded (the same reg state can be
* inspected by userland: but are they allowed to fiddle with it ?
*/
err |= stash_usr_regs(sf, regs, set);
err |= __put_user(magic, &sf->sigret_magic); err |= __put_user(magic, &sf->sigret_magic);
if (err) if (err)
return err; return err;
......
...@@ -227,12 +227,9 @@ void __attribute__((weak)) arc_local_timer_setup(unsigned int cpu) ...@@ -227,12 +227,9 @@ void __attribute__((weak)) arc_local_timer_setup(unsigned int cpu)
{ {
struct clock_event_device *clk = &per_cpu(arc_clockevent_device, cpu); struct clock_event_device *clk = &per_cpu(arc_clockevent_device, cpu);
clockevents_calc_mult_shift(clk, arc_get_core_freq(), 5);
clk->max_delta_ns = clockevent_delta2ns(ARC_TIMER_MAX, clk);
clk->cpumask = cpumask_of(cpu); clk->cpumask = cpumask_of(cpu);
clockevents_config_and_register(clk, arc_get_core_freq(),
clockevents_register_device(clk); 0, ARC_TIMER_MAX);
/* /*
* setup the per-cpu timer IRQ handler - for all cpus * setup the per-cpu timer IRQ handler - for all cpus
......
...@@ -245,6 +245,12 @@ int misaligned_fixup(unsigned long address, struct pt_regs *regs, ...@@ -245,6 +245,12 @@ int misaligned_fixup(unsigned long address, struct pt_regs *regs,
regs->status32 &= ~STATUS_DE_MASK; regs->status32 &= ~STATUS_DE_MASK;
} else { } else {
regs->ret += state.instr_len; regs->ret += state.instr_len;
/* handle zero-overhead-loop */
if ((regs->ret == regs->lp_end) && (regs->lp_count)) {
regs->ret = regs->lp_start;
regs->lp_count--;
}
} }
return 0; return 0;
......
...@@ -41,6 +41,8 @@ dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb ...@@ -41,6 +41,8 @@ dtb-$(CONFIG_ARCH_AT91) += sama5d33ek.dtb
dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb dtb-$(CONFIG_ARCH_AT91) += sama5d34ek.dtb
dtb-$(CONFIG_ARCH_AT91) += sama5d35ek.dtb dtb-$(CONFIG_ARCH_AT91) += sama5d35ek.dtb
dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb
dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \ dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \
bcm28155-ap.dtb bcm28155-ap.dtb
......
...@@ -27,6 +27,25 @@ ...@@ -27,6 +27,25 @@
}; };
soc { soc {
ranges = <MBUS_ID(0xf0, 0x01) 0 0xd0000000 0x100000
MBUS_ID(0x01, 0xe0) 0 0xfff00000 0x100000>;
pcie-controller {
status = "okay";
/* Connected to Marvell SATA controller */
pcie@1,0 {
/* Port 0, Lane 0 */
status = "okay";
};
/* Connected to FL1009 USB 3.0 controller */
pcie@2,0 {
/* Port 1, Lane 0 */
status = "okay";
};
};
internal-regs { internal-regs {
serial@12000 { serial@12000 {
clock-frequency = <200000000>; clock-frequency = <200000000>;
...@@ -57,6 +76,11 @@ ...@@ -57,6 +76,11 @@
marvell,pins = "mpp56"; marvell,pins = "mpp56";
marvell,function = "gpio"; marvell,function = "gpio";
}; };
poweroff: poweroff {
marvell,pins = "mpp8";
marvell,function = "gpio";
};
}; };
mdio { mdio {
...@@ -89,22 +113,6 @@ ...@@ -89,22 +113,6 @@
pwm_polarity = <0>; pwm_polarity = <0>;
}; };
}; };
pcie-controller {
status = "okay";
/* Connected to Marvell SATA controller */
pcie@1,0 {
/* Port 0, Lane 0 */
status = "okay";
};
/* Connected to FL1009 USB 3.0 controller */
pcie@2,0 {
/* Port 1, Lane 0 */
status = "okay";
};
};
}; };
}; };
...@@ -160,7 +168,7 @@ ...@@ -160,7 +168,7 @@
button@1 { button@1 {
label = "Power Button"; label = "Power Button";
linux,code = <116>; /* KEY_POWER */ linux,code = <116>; /* KEY_POWER */
gpios = <&gpio1 30 1>; gpios = <&gpio1 30 0>;
}; };
button@2 { button@2 {
...@@ -176,4 +184,11 @@ ...@@ -176,4 +184,11 @@
}; };
}; };
gpio_poweroff {
compatible = "gpio-poweroff";
pinctrl-0 = <&poweroff>;
pinctrl-names = "default";
gpios = <&gpio0 8 1>;
};
}; };
...@@ -70,6 +70,8 @@ ...@@ -70,6 +70,8 @@
timer@20300 { timer@20300 {
compatible = "marvell,armada-xp-timer"; compatible = "marvell,armada-xp-timer";
clocks = <&coreclk 2>, <&refclk>;
clock-names = "nbclk", "fixed";
}; };
coreclk: mvebu-sar@18230 { coreclk: mvebu-sar@18230 {
...@@ -169,4 +171,13 @@ ...@@ -169,4 +171,13 @@
}; };
}; };
}; };
clocks {
/* 25 MHz reference crystal */
refclk: oscillator {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <25000000>;
};
};
}; };
...@@ -190,12 +190,12 @@ ...@@ -190,12 +190,12 @@
AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>; /* PA8 periph A */ AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>; /* PA8 periph A */
}; };
pinctrl_uart2_rts: uart2_rts-0 { pinctrl_usart2_rts: usart2_rts-0 {
atmel,pins = atmel,pins =
<AT91_PIOB 0 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB0 periph B */ <AT91_PIOB 0 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB0 periph B */
}; };
pinctrl_uart2_cts: uart2_cts-0 { pinctrl_usart2_cts: usart2_cts-0 {
atmel,pins = atmel,pins =
<AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB1 periph B */ <AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>; /* PB1 periph B */
}; };
...@@ -556,6 +556,7 @@ ...@@ -556,6 +556,7 @@
interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>; interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>;
dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>; dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>;
dma-names = "rxtx"; dma-names = "rxtx";
pinctrl-names = "default";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
status = "disabled"; status = "disabled";
...@@ -567,6 +568,7 @@ ...@@ -567,6 +568,7 @@
interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>; interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>;
dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>; dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>;
dma-names = "rxtx"; dma-names = "rxtx";
pinctrl-names = "default";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
status = "disabled"; status = "disabled";
......
...@@ -181,6 +181,8 @@ ...@@ -181,6 +181,8 @@
interrupts = <17>; interrupts = <17>;
fifosize = <128>; fifosize = <128>;
clocks = <&clks 13>; clocks = <&clks 13>;
sirf,uart-dma-rx-channel = <21>;
sirf,uart-dma-tx-channel = <2>;
}; };
uart1: uart@b0060000 { uart1: uart@b0060000 {
...@@ -199,6 +201,8 @@ ...@@ -199,6 +201,8 @@
interrupts = <19>; interrupts = <19>;
fifosize = <128>; fifosize = <128>;
clocks = <&clks 15>; clocks = <&clks 15>;
sirf,uart-dma-rx-channel = <6>;
sirf,uart-dma-tx-channel = <7>;
}; };
usp0: usp@b0080000 { usp0: usp@b0080000 {
...@@ -206,7 +210,10 @@ ...@@ -206,7 +210,10 @@
compatible = "sirf,prima2-usp"; compatible = "sirf,prima2-usp";
reg = <0xb0080000 0x10000>; reg = <0xb0080000 0x10000>;
interrupts = <20>; interrupts = <20>;
fifosize = <128>;
clocks = <&clks 28>; clocks = <&clks 28>;
sirf,usp-dma-rx-channel = <17>;
sirf,usp-dma-tx-channel = <18>;
}; };
usp1: usp@b0090000 { usp1: usp@b0090000 {
...@@ -214,7 +221,10 @@ ...@@ -214,7 +221,10 @@
compatible = "sirf,prima2-usp"; compatible = "sirf,prima2-usp";
reg = <0xb0090000 0x10000>; reg = <0xb0090000 0x10000>;
interrupts = <21>; interrupts = <21>;
fifosize = <128>;
clocks = <&clks 29>; clocks = <&clks 29>;
sirf,usp-dma-rx-channel = <14>;
sirf,usp-dma-tx-channel = <15>;
}; };
dmac0: dma-controller@b00b0000 { dmac0: dma-controller@b00b0000 {
...@@ -237,6 +247,8 @@ ...@@ -237,6 +247,8 @@
compatible = "sirf,prima2-vip"; compatible = "sirf,prima2-vip";
reg = <0xb00C0000 0x10000>; reg = <0xb00C0000 0x10000>;
clocks = <&clks 31>; clocks = <&clks 31>;
interrupts = <14>;
sirf,vip-dma-rx-channel = <16>;
}; };
spi0: spi@b00d0000 { spi0: spi@b00d0000 {
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
cpu@0 { cpu@0 {
device_type = "cpu"; device_type = "cpu";
compatible = "marvell,feroceon"; compatible = "marvell,feroceon";
reg = <0>;
clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>; clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>;
clock-names = "cpu_clk", "ddrclk", "powersave"; clock-names = "cpu_clk", "ddrclk", "powersave";
}; };
...@@ -167,7 +168,7 @@ ...@@ -167,7 +168,7 @@
xor@60900 { xor@60900 {
compatible = "marvell,orion-xor"; compatible = "marvell,orion-xor";
reg = <0x60900 0x100 reg = <0x60900 0x100
0xd0B00 0x100>; 0x60B00 0x100>;
status = "okay"; status = "okay";
clocks = <&gate_clk 16>; clocks = <&gate_clk 16>;
......
...@@ -171,7 +171,8 @@ ...@@ -171,7 +171,8 @@
compatible = "simple-bus"; compatible = "simple-bus";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
ranges = <0xb0000000 0xb0000000 0x180000>; ranges = <0xb0000000 0xb0000000 0x180000>,
<0x56000000 0x56000000 0x1b00000>;
timer@b0020000 { timer@b0020000 {
compatible = "sirf,prima2-tick"; compatible = "sirf,prima2-tick";
...@@ -196,25 +197,32 @@ ...@@ -196,25 +197,32 @@
uart0: uart@b0050000 { uart0: uart@b0050000 {
cell-index = <0>; cell-index = <0>;
compatible = "sirf,prima2-uart"; compatible = "sirf,prima2-uart";
reg = <0xb0050000 0x10000>; reg = <0xb0050000 0x1000>;
interrupts = <17>; interrupts = <17>;
fifosize = <128>;
clocks = <&clks 13>; clocks = <&clks 13>;
sirf,uart-dma-rx-channel = <21>;
sirf,uart-dma-tx-channel = <2>;
}; };
uart1: uart@b0060000 { uart1: uart@b0060000 {
cell-index = <1>; cell-index = <1>;
compatible = "sirf,prima2-uart"; compatible = "sirf,prima2-uart";
reg = <0xb0060000 0x10000>; reg = <0xb0060000 0x1000>;
interrupts = <18>; interrupts = <18>;
fifosize = <32>;
clocks = <&clks 14>; clocks = <&clks 14>;
}; };
uart2: uart@b0070000 { uart2: uart@b0070000 {
cell-index = <2>; cell-index = <2>;
compatible = "sirf,prima2-uart"; compatible = "sirf,prima2-uart";
reg = <0xb0070000 0x10000>; reg = <0xb0070000 0x1000>;
interrupts = <19>; interrupts = <19>;
fifosize = <128>;
clocks = <&clks 15>; clocks = <&clks 15>;
sirf,uart-dma-rx-channel = <6>;
sirf,uart-dma-tx-channel = <7>;
}; };
usp0: usp@b0080000 { usp0: usp@b0080000 {
...@@ -222,7 +230,10 @@ ...@@ -222,7 +230,10 @@
compatible = "sirf,prima2-usp"; compatible = "sirf,prima2-usp";
reg = <0xb0080000 0x10000>; reg = <0xb0080000 0x10000>;
interrupts = <20>; interrupts = <20>;
fifosize = <128>;
clocks = <&clks 28>; clocks = <&clks 28>;
sirf,usp-dma-rx-channel = <17>;
sirf,usp-dma-tx-channel = <18>;
}; };
usp1: usp@b0090000 { usp1: usp@b0090000 {
...@@ -230,7 +241,10 @@ ...@@ -230,7 +241,10 @@
compatible = "sirf,prima2-usp"; compatible = "sirf,prima2-usp";
reg = <0xb0090000 0x10000>; reg = <0xb0090000 0x10000>;
interrupts = <21>; interrupts = <21>;
fifosize = <128>;
clocks = <&clks 29>; clocks = <&clks 29>;
sirf,usp-dma-rx-channel = <14>;
sirf,usp-dma-tx-channel = <15>;
}; };
usp2: usp@b00a0000 { usp2: usp@b00a0000 {
...@@ -238,7 +252,10 @@ ...@@ -238,7 +252,10 @@
compatible = "sirf,prima2-usp"; compatible = "sirf,prima2-usp";
reg = <0xb00a0000 0x10000>; reg = <0xb00a0000 0x10000>;
interrupts = <22>; interrupts = <22>;
fifosize = <128>;
clocks = <&clks 30>; clocks = <&clks 30>;
sirf,usp-dma-rx-channel = <10>;
sirf,usp-dma-tx-channel = <11>;
}; };
dmac0: dma-controller@b00b0000 { dmac0: dma-controller@b00b0000 {
...@@ -261,6 +278,8 @@ ...@@ -261,6 +278,8 @@
compatible = "sirf,prima2-vip"; compatible = "sirf,prima2-vip";
reg = <0xb00C0000 0x10000>; reg = <0xb00C0000 0x10000>;
clocks = <&clks 31>; clocks = <&clks 31>;
interrupts = <14>;
sirf,vip-dma-rx-channel = <16>;
}; };
spi0: spi@b00d0000 { spi0: spi@b00d0000 {
......
...@@ -193,7 +193,7 @@ ...@@ -193,7 +193,7 @@
}; };
sdhi0: sdhi@ee100000 { sdhi0: sdhi@ee100000 {
compatible = "renesas,r8a73a4-sdhi"; compatible = "renesas,sdhi-r8a73a4";
reg = <0 0xee100000 0 0x100>; reg = <0 0xee100000 0 0x100>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 165 4>; interrupts = <0 165 4>;
...@@ -202,7 +202,7 @@ ...@@ -202,7 +202,7 @@
}; };
sdhi1: sdhi@ee120000 { sdhi1: sdhi@ee120000 {
compatible = "renesas,r8a73a4-sdhi"; compatible = "renesas,sdhi-r8a73a4";
reg = <0 0xee120000 0 0x100>; reg = <0 0xee120000 0 0x100>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 166 4>; interrupts = <0 166 4>;
...@@ -211,7 +211,7 @@ ...@@ -211,7 +211,7 @@
}; };
sdhi2: sdhi@ee140000 { sdhi2: sdhi@ee140000 {
compatible = "renesas,r8a73a4-sdhi"; compatible = "renesas,sdhi-r8a73a4";
reg = <0 0xee140000 0 0x100>; reg = <0 0xee140000 0 0x100>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 167 4>; interrupts = <0 167 4>;
......
...@@ -96,6 +96,5 @@ ...@@ -96,6 +96,5 @@
pfc: pfc@fffc0000 { pfc: pfc@fffc0000 {
compatible = "renesas,pfc-r8a7778"; compatible = "renesas,pfc-r8a7778";
reg = <0xfffc000 0x118>; reg = <0xfffc000 0x118>;
#gpio-range-cells = <3>;
}; };
}; };
...@@ -188,7 +188,6 @@ ...@@ -188,7 +188,6 @@
pfc: pfc@fffc0000 { pfc: pfc@fffc0000 {
compatible = "renesas,pfc-r8a7779"; compatible = "renesas,pfc-r8a7779";
reg = <0xfffc0000 0x23c>; reg = <0xfffc0000 0x23c>;
#gpio-range-cells = <3>;
}; };
thermal@ffc48000 { thermal@ffc48000 {
......
...@@ -148,11 +148,10 @@ ...@@ -148,11 +148,10 @@
pfc: pfc@e6060000 { pfc: pfc@e6060000 {
compatible = "renesas,pfc-r8a7790"; compatible = "renesas,pfc-r8a7790";
reg = <0 0xe6060000 0 0x250>; reg = <0 0xe6060000 0 0x250>;
#gpio-range-cells = <3>;
}; };
sdhi0: sdhi@ee100000 { sdhi0: sdhi@ee100000 {
compatible = "renesas,r8a7790-sdhi"; compatible = "renesas,sdhi-r8a7790";
reg = <0 0xee100000 0 0x100>; reg = <0 0xee100000 0 0x100>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 165 4>; interrupts = <0 165 4>;
...@@ -161,7 +160,7 @@ ...@@ -161,7 +160,7 @@
}; };
sdhi1: sdhi@ee120000 { sdhi1: sdhi@ee120000 {
compatible = "renesas,r8a7790-sdhi"; compatible = "renesas,sdhi-r8a7790";
reg = <0 0xee120000 0 0x100>; reg = <0 0xee120000 0 0x100>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 166 4>; interrupts = <0 166 4>;
...@@ -170,7 +169,7 @@ ...@@ -170,7 +169,7 @@
}; };
sdhi2: sdhi@ee140000 { sdhi2: sdhi@ee140000 {
compatible = "renesas,r8a7790-sdhi"; compatible = "renesas,sdhi-r8a7790";
reg = <0 0xee140000 0 0x100>; reg = <0 0xee140000 0 0x100>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 167 4>; interrupts = <0 167 4>;
...@@ -179,7 +178,7 @@ ...@@ -179,7 +178,7 @@
}; };
sdhi3: sdhi@ee160000 { sdhi3: sdhi@ee160000 {
compatible = "renesas,r8a7790-sdhi"; compatible = "renesas,sdhi-r8a7790";
reg = <0 0xee160000 0 0x100>; reg = <0 0xee160000 0 0x100>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 168 4>; interrupts = <0 168 4>;
......
...@@ -196,7 +196,7 @@ ...@@ -196,7 +196,7 @@
}; };
sdhi0: sdhi@ee100000 { sdhi0: sdhi@ee100000 {
compatible = "renesas,r8a7740-sdhi"; compatible = "renesas,sdhi-r8a7740";
reg = <0xee100000 0x100>; reg = <0xee100000 0x100>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 83 4 interrupts = <0 83 4
...@@ -208,7 +208,7 @@ ...@@ -208,7 +208,7 @@
/* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */ /* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
sdhi1: sdhi@ee120000 { sdhi1: sdhi@ee120000 {
compatible = "renesas,r8a7740-sdhi"; compatible = "renesas,sdhi-r8a7740";
reg = <0xee120000 0x100>; reg = <0xee120000 0x100>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 88 4 interrupts = <0 88 4
...@@ -219,7 +219,7 @@ ...@@ -219,7 +219,7 @@
}; };
sdhi2: sdhi@ee140000 { sdhi2: sdhi@ee140000 {
compatible = "renesas,r8a7740-sdhi"; compatible = "renesas,sdhi-r8a7740";
reg = <0xee140000 0x100>; reg = <0xee140000 0x100>;
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
interrupts = <0 104 4 interrupts = <0 104 4
......
...@@ -269,6 +269,11 @@ static const struct edmacc_param dummy_paramset = { ...@@ -269,6 +269,11 @@ static const struct edmacc_param dummy_paramset = {
.ccnt = 1, .ccnt = 1,
}; };
static const struct of_device_id edma_of_ids[] = {
{ .compatible = "ti,edma3", },
{}
};
/*****************************************************************************/ /*****************************************************************************/
static void map_dmach_queue(unsigned ctlr, unsigned ch_no, static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
...@@ -560,14 +565,38 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id, ...@@ -560,14 +565,38 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
static int prepare_unused_channel_list(struct device *dev, void *data) static int prepare_unused_channel_list(struct device *dev, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
int i, ctlr; int i, count, ctlr;
struct of_phandle_args dma_spec;
if (dev->of_node) {
count = of_property_count_strings(dev->of_node, "dma-names");
if (count < 0)
return 0;
for (i = 0; i < count; i++) {
if (of_parse_phandle_with_args(dev->of_node, "dmas",
"#dma-cells", i,
&dma_spec))
continue;
if (!of_match_node(edma_of_ids, dma_spec.np)) {
of_node_put(dma_spec.np);
continue;
}
clear_bit(EDMA_CHAN_SLOT(dma_spec.args[0]),
edma_cc[0]->edma_unused);
of_node_put(dma_spec.np);
}
return 0;
}
/* For non-OF case */
for (i = 0; i < pdev->num_resources; i++) { for (i = 0; i < pdev->num_resources; i++) {
if ((pdev->resource[i].flags & IORESOURCE_DMA) && if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
(int)pdev->resource[i].start >= 0) { (int)pdev->resource[i].start >= 0) {
ctlr = EDMA_CTLR(pdev->resource[i].start); ctlr = EDMA_CTLR(pdev->resource[i].start);
clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start), clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
edma_cc[ctlr]->edma_unused); edma_cc[ctlr]->edma_unused);
} }
} }
...@@ -1762,11 +1791,6 @@ static int edma_probe(struct platform_device *pdev) ...@@ -1762,11 +1791,6 @@ static int edma_probe(struct platform_device *pdev)
return 0; return 0;
} }
static const struct of_device_id edma_of_ids[] = {
{ .compatible = "ti,edma3", },
{}
};
static struct platform_driver edma_driver = { static struct platform_driver edma_driver = {
.driver = { .driver = {
.name = "edma", .name = "edma",
......
...@@ -135,6 +135,7 @@ CONFIG_MMC=y ...@@ -135,6 +135,7 @@ CONFIG_MMC=y
CONFIG_MMC_ARMMMCI=y CONFIG_MMC_ARMMMCI=y
CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_ESDHC_IMX=y
CONFIG_MMC_SDHCI_TEGRA=y CONFIG_MMC_SDHCI_TEGRA=y
CONFIG_MMC_SDHCI_SPEAR=y CONFIG_MMC_SDHCI_SPEAR=y
CONFIG_MMC_OMAP=y CONFIG_MMC_OMAP=y
......
...@@ -58,14 +58,14 @@ static const struct kvm_irq_level a15_vtimer_irq = { ...@@ -58,14 +58,14 @@ static const struct kvm_irq_level a15_vtimer_irq = {
*/ */
int kvm_reset_vcpu(struct kvm_vcpu *vcpu) int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
{ {
struct kvm_regs *cpu_reset; struct kvm_regs *reset_regs;
const struct kvm_irq_level *cpu_vtimer_irq; const struct kvm_irq_level *cpu_vtimer_irq;
switch (vcpu->arch.target) { switch (vcpu->arch.target) {
case KVM_ARM_TARGET_CORTEX_A15: case KVM_ARM_TARGET_CORTEX_A15:
if (vcpu->vcpu_id > a15_max_cpu_idx) if (vcpu->vcpu_id > a15_max_cpu_idx)
return -EINVAL; return -EINVAL;
cpu_reset = &a15_regs_reset; reset_regs = &a15_regs_reset;
vcpu->arch.midr = read_cpuid_id(); vcpu->arch.midr = read_cpuid_id();
cpu_vtimer_irq = &a15_vtimer_irq; cpu_vtimer_irq = &a15_vtimer_irq;
break; break;
...@@ -74,7 +74,7 @@ int kvm_reset_vcpu(struct kvm_vcpu *vcpu) ...@@ -74,7 +74,7 @@ int kvm_reset_vcpu(struct kvm_vcpu *vcpu)
} }
/* Reset core registers */ /* Reset core registers */
memcpy(&vcpu->arch.regs, cpu_reset, sizeof(vcpu->arch.regs)); memcpy(&vcpu->arch.regs, reset_regs, sizeof(vcpu->arch.regs));
/* Reset CP15 registers */ /* Reset CP15 registers */
kvm_reset_coprocs(vcpu); kvm_reset_coprocs(vcpu);
......
...@@ -93,7 +93,7 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id) ...@@ -93,7 +93,7 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id)
static struct irqaction at91rm9200_timer_irq = { static struct irqaction at91rm9200_timer_irq = {
.name = "at91_tick", .name = "at91_tick",
.flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, .flags = IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
.handler = at91rm9200_timer_interrupt, .handler = at91rm9200_timer_interrupt,
.irq = NR_IRQS_LEGACY + AT91_ID_SYS, .irq = NR_IRQS_LEGACY + AT91_ID_SYS,
}; };
......
...@@ -171,7 +171,7 @@ static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id) ...@@ -171,7 +171,7 @@ static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id)
static struct irqaction at91sam926x_pit_irq = { static struct irqaction at91sam926x_pit_irq = {
.name = "at91_tick", .name = "at91_tick",
.flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, .flags = IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
.handler = at91sam926x_pit_interrupt, .handler = at91sam926x_pit_interrupt,
.irq = NR_IRQS_LEGACY + AT91_ID_SYS, .irq = NR_IRQS_LEGACY + AT91_ID_SYS,
}; };
......
...@@ -16,11 +16,17 @@ ...@@ -16,11 +16,17 @@
#include "at91_rstc.h" #include "at91_rstc.h"
.arm .arm
/*
* at91_ramc_base is an array void*
* init at NULL if only one DDR controler is present in or DT
*/
.globl at91sam9g45_restart .globl at91sam9g45_restart
at91sam9g45_restart: at91sam9g45_restart:
ldr r5, =at91_ramc_base @ preload constants ldr r5, =at91_ramc_base @ preload constants
ldr r0, [r5] ldr r0, [r5]
ldr r5, [r5, #4] @ ddr1
cmp r5, #0
ldr r4, =at91_rstc_base ldr r4, =at91_rstc_base
ldr r1, [r4] ldr r1, [r4]
...@@ -30,6 +36,8 @@ at91sam9g45_restart: ...@@ -30,6 +36,8 @@ at91sam9g45_restart:
.balign 32 @ align to cache line .balign 32 @ align to cache line
strne r2, [r5, #AT91_DDRSDRC_RTR] @ disable DDR1 access
strne r3, [r5, #AT91_DDRSDRC_LPR] @ power down DDR1
str r2, [r0, #AT91_DDRSDRC_RTR] @ disable DDR0 access str r2, [r0, #AT91_DDRSDRC_RTR] @ disable DDR0 access
str r3, [r0, #AT91_DDRSDRC_LPR] @ power down DDR0 str r3, [r0, #AT91_DDRSDRC_LPR] @ power down DDR0
str r4, [r1, #AT91_RSTC_CR] @ reset processor str r4, [r1, #AT91_RSTC_CR] @ reset processor
......
...@@ -57,7 +57,7 @@ static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id) ...@@ -57,7 +57,7 @@ static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id)
static struct irqaction at91x40_timer_irq = { static struct irqaction at91x40_timer_irq = {
.name = "at91_tick", .name = "at91_tick",
.flags = IRQF_DISABLED | IRQF_TIMER, .flags = IRQF_TIMER,
.handler = at91x40_timer_interrupt .handler = at91x40_timer_interrupt
}; };
......
...@@ -176,7 +176,7 @@ static struct at24_platform_data eeprom_info = { ...@@ -176,7 +176,7 @@ static struct at24_platform_data eeprom_info = {
.context = (void *)0x7f00, .context = (void *)0x7f00,
}; };
static struct snd_platform_data dm365_evm_snd_data = { static struct snd_platform_data dm365_evm_snd_data __maybe_unused = {
.asp_chan_q = EVENTQ_3, .asp_chan_q = EVENTQ_3,
}; };
......
...@@ -15,8 +15,6 @@ ...@@ -15,8 +15,6 @@
#include <mach/hardware.h> #include <mach/hardware.h>
#include <linux/platform_device.h>
#define DAVINCI_UART0_BASE (IO_PHYS + 0x20000) #define DAVINCI_UART0_BASE (IO_PHYS + 0x20000)
#define DAVINCI_UART1_BASE (IO_PHYS + 0x20400) #define DAVINCI_UART1_BASE (IO_PHYS + 0x20400)
#define DAVINCI_UART2_BASE (IO_PHYS + 0x20800) #define DAVINCI_UART2_BASE (IO_PHYS + 0x20800)
...@@ -39,6 +37,8 @@ ...@@ -39,6 +37,8 @@
#define UART_DM646X_SCR_TX_WATERMARK 0x08 #define UART_DM646X_SCR_TX_WATERMARK 0x08
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#include <linux/platform_device.h>
extern int davinci_serial_init(struct platform_device *); extern int davinci_serial_init(struct platform_device *);
#endif #endif
......
/* Simple oneliner include to the PCIv3 early init */ /* Simple oneliner include to the PCIv3 early init */
#ifdef CONFIG_PCI
extern int pci_v3_early_init(void); extern int pci_v3_early_init(void);
#else
static inline int pci_v3_early_init(void)
{
return 0;
}
#endif
...@@ -140,6 +140,7 @@ int __init coherency_init(void) ...@@ -140,6 +140,7 @@ int __init coherency_init(void)
coherency_base = of_iomap(np, 0); coherency_base = of_iomap(np, 0);
coherency_cpu_base = of_iomap(np, 1); coherency_cpu_base = of_iomap(np, 1);
set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0); set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
of_node_put(np);
} }
return 0; return 0;
...@@ -147,9 +148,14 @@ int __init coherency_init(void) ...@@ -147,9 +148,14 @@ int __init coherency_init(void)
static int __init coherency_late_init(void) static int __init coherency_late_init(void)
{ {
if (of_find_matching_node(NULL, of_coherency_table)) struct device_node *np;
np = of_find_matching_node(NULL, of_coherency_table);
if (np) {
bus_register_notifier(&platform_bus_type, bus_register_notifier(&platform_bus_type,
&mvebu_hwcc_platform_nb); &mvebu_hwcc_platform_nb);
of_node_put(np);
}
return 0; return 0;
} }
......
...@@ -67,6 +67,7 @@ int __init armada_370_xp_pmsu_init(void) ...@@ -67,6 +67,7 @@ int __init armada_370_xp_pmsu_init(void)
pr_info("Initializing Power Management Service Unit\n"); pr_info("Initializing Power Management Service Unit\n");
pmsu_mp_base = of_iomap(np, 0); pmsu_mp_base = of_iomap(np, 0);
pmsu_reset_base = of_iomap(np, 1); pmsu_reset_base = of_iomap(np, 1);
of_node_put(np);
} }
return 0; return 0;
......
...@@ -98,6 +98,7 @@ static int __init mvebu_system_controller_init(void) ...@@ -98,6 +98,7 @@ static int __init mvebu_system_controller_init(void)
BUG_ON(!match); BUG_ON(!match);
system_controller_base = of_iomap(np, 0); system_controller_base = of_iomap(np, 0);
mvebu_sc = (struct mvebu_system_controller *)match->data; mvebu_sc = (struct mvebu_system_controller *)match->data;
of_node_put(np);
} }
return 0; return 0;
......
...@@ -1108,9 +1108,9 @@ static const struct pinctrl_map eva_pinctrl_map[] = { ...@@ -1108,9 +1108,9 @@ static const struct pinctrl_map eva_pinctrl_map[] = {
PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740", PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740",
"fsib_mclk_in", "fsib"), "fsib_mclk_in", "fsib"),
/* GETHER */ /* GETHER */
PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740", PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740",
"gether_mii", "gether"), "gether_mii", "gether"),
PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740", PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740",
"gether_int", "gether"), "gether_int", "gether"),
/* HDMI */ /* HDMI */
PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740", PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/pinctrl/machine.h> #include <linux/pinctrl/machine.h>
#include <linux/platform_data/gpio-rcar.h> #include <linux/platform_data/gpio-rcar.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/phy.h>
#include <linux/regulator/fixed.h> #include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h> #include <linux/regulator/machine.h>
#include <linux/sh_eth.h> #include <linux/sh_eth.h>
...@@ -155,6 +156,30 @@ static void __init lager_add_standard_devices(void) ...@@ -155,6 +156,30 @@ static void __init lager_add_standard_devices(void)
&ether_pdata, sizeof(ether_pdata)); &ether_pdata, sizeof(ether_pdata));
} }
/*
* Ether LEDs on the Lager board are named LINK and ACTIVE which corresponds
* to non-default 01 setting of the Micrel KSZ8041 PHY control register 1 bits
* 14-15. We have to set them back to 01 from the default 00 value each time
* the PHY is reset. It's also important because the PHY's LED0 signal is
* connected to SoC's ETH_LINK signal and in the PHY's default mode it will
* bounce on and off after each packet, which we apparently want to avoid.
*/
static int lager_ksz8041_fixup(struct phy_device *phydev)
{
u16 phyctrl1 = phy_read(phydev, 0x1e);
phyctrl1 &= ~0xc000;
phyctrl1 |= 0x4000;
return phy_write(phydev, 0x1e, phyctrl1);
}
static void __init lager_init(void)
{
lager_add_standard_devices();
phy_register_fixup_for_id("r8a7790-ether-ff:01", lager_ksz8041_fixup);
}
static const char *lager_boards_compat_dt[] __initdata = { static const char *lager_boards_compat_dt[] __initdata = {
"renesas,lager", "renesas,lager",
NULL, NULL,
...@@ -163,6 +188,6 @@ static const char *lager_boards_compat_dt[] __initdata = { ...@@ -163,6 +188,6 @@ static const char *lager_boards_compat_dt[] __initdata = {
DT_MACHINE_START(LAGER_DT, "lager") DT_MACHINE_START(LAGER_DT, "lager")
.init_early = r8a7790_init_delay, .init_early = r8a7790_init_delay,
.init_time = r8a7790_timer_init, .init_time = r8a7790_timer_init,
.init_machine = lager_add_standard_devices, .init_machine = lager_init,
.dt_compat = lager_boards_compat_dt, .dt_compat = lager_boards_compat_dt,
MACHINE_END MACHINE_END
...@@ -131,6 +131,16 @@ static void tc2_pm_down(u64 residency) ...@@ -131,6 +131,16 @@ static void tc2_pm_down(u64 residency)
} else } else
BUG(); BUG();
/*
* If the CPU is committed to power down, make sure
* the power controller will be in charge of waking it
* up upon IRQ, ie IRQ lines are cut from GIC CPU IF
* to the CPU by disabling the GIC CPU IF to prevent wfi
* from completing execution behind power controller back
*/
if (!skip_wfi)
gic_cpu_if_down();
if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) { if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) {
arch_spin_unlock(&tc2_pm_lock); arch_spin_unlock(&tc2_pm_lock);
...@@ -231,7 +241,6 @@ static void tc2_pm_suspend(u64 residency) ...@@ -231,7 +241,6 @@ static void tc2_pm_suspend(u64 residency)
cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point)); ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point));
gic_cpu_if_down();
tc2_pm_down(residency); tc2_pm_down(residency);
} }
......
...@@ -6,13 +6,6 @@ config FRAME_POINTER ...@@ -6,13 +6,6 @@ config FRAME_POINTER
bool bool
default y default y
config DEBUG_STACK_USAGE
bool "Enable stack utilization instrumentation"
depends on DEBUG_KERNEL
help
Enables the display of the minimum amount of free stack which each
task has ever had available in the sysrq-T output.
config EARLY_PRINTK config EARLY_PRINTK
bool "Early printk support" bool "Early printk support"
default y default y
......
...@@ -42,7 +42,7 @@ CONFIG_IP_PNP_BOOTP=y ...@@ -42,7 +42,7 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_WIRELESS is not set # CONFIG_WIRELESS is not set
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS=y
# CONFIG_BLK_DEV is not set CONFIG_BLK_DEV=y
CONFIG_SCSI=y CONFIG_SCSI=y
# CONFIG_SCSI_PROC_FS is not set # CONFIG_SCSI_PROC_FS is not set
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
...@@ -72,6 +72,7 @@ CONFIG_LOGO=y ...@@ -72,6 +72,7 @@ CONFIG_LOGO=y
# CONFIG_IOMMU_SUPPORT is not set # CONFIG_IOMMU_SUPPORT is not set
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
CONFIG_EXT4_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
# CONFIG_EXT3_FS_XATTR is not set # CONFIG_EXT3_FS_XATTR is not set
CONFIG_FUSE_FS=y CONFIG_FUSE_FS=y
...@@ -90,3 +91,5 @@ CONFIG_DEBUG_KERNEL=y ...@@ -90,3 +91,5 @@ CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO=y
# CONFIG_FTRACE is not set # CONFIG_FTRACE is not set
CONFIG_ATOMIC64_SELFTEST=y CONFIG_ATOMIC64_SELFTEST=y
CONFIG_VIRTIO_MMIO=y
CONFIG_VIRTIO_BLK=y
...@@ -166,9 +166,10 @@ do { \ ...@@ -166,9 +166,10 @@ do { \
#define get_user(x, ptr) \ #define get_user(x, ptr) \
({ \ ({ \
__typeof__(*(ptr)) __user *__p = (ptr); \
might_fault(); \ might_fault(); \
access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) ? \ access_ok(VERIFY_READ, __p, sizeof(*__p)) ? \
__get_user((x), (ptr)) : \ __get_user((x), __p) : \
((x) = 0, -EFAULT); \ ((x) = 0, -EFAULT); \
}) })
...@@ -227,9 +228,10 @@ do { \ ...@@ -227,9 +228,10 @@ do { \
#define put_user(x, ptr) \ #define put_user(x, ptr) \
({ \ ({ \
__typeof__(*(ptr)) __user *__p = (ptr); \
might_fault(); \ might_fault(); \
access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) ? \ access_ok(VERIFY_WRITE, __p, sizeof(*__p)) ? \
__put_user((x), (ptr)) : \ __put_user((x), __p) : \
-EFAULT; \ -EFAULT; \
}) })
......
...@@ -80,8 +80,10 @@ void fpsimd_thread_switch(struct task_struct *next) ...@@ -80,8 +80,10 @@ void fpsimd_thread_switch(struct task_struct *next)
void fpsimd_flush_thread(void) void fpsimd_flush_thread(void)
{ {
preempt_disable();
memset(&current->thread.fpsimd_state, 0, sizeof(struct fpsimd_state)); memset(&current->thread.fpsimd_state, 0, sizeof(struct fpsimd_state));
fpsimd_load_state(&current->thread.fpsimd_state); fpsimd_load_state(&current->thread.fpsimd_state);
preempt_enable();
} }
#ifdef CONFIG_KERNEL_MODE_NEON #ifdef CONFIG_KERNEL_MODE_NEON
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
*/ */
ENTRY(__cpu_flush_user_tlb_range) ENTRY(__cpu_flush_user_tlb_range)
vma_vm_mm x3, x2 // get vma->vm_mm vma_vm_mm x3, x2 // get vma->vm_mm
mmid x3, x3 // get vm_mm->context.id mmid w3, x3 // get vm_mm->context.id
dsb sy dsb sy
lsr x0, x0, #12 // align address lsr x0, x0, #12 // align address
lsr x1, x1, #12 lsr x1, x1, #12
......
generic-y += clkdev.h generic-y += clkdev.h
generic-y += cputime.h
generic-y += delay.h
generic-y += device.h
generic-y += div64.h
generic-y += emergency-restart.h
generic-y += exec.h generic-y += exec.h
generic-y += trace_clock.h generic-y += futex.h
generic-y += irq_regs.h
generic-y += param.h generic-y += param.h
generic-y += local.h
generic-y += local64.h
generic-y += percpu.h
generic-y += scatterlist.h
generic-y += sections.h
generic-y += topology.h
generic-y += trace_clock.h
generic-y += xor.h
#ifndef __ASM_AVR32_CPUTIME_H
#define __ASM_AVR32_CPUTIME_H
#include <asm-generic/cputime.h>
#endif /* __ASM_AVR32_CPUTIME_H */
#include <asm-generic/delay.h>
/*
* Arch specific extensions to struct device
*
* This file is released under the GPLv2
*/
#include <asm-generic/device.h>
#ifndef __ASM_AVR32_DIV64_H
#define __ASM_AVR32_DIV64_H
#include <asm-generic/div64.h>
#endif /* __ASM_AVR32_DIV64_H */
#ifndef __ASM_AVR32_EMERGENCY_RESTART_H
#define __ASM_AVR32_EMERGENCY_RESTART_H
#include <asm-generic/emergency-restart.h>
#endif /* __ASM_AVR32_EMERGENCY_RESTART_H */
#ifndef __ASM_AVR32_FUTEX_H
#define __ASM_AVR32_FUTEX_H
#include <asm-generic/futex.h>
#endif /* __ASM_AVR32_FUTEX_H */
#include <asm-generic/irq_regs.h>
#ifndef __ASM_AVR32_LOCAL_H
#define __ASM_AVR32_LOCAL_H
#include <asm-generic/local.h>
#endif /* __ASM_AVR32_LOCAL_H */
#include <asm-generic/local64.h>
#ifndef __ASM_AVR32_PERCPU_H
#define __ASM_AVR32_PERCPU_H
#include <asm-generic/percpu.h>
#endif /* __ASM_AVR32_PERCPU_H */
#ifndef __ASM_AVR32_SCATTERLIST_H
#define __ASM_AVR32_SCATTERLIST_H
#include <asm-generic/scatterlist.h>
#endif /* __ASM_AVR32_SCATTERLIST_H */
#ifndef __ASM_AVR32_SECTIONS_H
#define __ASM_AVR32_SECTIONS_H
#include <asm-generic/sections.h>
#endif /* __ASM_AVR32_SECTIONS_H */
#ifndef __ASM_AVR32_TOPOLOGY_H
#define __ASM_AVR32_TOPOLOGY_H
#include <asm-generic/topology.h>
#endif /* __ASM_AVR32_TOPOLOGY_H */
#ifndef _ASM_XOR_H
#define _ASM_XOR_H
#include <asm-generic/xor.h>
#endif
...@@ -289,7 +289,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, ...@@ -289,7 +289,7 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
memset(childregs, 0, sizeof(struct pt_regs)); memset(childregs, 0, sizeof(struct pt_regs));
p->thread.cpu_context.r0 = arg; p->thread.cpu_context.r0 = arg;
p->thread.cpu_context.r1 = usp; /* fn */ p->thread.cpu_context.r1 = usp; /* fn */
p->thread.cpu_context.r2 = syscall_return; p->thread.cpu_context.r2 = (unsigned long)syscall_return;
p->thread.cpu_context.pc = (unsigned long)ret_from_kernel_thread; p->thread.cpu_context.pc = (unsigned long)ret_from_kernel_thread;
childregs->sr = MODE_SUPERVISOR; childregs->sr = MODE_SUPERVISOR;
} else { } else {
......
...@@ -98,7 +98,14 @@ static void comparator_mode(enum clock_event_mode mode, ...@@ -98,7 +98,14 @@ static void comparator_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_SHUTDOWN: case CLOCK_EVT_MODE_SHUTDOWN:
sysreg_write(COMPARE, 0); sysreg_write(COMPARE, 0);
pr_debug("%s: stop\n", evdev->name); pr_debug("%s: stop\n", evdev->name);
cpu_idle_poll_ctrl(false); if (evdev->mode == CLOCK_EVT_MODE_ONESHOT ||
evdev->mode == CLOCK_EVT_MODE_RESUME) {
/*
* Only disable idle poll if we have forced that
* in a previous call.
*/
cpu_idle_poll_ctrl(false);
}
break; break;
default: default:
BUG(); BUG();
......
...@@ -276,7 +276,7 @@ static struct platform_device mtx1_pci_host = { ...@@ -276,7 +276,7 @@ static struct platform_device mtx1_pci_host = {
.resource = alchemy_pci_host_res, .resource = alchemy_pci_host_res,
}; };
static struct __initdata platform_device * mtx1_devs[] = { static struct platform_device *mtx1_devs[] __initdata = {
&mtx1_pci_host, &mtx1_pci_host,
&mtx1_gpio_leds, &mtx1_gpio_leds,
&mtx1_wdt, &mtx1_wdt,
......
...@@ -609,6 +609,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size) ...@@ -609,6 +609,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
r4k_blast_scache(); r4k_blast_scache();
else else
blast_scache_range(addr, addr + size); blast_scache_range(addr, addr + size);
preempt_enable();
__sync(); __sync();
return; return;
} }
...@@ -650,6 +651,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size) ...@@ -650,6 +651,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
*/ */
blast_inv_scache_range(addr, addr + size); blast_inv_scache_range(addr, addr + size);
} }
preempt_enable();
__sync(); __sync();
return; return;
} }
......
...@@ -182,6 +182,9 @@ void do_page_fault(struct pt_regs *regs, unsigned long code, ...@@ -182,6 +182,9 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
if (user_mode(regs)) if (user_mode(regs))
flags |= FAULT_FLAG_USER; flags |= FAULT_FLAG_USER;
acc_type = parisc_acctyp(code, regs->iir);
if (acc_type & VM_WRITE) if (acc_type & VM_WRITE)
flags |= FAULT_FLAG_WRITE; flags |= FAULT_FLAG_WRITE;
retry: retry:
...@@ -196,8 +199,6 @@ void do_page_fault(struct pt_regs *regs, unsigned long code, ...@@ -196,8 +199,6 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
good_area: good_area:
acc_type = parisc_acctyp(code,regs->iir);
if ((vma->vm_flags & acc_type) != acc_type) if ((vma->vm_flags & acc_type) != acc_type)
goto bad_area; goto bad_area;
......
...@@ -661,7 +661,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid) ...@@ -661,7 +661,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid)
/* number of bytes needed for the bitmap */ /* number of bytes needed for the bitmap */
sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long); sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz)); page = alloc_pages_node(nid, GFP_KERNEL, get_order(sz));
if (!page) if (!page)
panic("iommu_init_table: Can't allocate %ld bytes\n", sz); panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
tbl->it_map = page_address(page); tbl->it_map = page_address(page);
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/smp.h> #include <asm/smp.h>
#include <asm/pmc.h> #include <asm/pmc.h>
#include <asm/firmware.h>
#include "cacheinfo.h" #include "cacheinfo.h"
...@@ -179,15 +180,25 @@ SYSFS_PMCSETUP(spurr, SPRN_SPURR); ...@@ -179,15 +180,25 @@ SYSFS_PMCSETUP(spurr, SPRN_SPURR);
SYSFS_PMCSETUP(dscr, SPRN_DSCR); SYSFS_PMCSETUP(dscr, SPRN_DSCR);
SYSFS_PMCSETUP(pir, SPRN_PIR); SYSFS_PMCSETUP(pir, SPRN_PIR);
/*
Lets only enable read for phyp resources and
enable write when needed with a separate function.
Lets be conservative and default to pseries.
*/
static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra); static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);
static DEVICE_ATTR(spurr, 0400, show_spurr, NULL); static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr); static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr);
static DEVICE_ATTR(purr, 0600, show_purr, store_purr); static DEVICE_ATTR(purr, 0400, show_purr, store_purr);
static DEVICE_ATTR(pir, 0400, show_pir, NULL); static DEVICE_ATTR(pir, 0400, show_pir, NULL);
unsigned long dscr_default = 0; unsigned long dscr_default = 0;
EXPORT_SYMBOL(dscr_default); EXPORT_SYMBOL(dscr_default);
static void add_write_permission_dev_attr(struct device_attribute *attr)
{
attr->attr.mode |= 0200;
}
static ssize_t show_dscr_default(struct device *dev, static ssize_t show_dscr_default(struct device *dev,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
{ {
...@@ -394,8 +405,11 @@ static void register_cpu_online(unsigned int cpu) ...@@ -394,8 +405,11 @@ static void register_cpu_online(unsigned int cpu)
if (cpu_has_feature(CPU_FTR_MMCRA)) if (cpu_has_feature(CPU_FTR_MMCRA))
device_create_file(s, &dev_attr_mmcra); device_create_file(s, &dev_attr_mmcra);
if (cpu_has_feature(CPU_FTR_PURR)) if (cpu_has_feature(CPU_FTR_PURR)) {
if (!firmware_has_feature(FW_FEATURE_LPAR))
add_write_permission_dev_attr(&dev_attr_purr);
device_create_file(s, &dev_attr_purr); device_create_file(s, &dev_attr_purr);
}
if (cpu_has_feature(CPU_FTR_SPURR)) if (cpu_has_feature(CPU_FTR_SPURR))
device_create_file(s, &dev_attr_spurr); device_create_file(s, &dev_attr_spurr);
......
...@@ -79,6 +79,11 @@ _GLOBAL(tm_abort) ...@@ -79,6 +79,11 @@ _GLOBAL(tm_abort)
TABORT(R3) TABORT(R3)
blr blr
.section ".toc","aw"
DSCR_DEFAULT:
.tc dscr_default[TC],dscr_default
.section ".text"
/* void tm_reclaim(struct thread_struct *thread, /* void tm_reclaim(struct thread_struct *thread,
* unsigned long orig_msr, * unsigned long orig_msr,
...@@ -123,6 +128,7 @@ _GLOBAL(tm_reclaim) ...@@ -123,6 +128,7 @@ _GLOBAL(tm_reclaim)
mr r15, r14 mr r15, r14
ori r15, r15, MSR_FP ori r15, r15, MSR_FP
li r16, MSR_RI li r16, MSR_RI
ori r16, r16, MSR_EE /* IRQs hard off */
andc r15, r15, r16 andc r15, r15, r16
oris r15, r15, MSR_VEC@h oris r15, r15, MSR_VEC@h
#ifdef CONFIG_VSX #ifdef CONFIG_VSX
...@@ -187,11 +193,18 @@ dont_backup_fp: ...@@ -187,11 +193,18 @@ dont_backup_fp:
std r1, PACATMSCRATCH(r13) std r1, PACATMSCRATCH(r13)
ld r1, PACAR1(r13) ld r1, PACAR1(r13)
/* Store the PPR in r11 and reset to decent value */
std r11, GPR11(r1) /* Temporary stash */
mfspr r11, SPRN_PPR
HMT_MEDIUM
/* Now get some more GPRS free */ /* Now get some more GPRS free */
std r7, GPR7(r1) /* Temporary stash */ std r7, GPR7(r1) /* Temporary stash */
std r12, GPR12(r1) /* '' '' '' */ std r12, GPR12(r1) /* '' '' '' */
ld r12, STACK_PARAM(0)(r1) /* Param 0, thread_struct * */ ld r12, STACK_PARAM(0)(r1) /* Param 0, thread_struct * */
std r11, THREAD_TM_PPR(r12) /* Store PPR and free r11 */
addi r7, r12, PT_CKPT_REGS /* Thread's ckpt_regs */ addi r7, r12, PT_CKPT_REGS /* Thread's ckpt_regs */
/* Make r7 look like an exception frame so that we /* Make r7 look like an exception frame so that we
...@@ -203,15 +216,19 @@ dont_backup_fp: ...@@ -203,15 +216,19 @@ dont_backup_fp:
SAVE_GPR(0, r7) /* user r0 */ SAVE_GPR(0, r7) /* user r0 */
SAVE_GPR(2, r7) /* user r2 */ SAVE_GPR(2, r7) /* user r2 */
SAVE_4GPRS(3, r7) /* user r3-r6 */ SAVE_4GPRS(3, r7) /* user r3-r6 */
SAVE_4GPRS(8, r7) /* user r8-r11 */ SAVE_GPR(8, r7) /* user r8 */
SAVE_GPR(9, r7) /* user r9 */
SAVE_GPR(10, r7) /* user r10 */
ld r3, PACATMSCRATCH(r13) /* user r1 */ ld r3, PACATMSCRATCH(r13) /* user r1 */
ld r4, GPR7(r1) /* user r7 */ ld r4, GPR7(r1) /* user r7 */
ld r5, GPR12(r1) /* user r12 */ ld r5, GPR11(r1) /* user r11 */
GET_SCRATCH0(6) /* user r13 */ ld r6, GPR12(r1) /* user r12 */
GET_SCRATCH0(8) /* user r13 */
std r3, GPR1(r7) std r3, GPR1(r7)
std r4, GPR7(r7) std r4, GPR7(r7)
std r5, GPR12(r7) std r5, GPR11(r7)
std r6, GPR13(r7) std r6, GPR12(r7)
std r8, GPR13(r7)
SAVE_NVGPRS(r7) /* user r14-r31 */ SAVE_NVGPRS(r7) /* user r14-r31 */
...@@ -234,14 +251,12 @@ dont_backup_fp: ...@@ -234,14 +251,12 @@ dont_backup_fp:
std r6, _XER(r7) std r6, _XER(r7)
/* ******************** TAR, PPR, DSCR ********** */ /* ******************** TAR, DSCR ********** */
mfspr r3, SPRN_TAR mfspr r3, SPRN_TAR
mfspr r4, SPRN_PPR mfspr r4, SPRN_DSCR
mfspr r5, SPRN_DSCR
std r3, THREAD_TM_TAR(r12) std r3, THREAD_TM_TAR(r12)
std r4, THREAD_TM_PPR(r12) std r4, THREAD_TM_DSCR(r12)
std r5, THREAD_TM_DSCR(r12)
/* MSR and flags: We don't change CRs, and we don't need to alter /* MSR and flags: We don't change CRs, and we don't need to alter
* MSR. * MSR.
...@@ -258,7 +273,7 @@ dont_backup_fp: ...@@ -258,7 +273,7 @@ dont_backup_fp:
std r3, THREAD_TM_TFHAR(r12) std r3, THREAD_TM_TFHAR(r12)
std r4, THREAD_TM_TFIAR(r12) std r4, THREAD_TM_TFIAR(r12)
/* AMR and PPR are checkpointed too, but are unsupported by Linux. */ /* AMR is checkpointed too, but is unsupported by Linux. */
/* Restore original MSR/IRQ state & clear TM mode */ /* Restore original MSR/IRQ state & clear TM mode */
ld r14, TM_FRAME_L0(r1) /* Orig MSR */ ld r14, TM_FRAME_L0(r1) /* Orig MSR */
...@@ -274,6 +289,12 @@ dont_backup_fp: ...@@ -274,6 +289,12 @@ dont_backup_fp:
mtcr r4 mtcr r4
mtlr r0 mtlr r0
ld r2, 40(r1) ld r2, 40(r1)
/* Load system default DSCR */
ld r4, DSCR_DEFAULT@toc(r2)
ld r0, 0(r4)
mtspr SPRN_DSCR, r0
blr blr
...@@ -358,25 +379,24 @@ dont_restore_fp: ...@@ -358,25 +379,24 @@ dont_restore_fp:
restore_gprs: restore_gprs:
/* ******************** TAR, PPR, DSCR ********** */ /* ******************** CR,LR,CCR,MSR ********** */
ld r4, THREAD_TM_TAR(r3) ld r4, _CTR(r7)
ld r5, THREAD_TM_PPR(r3) ld r5, _LINK(r7)
ld r6, THREAD_TM_DSCR(r3) ld r6, _CCR(r7)
ld r8, _XER(r7)
mtspr SPRN_TAR, r4 mtctr r4
mtspr SPRN_PPR, r5 mtlr r5
mtspr SPRN_DSCR, r6 mtcr r6
mtxer r8
/* ******************** CR,LR,CCR,MSR ********** */ /* ******************** TAR ******************** */
ld r3, _CTR(r7) ld r4, THREAD_TM_TAR(r3)
ld r4, _LINK(r7) mtspr SPRN_TAR, r4
ld r5, _CCR(r7)
ld r6, _XER(r7)
mtctr r3 /* Load up the PPR and DSCR in GPRs only at this stage */
mtlr r4 ld r5, THREAD_TM_DSCR(r3)
mtcr r5 ld r6, THREAD_TM_PPR(r3)
mtxer r6
/* Clear the MSR RI since we are about to change R1. EE is already off /* Clear the MSR RI since we are about to change R1. EE is already off
*/ */
...@@ -384,19 +404,26 @@ restore_gprs: ...@@ -384,19 +404,26 @@ restore_gprs:
mtmsrd r4, 1 mtmsrd r4, 1
REST_4GPRS(0, r7) /* GPR0-3 */ REST_4GPRS(0, r7) /* GPR0-3 */
REST_GPR(4, r7) /* GPR4-6 */ REST_GPR(4, r7) /* GPR4 */
REST_GPR(5, r7)
REST_GPR(6, r7)
REST_4GPRS(8, r7) /* GPR8-11 */ REST_4GPRS(8, r7) /* GPR8-11 */
REST_2GPRS(12, r7) /* GPR12-13 */ REST_2GPRS(12, r7) /* GPR12-13 */
REST_NVGPRS(r7) /* GPR14-31 */ REST_NVGPRS(r7) /* GPR14-31 */
ld r7, GPR7(r7) /* GPR7 */ /* Load up PPR and DSCR here so we don't run with user values for long
*/
mtspr SPRN_DSCR, r5
mtspr SPRN_PPR, r6
REST_GPR(5, r7) /* GPR5-7 */
REST_GPR(6, r7)
ld r7, GPR7(r7)
/* Commit register state as checkpointed state: */ /* Commit register state as checkpointed state: */
TRECHKPT TRECHKPT
HMT_MEDIUM
/* Our transactional state has now changed. /* Our transactional state has now changed.
* *
* Now just get out of here. Transactional (current) state will be * Now just get out of here. Transactional (current) state will be
...@@ -419,6 +446,12 @@ restore_gprs: ...@@ -419,6 +446,12 @@ restore_gprs:
mtcr r4 mtcr r4
mtlr r0 mtlr r0
ld r2, 40(r1) ld r2, 40(r1)
/* Load system default DSCR */
ld r4, DSCR_DEFAULT@toc(r2)
ld r0, 0(r4)
mtspr SPRN_DSCR, r0
blr blr
/* ****************************************************************** */ /* ****************************************************************** */
...@@ -1530,11 +1530,15 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, ...@@ -1530,11 +1530,15 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
const char *cp; const char *cp;
dn = dev->of_node; dn = dev->of_node;
if (!dn) if (!dn) {
return -ENODEV; strcat(buf, "\n");
return strlen(buf);
}
cp = of_get_property(dn, "compatible", NULL); cp = of_get_property(dn, "compatible", NULL);
if (!cp) if (!cp) {
return -ENODEV; strcat(buf, "\n");
return strlen(buf);
}
return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp); return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp);
} }
......
...@@ -226,19 +226,35 @@ _GLOBAL(csum_partial) ...@@ -226,19 +226,35 @@ _GLOBAL(csum_partial)
blr blr
.macro source .macro srcnr
100: 100:
.section __ex_table,"a" .section __ex_table,"a"
.align 3 .align 3
.llong 100b,.Lsrc_error .llong 100b,.Lsrc_error_nr
.previous .previous
.endm .endm
.macro dest .macro source
150:
.section __ex_table,"a"
.align 3
.llong 150b,.Lsrc_error
.previous
.endm
.macro dstnr
200: 200:
.section __ex_table,"a" .section __ex_table,"a"
.align 3 .align 3
.llong 200b,.Ldest_error .llong 200b,.Ldest_error_nr
.previous
.endm
.macro dest
250:
.section __ex_table,"a"
.align 3
.llong 250b,.Ldest_error
.previous .previous
.endm .endm
...@@ -269,16 +285,16 @@ _GLOBAL(csum_partial_copy_generic) ...@@ -269,16 +285,16 @@ _GLOBAL(csum_partial_copy_generic)
rldicl. r6,r3,64-1,64-2 /* r6 = (r3 & 0x3) >> 1 */ rldicl. r6,r3,64-1,64-2 /* r6 = (r3 & 0x3) >> 1 */
beq .Lcopy_aligned beq .Lcopy_aligned
li r7,4 li r9,4
sub r6,r7,r6 sub r6,r9,r6
mtctr r6 mtctr r6
1: 1:
source; lhz r6,0(r3) /* align to doubleword */ srcnr; lhz r6,0(r3) /* align to doubleword */
subi r5,r5,2 subi r5,r5,2
addi r3,r3,2 addi r3,r3,2
adde r0,r0,r6 adde r0,r0,r6
dest; sth r6,0(r4) dstnr; sth r6,0(r4)
addi r4,r4,2 addi r4,r4,2
bdnz 1b bdnz 1b
...@@ -392,10 +408,10 @@ dest; std r16,56(r4) ...@@ -392,10 +408,10 @@ dest; std r16,56(r4)
mtctr r6 mtctr r6
3: 3:
source; ld r6,0(r3) srcnr; ld r6,0(r3)
addi r3,r3,8 addi r3,r3,8
adde r0,r0,r6 adde r0,r0,r6
dest; std r6,0(r4) dstnr; std r6,0(r4)
addi r4,r4,8 addi r4,r4,8
bdnz 3b bdnz 3b
...@@ -405,10 +421,10 @@ dest; std r6,0(r4) ...@@ -405,10 +421,10 @@ dest; std r6,0(r4)
srdi. r6,r5,2 srdi. r6,r5,2
beq .Lcopy_tail_halfword beq .Lcopy_tail_halfword
source; lwz r6,0(r3) srcnr; lwz r6,0(r3)
addi r3,r3,4 addi r3,r3,4
adde r0,r0,r6 adde r0,r0,r6
dest; stw r6,0(r4) dstnr; stw r6,0(r4)
addi r4,r4,4 addi r4,r4,4
subi r5,r5,4 subi r5,r5,4
...@@ -416,10 +432,10 @@ dest; stw r6,0(r4) ...@@ -416,10 +432,10 @@ dest; stw r6,0(r4)
srdi. r6,r5,1 srdi. r6,r5,1
beq .Lcopy_tail_byte beq .Lcopy_tail_byte
source; lhz r6,0(r3) srcnr; lhz r6,0(r3)
addi r3,r3,2 addi r3,r3,2
adde r0,r0,r6 adde r0,r0,r6
dest; sth r6,0(r4) dstnr; sth r6,0(r4)
addi r4,r4,2 addi r4,r4,2
subi r5,r5,2 subi r5,r5,2
...@@ -427,10 +443,10 @@ dest; sth r6,0(r4) ...@@ -427,10 +443,10 @@ dest; sth r6,0(r4)
andi. r6,r5,1 andi. r6,r5,1
beq .Lcopy_finish beq .Lcopy_finish
source; lbz r6,0(r3) srcnr; lbz r6,0(r3)
sldi r9,r6,8 /* Pad the byte out to 16 bits */ sldi r9,r6,8 /* Pad the byte out to 16 bits */
adde r0,r0,r9 adde r0,r0,r9
dest; stb r6,0(r4) dstnr; stb r6,0(r4)
.Lcopy_finish: .Lcopy_finish:
addze r0,r0 /* add in final carry */ addze r0,r0 /* add in final carry */
...@@ -440,6 +456,11 @@ dest; stb r6,0(r4) ...@@ -440,6 +456,11 @@ dest; stb r6,0(r4)
blr blr
.Lsrc_error: .Lsrc_error:
ld r14,STK_REG(R14)(r1)
ld r15,STK_REG(R15)(r1)
ld r16,STK_REG(R16)(r1)
addi r1,r1,STACKFRAMESIZE
.Lsrc_error_nr:
cmpdi 0,r7,0 cmpdi 0,r7,0
beqlr beqlr
li r6,-EFAULT li r6,-EFAULT
...@@ -447,6 +468,11 @@ dest; stb r6,0(r4) ...@@ -447,6 +468,11 @@ dest; stb r6,0(r4)
blr blr
.Ldest_error: .Ldest_error:
ld r14,STK_REG(R14)(r1)
ld r15,STK_REG(R15)(r1)
ld r16,STK_REG(R16)(r1)
addi r1,r1,STACKFRAMESIZE
.Ldest_error_nr:
cmpdi 0,r8,0 cmpdi 0,r8,0
beqlr beqlr
li r6,-EFAULT li r6,-EFAULT
......
...@@ -300,5 +300,9 @@ void vmemmap_free(unsigned long start, unsigned long end) ...@@ -300,5 +300,9 @@ void vmemmap_free(unsigned long start, unsigned long end)
{ {
} }
void register_page_bootmem_memmap(unsigned long section_nr,
struct page *start_page, unsigned long size)
{
}
#endif /* CONFIG_SPARSEMEM_VMEMMAP */ #endif /* CONFIG_SPARSEMEM_VMEMMAP */
...@@ -297,12 +297,21 @@ void __init paging_init(void) ...@@ -297,12 +297,21 @@ void __init paging_init(void)
} }
#endif /* ! CONFIG_NEED_MULTIPLE_NODES */ #endif /* ! CONFIG_NEED_MULTIPLE_NODES */
static void __init register_page_bootmem_info(void)
{
int i;
for_each_online_node(i)
register_page_bootmem_info_node(NODE_DATA(i));
}
void __init mem_init(void) void __init mem_init(void)
{ {
#ifdef CONFIG_SWIOTLB #ifdef CONFIG_SWIOTLB
swiotlb_init(0); swiotlb_init(0);
#endif #endif
register_page_bootmem_info();
high_memory = (void *) __va(max_low_pfn * PAGE_SIZE); high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
set_max_mapnr(max_pfn); set_max_mapnr(max_pfn);
free_all_bootmem(); free_all_bootmem();
......
...@@ -199,6 +199,7 @@ ...@@ -199,6 +199,7 @@
#define MMCR1_UNIT_SHIFT(pmc) (60 - (4 * ((pmc) - 1))) #define MMCR1_UNIT_SHIFT(pmc) (60 - (4 * ((pmc) - 1)))
#define MMCR1_COMBINE_SHIFT(pmc) (35 - ((pmc) - 1)) #define MMCR1_COMBINE_SHIFT(pmc) (35 - ((pmc) - 1))
#define MMCR1_PMCSEL_SHIFT(pmc) (24 - (((pmc) - 1)) * 8) #define MMCR1_PMCSEL_SHIFT(pmc) (24 - (((pmc) - 1)) * 8)
#define MMCR1_FAB_SHIFT 36
#define MMCR1_DC_QUAL_SHIFT 47 #define MMCR1_DC_QUAL_SHIFT 47
#define MMCR1_IC_QUAL_SHIFT 46 #define MMCR1_IC_QUAL_SHIFT 46
...@@ -388,8 +389,8 @@ static int power8_compute_mmcr(u64 event[], int n_ev, ...@@ -388,8 +389,8 @@ static int power8_compute_mmcr(u64 event[], int n_ev,
* the threshold bits are used for the match value. * the threshold bits are used for the match value.
*/ */
if (event_is_fab_match(event[i])) { if (event_is_fab_match(event[i])) {
mmcr1 |= (event[i] >> EVENT_THR_CTL_SHIFT) & mmcr1 |= ((event[i] >> EVENT_THR_CTL_SHIFT) &
EVENT_THR_CTL_MASK; EVENT_THR_CTL_MASK) << MMCR1_FAB_SHIFT;
} else { } else {
val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK; val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK;
mmcra |= val << MMCRA_THR_CTL_SHIFT; mmcra |= val << MMCRA_THR_CTL_SHIFT;
......
...@@ -2,6 +2,7 @@ menu "Machine selection" ...@@ -2,6 +2,7 @@ menu "Machine selection"
config SCORE config SCORE
def_bool y def_bool y
select HAVE_GENERIC_HARDIRQS
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select GENERIC_IOMAP select GENERIC_IOMAP
select GENERIC_ATOMIC64 select GENERIC_ATOMIC64
...@@ -110,3 +111,6 @@ source "security/Kconfig" ...@@ -110,3 +111,6 @@ source "security/Kconfig"
source "crypto/Kconfig" source "crypto/Kconfig"
source "lib/Kconfig" source "lib/Kconfig"
config NO_IOMEM
def_bool y
...@@ -20,8 +20,8 @@ cflags-y += -G0 -pipe -mel -mnhwloop -D__SCOREEL__ \ ...@@ -20,8 +20,8 @@ cflags-y += -G0 -pipe -mel -mnhwloop -D__SCOREEL__ \
# #
KBUILD_AFLAGS += $(cflags-y) KBUILD_AFLAGS += $(cflags-y)
KBUILD_CFLAGS += $(cflags-y) KBUILD_CFLAGS += $(cflags-y)
KBUILD_AFLAGS_MODULE += -mlong-calls KBUILD_AFLAGS_MODULE +=
KBUILD_CFLAGS_MODULE += -mlong-calls KBUILD_CFLAGS_MODULE +=
LDFLAGS += --oformat elf32-littlescore LDFLAGS += --oformat elf32-littlescore
LDFLAGS_vmlinux += -G0 -static -nostdlib LDFLAGS_vmlinux += -G0 -static -nostdlib
......
...@@ -184,48 +184,57 @@ static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr, ...@@ -184,48 +184,57 @@ static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
__wsum sum) __wsum sum)
{ {
__asm__ __volatile__( __asm__ __volatile__(
".set\tnoreorder\t\t\t# csum_ipv6_magic\n\t" ".set\tvolatile\t\t\t# csum_ipv6_magic\n\t"
".set\tnoat\n\t" "add\t%0, %0, %5\t\t\t# proto (long in network byte order)\n\t"
"addu\t%0, %5\t\t\t# proto (long in network byte order)\n\t" "cmp.c\t%5, %0\n\t"
"sltu\t$1, %0, %5\n\t" "bleu 1f\n\t"
"addu\t%0, $1\n\t" "addi\t%0, 0x1\n\t"
"addu\t%0, %6\t\t\t# csum\n\t" "1:add\t%0, %0, %6\t\t\t# csum\n\t"
"sltu\t$1, %0, %6\n\t" "cmp.c\t%6, %0\n\t"
"lw\t%1, 0(%2)\t\t\t# four words source address\n\t" "lw\t%1, [%2, 0]\t\t\t# four words source address\n\t"
"addu\t%0, $1\n\t" "bleu 1f\n\t"
"addu\t%0, %1\n\t" "addi\t%0, 0x1\n\t"
"sltu\t$1, %0, %1\n\t" "1:add\t%0, %0, %1\n\t"
"lw\t%1, 4(%2)\n\t" "cmp.c\t%1, %0\n\t"
"addu\t%0, $1\n\t" "1:lw\t%1, [%2, 4]\n\t"
"addu\t%0, %1\n\t" "bleu 1f\n\t"
"sltu\t$1, %0, %1\n\t" "addi\t%0, 0x1\n\t"
"lw\t%1, 8(%2)\n\t" "1:add\t%0, %0, %1\n\t"
"addu\t%0, $1\n\t" "cmp.c\t%1, %0\n\t"
"addu\t%0, %1\n\t" "lw\t%1, [%2,8]\n\t"
"sltu\t$1, %0, %1\n\t" "bleu 1f\n\t"
"lw\t%1, 12(%2)\n\t" "addi\t%0, 0x1\n\t"
"addu\t%0, $1\n\t" "1:add\t%0, %0, %1\n\t"
"addu\t%0, %1\n\t" "cmp.c\t%1, %0\n\t"
"sltu\t$1, %0, %1\n\t" "lw\t%1, [%2, 12]\n\t"
"lw\t%1, 0(%3)\n\t" "bleu 1f\n\t"
"addu\t%0, $1\n\t" "addi\t%0, 0x1\n\t"
"addu\t%0, %1\n\t" "1:add\t%0, %0,%1\n\t"
"sltu\t$1, %0, %1\n\t" "cmp.c\t%1, %0\n\t"
"lw\t%1, 4(%3)\n\t" "lw\t%1, [%3, 0]\n\t"
"addu\t%0, $1\n\t" "bleu 1f\n\t"
"addu\t%0, %1\n\t" "addi\t%0, 0x1\n\t"
"sltu\t$1, %0, %1\n\t" "1:add\t%0, %0, %1\n\t"
"lw\t%1, 8(%3)\n\t" "cmp.c\t%1, %0\n\t"
"addu\t%0, $1\n\t" "lw\t%1, [%3, 4]\n\t"
"addu\t%0, %1\n\t" "bleu 1f\n\t"
"sltu\t$1, %0, %1\n\t" "addi\t%0, 0x1\n\t"
"lw\t%1, 12(%3)\n\t" "1:add\t%0, %0, %1\n\t"
"addu\t%0, $1\n\t" "cmp.c\t%1, %0\n\t"
"addu\t%0, %1\n\t" "lw\t%1, [%3, 8]\n\t"
"sltu\t$1, %0, %1\n\t" "bleu 1f\n\t"
"addu\t%0, $1\t\t\t# Add final carry\n\t" "addi\t%0, 0x1\n\t"
".set\tnoat\n\t" "1:add\t%0, %0, %1\n\t"
".set\tnoreorder" "cmp.c\t%1, %0\n\t"
"lw\t%1, [%3, 12]\n\t"
"bleu 1f\n\t"
"addi\t%0, 0x1\n\t"
"1:add\t%0, %0, %1\n\t"
"cmp.c\t%1, %0\n\t"
"bleu 1f\n\t"
"addi\t%0, 0x1\n\t"
"1:\n\t"
".set\toptimize"
: "=r" (sum), "=r" (proto) : "=r" (sum), "=r" (proto)
: "r" (saddr), "r" (daddr), : "r" (saddr), "r" (daddr),
"0" (htonl(len)), "1" (htonl(proto)), "r" (sum)); "0" (htonl(len)), "1" (htonl(proto)), "r" (sum));
......
...@@ -5,5 +5,4 @@ ...@@ -5,5 +5,4 @@
#define virt_to_bus virt_to_phys #define virt_to_bus virt_to_phys
#define bus_to_virt phys_to_virt #define bus_to_virt phys_to_virt
#endif /* _ASM_SCORE_IO_H */ #endif /* _ASM_SCORE_IO_H */
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#define _ASM_SCORE_PGALLOC_H #define _ASM_SCORE_PGALLOC_H
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/highmem.h>
static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
pte_t *pte) pte_t *pte)
{ {
......
...@@ -264,7 +264,7 @@ resume_kernel: ...@@ -264,7 +264,7 @@ resume_kernel:
disable_irq disable_irq
lw r8, [r28, TI_PRE_COUNT] lw r8, [r28, TI_PRE_COUNT]
cmpz.c r8 cmpz.c r8
bne r8, restore_all bne restore_all
need_resched: need_resched:
lw r8, [r28, TI_FLAGS] lw r8, [r28, TI_FLAGS]
andri.c r9, r8, _TIF_NEED_RESCHED andri.c r9, r8, _TIF_NEED_RESCHED
...@@ -415,7 +415,7 @@ ENTRY(handle_sys) ...@@ -415,7 +415,7 @@ ENTRY(handle_sys)
sw r9, [r0, PT_EPC] sw r9, [r0, PT_EPC]
cmpi.c r27, __NR_syscalls # check syscall number cmpi.c r27, __NR_syscalls # check syscall number
bgeu illegal_syscall bcs illegal_syscall
slli r8, r27, 2 # get syscall routine slli r8, r27, 2 # get syscall routine
la r11, sys_call_table la r11, sys_call_table
......
...@@ -78,8 +78,8 @@ int copy_thread(unsigned long clone_flags, unsigned long usp, ...@@ -78,8 +78,8 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
p->thread.reg0 = (unsigned long) childregs; p->thread.reg0 = (unsigned long) childregs;
if (unlikely(p->flags & PF_KTHREAD)) { if (unlikely(p->flags & PF_KTHREAD)) {
memset(childregs, 0, sizeof(struct pt_regs)); memset(childregs, 0, sizeof(struct pt_regs));
p->thread->reg12 = usp; p->thread.reg12 = usp;
p->thread->reg13 = arg; p->thread.reg13 = arg;
p->thread.reg3 = (unsigned long) ret_from_kernel_thread; p->thread.reg3 = (unsigned long) ret_from_kernel_thread;
} else { } else {
*childregs = *current_pt_regs(); *childregs = *current_pt_regs();
......
...@@ -506,12 +506,17 @@ config SUN_OPENPROMFS ...@@ -506,12 +506,17 @@ config SUN_OPENPROMFS
Only choose N if you know in advance that you will not need to modify Only choose N if you know in advance that you will not need to modify
OpenPROM settings on the running system. OpenPROM settings on the running system.
# Makefile helper # Makefile helpers
config SPARC64_PCI config SPARC64_PCI
bool bool
default y default y
depends on SPARC64 && PCI depends on SPARC64 && PCI
config SPARC64_PCI_MSI
bool
default y
depends on SPARC64_PCI && PCI_MSI
endmenu endmenu
menu "Executable file formats" menu "Executable file formats"
......
...@@ -254,7 +254,7 @@ static int sun_fd_request_irq(void) ...@@ -254,7 +254,7 @@ static int sun_fd_request_irq(void)
once = 1; once = 1;
error = request_irq(FLOPPY_IRQ, sparc_floppy_irq, error = request_irq(FLOPPY_IRQ, sparc_floppy_irq,
IRQF_DISABLED, "floppy", NULL); 0, "floppy", NULL);
return ((error == 0) ? 0 : -1); return ((error == 0) ? 0 : -1);
} }
......
# #
# Makefile for the linux kernel. # Makefile for the linux kernel.
# #
...@@ -99,7 +100,7 @@ obj-$(CONFIG_STACKTRACE) += stacktrace.o ...@@ -99,7 +100,7 @@ obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-$(CONFIG_SPARC64_PCI) += pci.o pci_common.o psycho_common.o obj-$(CONFIG_SPARC64_PCI) += pci.o pci_common.o psycho_common.o
obj-$(CONFIG_SPARC64_PCI) += pci_psycho.o pci_sabre.o pci_schizo.o obj-$(CONFIG_SPARC64_PCI) += pci_psycho.o pci_sabre.o pci_schizo.o
obj-$(CONFIG_SPARC64_PCI) += pci_sun4v.o pci_sun4v_asm.o pci_fire.o obj-$(CONFIG_SPARC64_PCI) += pci_sun4v.o pci_sun4v_asm.o pci_fire.o
obj-$(CONFIG_PCI_MSI) += pci_msi.o obj-$(CONFIG_SPARC64_PCI_MSI) += pci_msi.o
obj-$(CONFIG_COMPAT) += sys32.o sys_sparc32.o signal32.o obj-$(CONFIG_COMPAT) += sys32.o sys_sparc32.o signal32.o
......
...@@ -849,9 +849,8 @@ void ldom_reboot(const char *boot_command) ...@@ -849,9 +849,8 @@ void ldom_reboot(const char *boot_command)
if (boot_command && strlen(boot_command)) { if (boot_command && strlen(boot_command)) {
unsigned long len; unsigned long len;
strcpy(full_boot_str, "boot "); snprintf(full_boot_str, sizeof(full_boot_str), "boot %s",
strlcpy(full_boot_str + strlen("boot "), boot_command, boot_command);
sizeof(full_boot_str + strlen("boot ")));
len = strlen(full_boot_str); len = strlen(full_boot_str);
if (reboot_data_supported) { if (reboot_data_supported) {
......
...@@ -1249,12 +1249,12 @@ int ldc_bind(struct ldc_channel *lp, const char *name) ...@@ -1249,12 +1249,12 @@ int ldc_bind(struct ldc_channel *lp, const char *name)
snprintf(lp->rx_irq_name, LDC_IRQ_NAME_MAX, "%s RX", name); snprintf(lp->rx_irq_name, LDC_IRQ_NAME_MAX, "%s RX", name);
snprintf(lp->tx_irq_name, LDC_IRQ_NAME_MAX, "%s TX", name); snprintf(lp->tx_irq_name, LDC_IRQ_NAME_MAX, "%s TX", name);
err = request_irq(lp->cfg.rx_irq, ldc_rx, IRQF_DISABLED, err = request_irq(lp->cfg.rx_irq, ldc_rx, 0,
lp->rx_irq_name, lp); lp->rx_irq_name, lp);
if (err) if (err)
return err; return err;
err = request_irq(lp->cfg.tx_irq, ldc_tx, IRQF_DISABLED, err = request_irq(lp->cfg.tx_irq, ldc_tx, 0,
lp->tx_irq_name, lp); lp->tx_irq_name, lp);
if (err) { if (err) {
free_irq(lp->cfg.rx_irq, lp); free_irq(lp->cfg.rx_irq, lp);
......
...@@ -72,14 +72,14 @@ __init int create_simplefb(const struct screen_info *si, ...@@ -72,14 +72,14 @@ __init int create_simplefb(const struct screen_info *si,
* the part that is occupied by the framebuffer */ * the part that is occupied by the framebuffer */
len = mode->height * mode->stride; len = mode->height * mode->stride;
len = PAGE_ALIGN(len); len = PAGE_ALIGN(len);
if (len > si->lfb_size << 16) { if (len > (u64)si->lfb_size << 16) {
printk(KERN_WARNING "sysfb: VRAM smaller than advertised\n"); printk(KERN_WARNING "sysfb: VRAM smaller than advertised\n");
return -EINVAL; return -EINVAL;
} }
/* setup IORESOURCE_MEM as framebuffer memory */ /* setup IORESOURCE_MEM as framebuffer memory */
memset(&res, 0, sizeof(res)); memset(&res, 0, sizeof(res));
res.flags = IORESOURCE_MEM; res.flags = IORESOURCE_MEM | IORESOURCE_BUSY;
res.name = simplefb_resname; res.name = simplefb_resname;
res.start = si->lfb_base; res.start = si->lfb_base;
res.end = si->lfb_base + len - 1; res.end = si->lfb_base + len - 1;
......
...@@ -5345,7 +5345,9 @@ static int handle_ept_violation(struct kvm_vcpu *vcpu) ...@@ -5345,7 +5345,9 @@ static int handle_ept_violation(struct kvm_vcpu *vcpu)
* There are errata that may cause this bit to not be set: * There are errata that may cause this bit to not be set:
* AAK134, BY25. * AAK134, BY25.
*/ */
if (exit_qualification & INTR_INFO_UNBLOCK_NMI) if (!(to_vmx(vcpu)->idt_vectoring_info & VECTORING_INFO_VALID_MASK) &&
cpu_has_virtual_nmis() &&
(exit_qualification & INTR_INFO_UNBLOCK_NMI))
vmcs_set_bits(GUEST_INTERRUPTIBILITY_INFO, GUEST_INTR_STATE_NMI); vmcs_set_bits(GUEST_INTERRUPTIBILITY_INFO, GUEST_INTR_STATE_NMI);
gpa = vmcs_read64(GUEST_PHYSICAL_ADDRESS); gpa = vmcs_read64(GUEST_PHYSICAL_ADDRESS);
......
...@@ -700,7 +700,7 @@ int pci_mmconfig_insert(struct device *dev, u16 seg, u8 start, u8 end, ...@@ -700,7 +700,7 @@ int pci_mmconfig_insert(struct device *dev, u16 seg, u8 start, u8 end,
if (!(pci_probe & PCI_PROBE_MMCONF) || pci_mmcfg_arch_init_failed) if (!(pci_probe & PCI_PROBE_MMCONF) || pci_mmcfg_arch_init_failed)
return -ENODEV; return -ENODEV;
if (start > end || !addr) if (start > end)
return -EINVAL; return -EINVAL;
mutex_lock(&pci_mmcfg_lock); mutex_lock(&pci_mmcfg_lock);
...@@ -716,6 +716,11 @@ int pci_mmconfig_insert(struct device *dev, u16 seg, u8 start, u8 end, ...@@ -716,6 +716,11 @@ int pci_mmconfig_insert(struct device *dev, u16 seg, u8 start, u8 end,
return -EEXIST; return -EEXIST;
} }
if (!addr) {
mutex_unlock(&pci_mmcfg_lock);
return -EINVAL;
}
rc = -EBUSY; rc = -EBUSY;
cfg = pci_mmconfig_alloc(seg, start, end, addr); cfg = pci_mmconfig_alloc(seg, start, end, addr);
if (cfg == NULL) { if (cfg == NULL) {
......
...@@ -99,11 +99,16 @@ config BLK_DEV_THROTTLING ...@@ -99,11 +99,16 @@ config BLK_DEV_THROTTLING
See Documentation/cgroups/blkio-controller.txt for more information. See Documentation/cgroups/blkio-controller.txt for more information.
config CMDLINE_PARSER config BLK_CMDLINE_PARSER
bool "Block device command line partition parser" bool "Block device command line partition parser"
default n default n
---help--- ---help---
Parsing command line, get the partitions information. Enabling this option allows you to specify the partition layout from
the kernel boot args. This is typically of use for embedded devices
which don't otherwise have any standardized method for listing the
partitions on a block device.
See Documentation/block/cmdline-partition.txt for more information.
menu "Partition Types" menu "Partition Types"
......
...@@ -18,4 +18,4 @@ obj-$(CONFIG_IOSCHED_CFQ) += cfq-iosched.o ...@@ -18,4 +18,4 @@ obj-$(CONFIG_IOSCHED_CFQ) += cfq-iosched.o
obj-$(CONFIG_BLOCK_COMPAT) += compat_ioctl.o obj-$(CONFIG_BLOCK_COMPAT) += compat_ioctl.o
obj-$(CONFIG_BLK_DEV_INTEGRITY) += blk-integrity.o obj-$(CONFIG_BLK_DEV_INTEGRITY) += blk-integrity.o
obj-$(CONFIG_CMDLINE_PARSER) += cmdline-parser.o obj-$(CONFIG_BLK_CMDLINE_PARSER) += cmdline-parser.o
...@@ -263,7 +263,7 @@ config SYSV68_PARTITION ...@@ -263,7 +263,7 @@ config SYSV68_PARTITION
config CMDLINE_PARTITION config CMDLINE_PARTITION
bool "Command line partition support" if PARTITION_ADVANCED bool "Command line partition support" if PARTITION_ADVANCED
select CMDLINE_PARSER select BLK_CMDLINE_PARSER
help help
Say Y here if you would read the partitions table from bootargs. Say Y here if you want to read the partition table from bootargs.
The format for the command line is just like mtdparts. The format for the command line is just like mtdparts.
...@@ -2,15 +2,15 @@ ...@@ -2,15 +2,15 @@
* Copyright (C) 2013 HUAWEI * Copyright (C) 2013 HUAWEI
* Author: Cai Zhiyong <caizhiyong@huawei.com> * Author: Cai Zhiyong <caizhiyong@huawei.com>
* *
* Read block device partition table from command line. * Read block device partition table from the command line.
* The partition used for fixed block device (eMMC) embedded device. * Typically used for fixed block (eMMC) embedded devices.
* It is no MBR, save storage space. Bootloader can be easily accessed * It has no MBR, so saves storage space. Bootloader can be easily accessed
* by absolute address of data on the block device. * by absolute address of data on the block device.
* Users can easily change the partition. * Users can easily change the partition.
* *
* The format for the command line is just like mtdparts. * The format for the command line is just like mtdparts.
* *
* Verbose config please reference "Documentation/block/cmdline-partition.txt" * For further information, see "Documentation/block/cmdline-partition.txt"
* *
*/ */
......
...@@ -968,7 +968,7 @@ int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device) ...@@ -968,7 +968,7 @@ int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device)
} }
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(acpi_bus_get_device); EXPORT_SYMBOL(acpi_bus_get_device);
int acpi_device_add(struct acpi_device *device, int acpi_device_add(struct acpi_device *device,
void (*release)(struct device *)) void (*release)(struct device *))
......
...@@ -210,25 +210,6 @@ static void bcma_core_pci_config_fixup(struct bcma_drv_pci *pc) ...@@ -210,25 +210,6 @@ static void bcma_core_pci_config_fixup(struct bcma_drv_pci *pc)
} }
} }
static void bcma_core_pci_power_save(struct bcma_drv_pci *pc, bool up)
{
u16 data;
if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
data = up ? 0x74 : 0x7C;
bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7F64);
bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
} else if (pc->core->id.rev >= 21 && pc->core->id.rev <= 22) {
data = up ? 0x75 : 0x7D;
bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7E65);
bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
}
}
/************************************************** /**************************************************
* Init. * Init.
**************************************************/ **************************************************/
...@@ -255,6 +236,32 @@ void bcma_core_pci_init(struct bcma_drv_pci *pc) ...@@ -255,6 +236,32 @@ void bcma_core_pci_init(struct bcma_drv_pci *pc)
bcma_core_pci_clientmode_init(pc); bcma_core_pci_clientmode_init(pc);
} }
void bcma_core_pci_power_save(struct bcma_bus *bus, bool up)
{
struct bcma_drv_pci *pc;
u16 data;
if (bus->hosttype != BCMA_HOSTTYPE_PCI)
return;
pc = &bus->drv_pci[0];
if (pc->core->id.rev >= 15 && pc->core->id.rev <= 20) {
data = up ? 0x74 : 0x7C;
bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7F64);
bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
} else if (pc->core->id.rev >= 21 && pc->core->id.rev <= 22) {
data = up ? 0x75 : 0x7D;
bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
BCMA_CORE_PCI_MDIO_BLK1_MGMT1, 0x7E65);
bcma_pcie_mdio_writeread(pc, BCMA_CORE_PCI_MDIO_BLK1,
BCMA_CORE_PCI_MDIO_BLK1_MGMT3, data);
}
}
EXPORT_SYMBOL_GPL(bcma_core_pci_power_save);
int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core, int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
bool enable) bool enable)
{ {
...@@ -310,8 +317,6 @@ void bcma_core_pci_up(struct bcma_bus *bus) ...@@ -310,8 +317,6 @@ void bcma_core_pci_up(struct bcma_bus *bus)
pc = &bus->drv_pci[0]; pc = &bus->drv_pci[0];
bcma_core_pci_power_save(pc, true);
bcma_core_pci_extend_L1timer(pc, true); bcma_core_pci_extend_L1timer(pc, true);
} }
EXPORT_SYMBOL_GPL(bcma_core_pci_up); EXPORT_SYMBOL_GPL(bcma_core_pci_up);
...@@ -326,7 +331,5 @@ void bcma_core_pci_down(struct bcma_bus *bus) ...@@ -326,7 +331,5 @@ void bcma_core_pci_down(struct bcma_bus *bus)
pc = &bus->drv_pci[0]; pc = &bus->drv_pci[0];
bcma_core_pci_extend_L1timer(pc, false); bcma_core_pci_extend_L1timer(pc, false);
bcma_core_pci_power_save(pc, false);
} }
EXPORT_SYMBOL_GPL(bcma_core_pci_down); EXPORT_SYMBOL_GPL(bcma_core_pci_down);
...@@ -85,6 +85,7 @@ static struct usb_device_id ath3k_table[] = { ...@@ -85,6 +85,7 @@ static struct usb_device_id ath3k_table[] = {
{ USB_DEVICE(0x04CA, 0x3008) }, { USB_DEVICE(0x04CA, 0x3008) },
{ USB_DEVICE(0x13d3, 0x3362) }, { USB_DEVICE(0x13d3, 0x3362) },
{ USB_DEVICE(0x0CF3, 0xE004) }, { USB_DEVICE(0x0CF3, 0xE004) },
{ USB_DEVICE(0x0CF3, 0xE005) },
{ USB_DEVICE(0x0930, 0x0219) }, { USB_DEVICE(0x0930, 0x0219) },
{ USB_DEVICE(0x0489, 0xe057) }, { USB_DEVICE(0x0489, 0xe057) },
{ USB_DEVICE(0x13d3, 0x3393) }, { USB_DEVICE(0x13d3, 0x3393) },
...@@ -126,6 +127,7 @@ static struct usb_device_id ath3k_blist_tbl[] = { ...@@ -126,6 +127,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
......
...@@ -102,6 +102,7 @@ static struct usb_device_id btusb_table[] = { ...@@ -102,6 +102,7 @@ static struct usb_device_id btusb_table[] = {
/* Broadcom BCM20702A0 */ /* Broadcom BCM20702A0 */
{ USB_DEVICE(0x0b05, 0x17b5) }, { USB_DEVICE(0x0b05, 0x17b5) },
{ USB_DEVICE(0x0b05, 0x17cb) },
{ USB_DEVICE(0x04ca, 0x2003) }, { USB_DEVICE(0x04ca, 0x2003) },
{ USB_DEVICE(0x0489, 0xe042) }, { USB_DEVICE(0x0489, 0xe042) },
{ USB_DEVICE(0x413c, 0x8197) }, { USB_DEVICE(0x413c, 0x8197) },
...@@ -112,6 +113,9 @@ static struct usb_device_id btusb_table[] = { ...@@ -112,6 +113,9 @@ static struct usb_device_id btusb_table[] = {
/*Broadcom devices with vendor specific id */ /*Broadcom devices with vendor specific id */
{ USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01) }, { USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01) },
/* Belkin F8065bf - Broadcom based */
{ USB_VENDOR_AND_INTERFACE_INFO(0x050d, 0xff, 0x01, 0x01) },
{ } /* Terminating entry */ { } /* Terminating entry */
}; };
...@@ -148,6 +152,7 @@ static struct usb_device_id blacklist_table[] = { ...@@ -148,6 +152,7 @@ static struct usb_device_id blacklist_table[] = {
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
......
...@@ -700,6 +700,7 @@ static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus, ...@@ -700,6 +700,7 @@ static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus,
phys_addr_t sdramwins_phys_base, phys_addr_t sdramwins_phys_base,
size_t sdramwins_size) size_t sdramwins_size)
{ {
struct device_node *np;
int win; int win;
mbus->mbuswins_base = ioremap(mbuswins_phys_base, mbuswins_size); mbus->mbuswins_base = ioremap(mbuswins_phys_base, mbuswins_size);
...@@ -712,8 +713,11 @@ static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus, ...@@ -712,8 +713,11 @@ static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus,
return -ENOMEM; return -ENOMEM;
} }
if (of_find_compatible_node(NULL, NULL, "marvell,coherency-fabric")) np = of_find_compatible_node(NULL, NULL, "marvell,coherency-fabric");
if (np) {
mbus->hw_io_coherency = 1; mbus->hw_io_coherency = 1;
of_node_put(np);
}
for (win = 0; win < mbus->soc->num_wins; win++) for (win = 0; win < mbus->soc->num_wins; win++)
mvebu_mbus_disable_window(mbus, win); mvebu_mbus_disable_window(mbus, win);
...@@ -861,11 +865,13 @@ static void __init mvebu_mbus_get_pcie_resources(struct device_node *np, ...@@ -861,11 +865,13 @@ static void __init mvebu_mbus_get_pcie_resources(struct device_node *np,
int ret; int ret;
/* /*
* These are optional, so we clear them and they'll * These are optional, so we make sure that resource_size(x) will
* be zero if they are missing from the DT. * return 0.
*/ */
memset(mem, 0, sizeof(struct resource)); memset(mem, 0, sizeof(struct resource));
mem->end = -1;
memset(io, 0, sizeof(struct resource)); memset(io, 0, sizeof(struct resource));
io->end = -1;
ret = of_property_read_u32_array(np, "pcie-mem-aperture", reg, ARRAY_SIZE(reg)); ret = of_property_read_u32_array(np, "pcie-mem-aperture", reg, ARRAY_SIZE(reg));
if (!ret) { if (!ret) {
......
...@@ -229,7 +229,7 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev) ...@@ -229,7 +229,7 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev)
if (of_property_read_u32(np, "clock-latency", &transition_latency)) if (of_property_read_u32(np, "clock-latency", &transition_latency))
transition_latency = CPUFREQ_ETERNAL; transition_latency = CPUFREQ_ETERNAL;
if (cpu_reg) { if (!IS_ERR(cpu_reg)) {
struct opp *opp; struct opp *opp;
unsigned long min_uV, max_uV; unsigned long min_uV, max_uV;
int i; int i;
......
...@@ -394,7 +394,10 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate) ...@@ -394,7 +394,10 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate)
trace_cpu_frequency(pstate * 100000, cpu->cpu); trace_cpu_frequency(pstate * 100000, cpu->cpu);
cpu->pstate.current_pstate = pstate; cpu->pstate.current_pstate = pstate;
wrmsrl(MSR_IA32_PERF_CTL, pstate << 8); if (limits.no_turbo)
wrmsrl(MSR_IA32_PERF_CTL, BIT(32) | (pstate << 8));
else
wrmsrl(MSR_IA32_PERF_CTL, pstate << 8);
} }
......
...@@ -113,7 +113,7 @@ static int spear_cpufreq_target(struct cpufreq_policy *policy, ...@@ -113,7 +113,7 @@ static int spear_cpufreq_target(struct cpufreq_policy *policy,
unsigned int target_freq, unsigned int relation) unsigned int target_freq, unsigned int relation)
{ {
struct cpufreq_freqs freqs; struct cpufreq_freqs freqs;
unsigned long newfreq; long newfreq;
struct clk *srcclk; struct clk *srcclk;
int index, ret, mult = 1; int index, ret, mult = 1;
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册