Updated from Linux LTS 3.10.23 to 3.10.24
This commit is contained in:
parent
943c6a9f68
commit
cc92f436cd
2
Makefile
2
Makefile
@ -1,6 +1,6 @@
|
|||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 10
|
PATCHLEVEL = 10
|
||||||
SUBLEVEL = 23
|
SUBLEVEL = 24
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = TOSSUG Baby Fish
|
NAME = TOSSUG Baby Fish
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
coherency-fabric@20200 {
|
coherency-fabric@20200 {
|
||||||
compatible = "marvell,coherency-fabric";
|
compatible = "marvell,coherency-fabric";
|
||||||
reg = <0x20200 0xb0>, <0x21810 0x1c>;
|
reg = <0x20200 0xb0>, <0x21010 0x1c>;
|
||||||
};
|
};
|
||||||
|
|
||||||
serial@12000 {
|
serial@12000 {
|
||||||
|
@ -81,7 +81,7 @@
|
|||||||
/*
|
/*
|
||||||
* MV78230 has 2 PCIe units Gen2.0: One unit can be
|
* MV78230 has 2 PCIe units Gen2.0: One unit can be
|
||||||
* configured as x4 or quad x1 lanes. One unit is
|
* configured as x4 or quad x1 lanes. One unit is
|
||||||
* x4/x1.
|
* x1 only.
|
||||||
*/
|
*/
|
||||||
pcie-controller {
|
pcie-controller {
|
||||||
compatible = "marvell,armada-xp-pcie";
|
compatible = "marvell,armada-xp-pcie";
|
||||||
@ -94,10 +94,10 @@
|
|||||||
bus-range = <0x00 0xff>;
|
bus-range = <0x00 0xff>;
|
||||||
|
|
||||||
ranges = <0x82000000 0 0x40000 0x40000 0 0x00002000 /* Port 0.0 registers */
|
ranges = <0x82000000 0 0x40000 0x40000 0 0x00002000 /* Port 0.0 registers */
|
||||||
0x82000000 0 0x42000 0x42000 0 0x00002000 /* Port 2.0 registers */
|
|
||||||
0x82000000 0 0x44000 0x44000 0 0x00002000 /* Port 0.1 registers */
|
0x82000000 0 0x44000 0x44000 0 0x00002000 /* Port 0.1 registers */
|
||||||
0x82000000 0 0x48000 0x48000 0 0x00002000 /* Port 0.2 registers */
|
0x82000000 0 0x48000 0x48000 0 0x00002000 /* Port 0.2 registers */
|
||||||
0x82000000 0 0x4c000 0x4c000 0 0x00002000 /* Port 0.3 registers */
|
0x82000000 0 0x4c000 0x4c000 0 0x00002000 /* Port 0.3 registers */
|
||||||
|
0x82000000 0 0x80000 0x80000 0 0x00002000 /* Port 1.0 registers */
|
||||||
0x82000000 0 0xe0000000 0xe0000000 0 0x08000000 /* non-prefetchable memory */
|
0x82000000 0 0xe0000000 0xe0000000 0 0x08000000 /* non-prefetchable memory */
|
||||||
0x81000000 0 0 0xe8000000 0 0x00100000>; /* downstream I/O */
|
0x81000000 0 0 0xe8000000 0 0x00100000>; /* downstream I/O */
|
||||||
|
|
||||||
@ -165,19 +165,19 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie@9,0 {
|
pcie@5,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x42000 0 0x2000>;
|
assigned-addresses = <0x82000800 0 0x80000 0 0x2000>;
|
||||||
reg = <0x4800 0 0 0 0>;
|
reg = <0x2800 0 0 0 0>;
|
||||||
#address-cells = <3>;
|
#address-cells = <3>;
|
||||||
#size-cells = <2>;
|
#size-cells = <2>;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
interrupt-map-mask = <0 0 0 0>;
|
interrupt-map-mask = <0 0 0 0>;
|
||||||
interrupt-map = <0 0 0 0 &mpic 99>;
|
interrupt-map = <0 0 0 0 &mpic 62>;
|
||||||
marvell,pcie-port = <2>;
|
marvell,pcie-port = <1>;
|
||||||
marvell,pcie-lane = <0>;
|
marvell,pcie-lane = <0>;
|
||||||
clocks = <&gateclk 26>;
|
clocks = <&gateclk 9>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -101,7 +101,7 @@
|
|||||||
/*
|
/*
|
||||||
* MV78260 has 3 PCIe units Gen2.0: Two units can be
|
* MV78260 has 3 PCIe units Gen2.0: Two units can be
|
||||||
* configured as x4 or quad x1 lanes. One unit is
|
* configured as x4 or quad x1 lanes. One unit is
|
||||||
* x4/x1.
|
* x4 only.
|
||||||
*/
|
*/
|
||||||
pcie-controller {
|
pcie-controller {
|
||||||
compatible = "marvell,armada-xp-pcie";
|
compatible = "marvell,armada-xp-pcie";
|
||||||
@ -119,7 +119,9 @@
|
|||||||
0x82000000 0 0x48000 0x48000 0 0x00002000 /* Port 0.2 registers */
|
0x82000000 0 0x48000 0x48000 0 0x00002000 /* Port 0.2 registers */
|
||||||
0x82000000 0 0x4c000 0x4c000 0 0x00002000 /* Port 0.3 registers */
|
0x82000000 0 0x4c000 0x4c000 0 0x00002000 /* Port 0.3 registers */
|
||||||
0x82000000 0 0x80000 0x80000 0 0x00002000 /* Port 1.0 registers */
|
0x82000000 0 0x80000 0x80000 0 0x00002000 /* Port 1.0 registers */
|
||||||
0x82000000 0 0x82000 0x82000 0 0x00002000 /* Port 3.0 registers */
|
0x82000000 0 0x84000 0x84000 0 0x00002000 /* Port 1.1 registers */
|
||||||
|
0x82000000 0 0x88000 0x88000 0 0x00002000 /* Port 1.2 registers */
|
||||||
|
0x82000000 0 0x8c000 0x8c000 0 0x00002000 /* Port 1.3 registers */
|
||||||
0x82000000 0 0xe0000000 0xe0000000 0 0x08000000 /* non-prefetchable memory */
|
0x82000000 0 0xe0000000 0xe0000000 0 0x08000000 /* non-prefetchable memory */
|
||||||
0x81000000 0 0 0xe8000000 0 0x00100000>; /* downstream I/O */
|
0x81000000 0 0 0xe8000000 0 0x00100000>; /* downstream I/O */
|
||||||
|
|
||||||
@ -187,6 +189,70 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pcie@5,0 {
|
||||||
|
device_type = "pci";
|
||||||
|
assigned-addresses = <0x82000800 0 0x80000 0 0x2000>;
|
||||||
|
reg = <0x2800 0 0 0 0>;
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
ranges;
|
||||||
|
interrupt-map-mask = <0 0 0 0>;
|
||||||
|
interrupt-map = <0 0 0 0 &mpic 62>;
|
||||||
|
marvell,pcie-port = <1>;
|
||||||
|
marvell,pcie-lane = <0>;
|
||||||
|
clocks = <&gateclk 9>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
pcie@6,0 {
|
||||||
|
device_type = "pci";
|
||||||
|
assigned-addresses = <0x82000800 0 0x84000 0 0x2000>;
|
||||||
|
reg = <0x3000 0 0 0 0>;
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
ranges;
|
||||||
|
interrupt-map-mask = <0 0 0 0>;
|
||||||
|
interrupt-map = <0 0 0 0 &mpic 63>;
|
||||||
|
marvell,pcie-port = <1>;
|
||||||
|
marvell,pcie-lane = <1>;
|
||||||
|
clocks = <&gateclk 10>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
pcie@7,0 {
|
||||||
|
device_type = "pci";
|
||||||
|
assigned-addresses = <0x82000800 0 0x88000 0 0x2000>;
|
||||||
|
reg = <0x3800 0 0 0 0>;
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
ranges;
|
||||||
|
interrupt-map-mask = <0 0 0 0>;
|
||||||
|
interrupt-map = <0 0 0 0 &mpic 64>;
|
||||||
|
marvell,pcie-port = <1>;
|
||||||
|
marvell,pcie-lane = <2>;
|
||||||
|
clocks = <&gateclk 11>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
pcie@8,0 {
|
||||||
|
device_type = "pci";
|
||||||
|
assigned-addresses = <0x82000800 0 0x8c000 0 0x2000>;
|
||||||
|
reg = <0x4000 0 0 0 0>;
|
||||||
|
#address-cells = <3>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
ranges;
|
||||||
|
interrupt-map-mask = <0 0 0 0>;
|
||||||
|
interrupt-map = <0 0 0 0 &mpic 65>;
|
||||||
|
marvell,pcie-port = <1>;
|
||||||
|
marvell,pcie-lane = <3>;
|
||||||
|
clocks = <&gateclk 12>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
pcie@9,0 {
|
pcie@9,0 {
|
||||||
device_type = "pci";
|
device_type = "pci";
|
||||||
assigned-addresses = <0x82000800 0 0x42000 0 0x2000>;
|
assigned-addresses = <0x82000800 0 0x42000 0 0x2000>;
|
||||||
@ -202,22 +268,6 @@
|
|||||||
clocks = <&gateclk 26>;
|
clocks = <&gateclk 26>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie@10,0 {
|
|
||||||
device_type = "pci";
|
|
||||||
assigned-addresses = <0x82000800 0 0x82000 0 0x2000>;
|
|
||||||
reg = <0x5000 0 0 0 0>;
|
|
||||||
#address-cells = <3>;
|
|
||||||
#size-cells = <2>;
|
|
||||||
#interrupt-cells = <1>;
|
|
||||||
ranges;
|
|
||||||
interrupt-map-mask = <0 0 0 0>;
|
|
||||||
interrupt-map = <0 0 0 0 &mpic 103>;
|
|
||||||
marvell,pcie-port = <3>;
|
|
||||||
marvell,pcie-lane = <0>;
|
|
||||||
clocks = <&gateclk 27>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -58,7 +58,7 @@ extern void __pgd_error(const char *file, int line, pgd_t);
|
|||||||
* mapping to be mapped at. This is particularly important for
|
* mapping to be mapped at. This is particularly important for
|
||||||
* non-high vector CPUs.
|
* non-high vector CPUs.
|
||||||
*/
|
*/
|
||||||
#define FIRST_USER_ADDRESS PAGE_SIZE
|
#define FIRST_USER_ADDRESS (PAGE_SIZE * 2)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use TASK_SIZE as the ceiling argument for free_pgtables() and
|
* Use TASK_SIZE as the ceiling argument for free_pgtables() and
|
||||||
|
@ -95,19 +95,19 @@ static struct clk twi0_clk = {
|
|||||||
.name = "twi0_clk",
|
.name = "twi0_clk",
|
||||||
.pid = SAMA5D3_ID_TWI0,
|
.pid = SAMA5D3_ID_TWI0,
|
||||||
.type = CLK_TYPE_PERIPHERAL,
|
.type = CLK_TYPE_PERIPHERAL,
|
||||||
.div = AT91_PMC_PCR_DIV2,
|
.div = AT91_PMC_PCR_DIV8,
|
||||||
};
|
};
|
||||||
static struct clk twi1_clk = {
|
static struct clk twi1_clk = {
|
||||||
.name = "twi1_clk",
|
.name = "twi1_clk",
|
||||||
.pid = SAMA5D3_ID_TWI1,
|
.pid = SAMA5D3_ID_TWI1,
|
||||||
.type = CLK_TYPE_PERIPHERAL,
|
.type = CLK_TYPE_PERIPHERAL,
|
||||||
.div = AT91_PMC_PCR_DIV2,
|
.div = AT91_PMC_PCR_DIV8,
|
||||||
};
|
};
|
||||||
static struct clk twi2_clk = {
|
static struct clk twi2_clk = {
|
||||||
.name = "twi2_clk",
|
.name = "twi2_clk",
|
||||||
.pid = SAMA5D3_ID_TWI2,
|
.pid = SAMA5D3_ID_TWI2,
|
||||||
.type = CLK_TYPE_PERIPHERAL,
|
.type = CLK_TYPE_PERIPHERAL,
|
||||||
.div = AT91_PMC_PCR_DIV2,
|
.div = AT91_PMC_PCR_DIV8,
|
||||||
};
|
};
|
||||||
static struct clk mmc0_clk = {
|
static struct clk mmc0_clk = {
|
||||||
.name = "mci0_clk",
|
.name = "mci0_clk",
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
|
#include <video/vga.h>
|
||||||
|
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
@ -196,6 +197,8 @@ void __init footbridge_map_io(void)
|
|||||||
iotable_init(ebsa285_host_io_desc, ARRAY_SIZE(ebsa285_host_io_desc));
|
iotable_init(ebsa285_host_io_desc, ARRAY_SIZE(ebsa285_host_io_desc));
|
||||||
pci_map_io_early(__phys_to_pfn(DC21285_PCI_IO));
|
pci_map_io_early(__phys_to_pfn(DC21285_PCI_IO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vga_base = PCIMEM_BASE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void footbridge_restart(char mode, const char *cmd)
|
void footbridge_restart(char mode, const char *cmd)
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <video/vga.h>
|
|
||||||
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mach/pci.h>
|
#include <asm/mach/pci.h>
|
||||||
@ -291,7 +290,6 @@ void __init dc21285_preinit(void)
|
|||||||
int cfn_mode;
|
int cfn_mode;
|
||||||
|
|
||||||
pcibios_min_mem = 0x81000000;
|
pcibios_min_mem = 0x81000000;
|
||||||
vga_base = PCIMEM_BASE;
|
|
||||||
|
|
||||||
mem_size = (unsigned int)high_memory - PAGE_OFFSET;
|
mem_size = (unsigned int)high_memory - PAGE_OFFSET;
|
||||||
for (mem_mask = 0x00100000; mem_mask < 0x10000000; mem_mask <<= 1)
|
for (mem_mask = 0x00100000; mem_mask < 0x10000000; mem_mask <<= 1)
|
||||||
|
@ -30,21 +30,24 @@ static const struct {
|
|||||||
const char *name;
|
const char *name;
|
||||||
const char *trigger;
|
const char *trigger;
|
||||||
} ebsa285_leds[] = {
|
} ebsa285_leds[] = {
|
||||||
{ "ebsa285:amber", "heartbeat", },
|
{ "ebsa285:amber", "cpu0", },
|
||||||
{ "ebsa285:green", "cpu0", },
|
{ "ebsa285:green", "heartbeat", },
|
||||||
{ "ebsa285:red",},
|
{ "ebsa285:red",},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static unsigned char hw_led_state;
|
||||||
|
|
||||||
static void ebsa285_led_set(struct led_classdev *cdev,
|
static void ebsa285_led_set(struct led_classdev *cdev,
|
||||||
enum led_brightness b)
|
enum led_brightness b)
|
||||||
{
|
{
|
||||||
struct ebsa285_led *led = container_of(cdev,
|
struct ebsa285_led *led = container_of(cdev,
|
||||||
struct ebsa285_led, cdev);
|
struct ebsa285_led, cdev);
|
||||||
|
|
||||||
if (b != LED_OFF)
|
if (b == LED_OFF)
|
||||||
*XBUS_LEDS |= led->mask;
|
hw_led_state |= led->mask;
|
||||||
else
|
else
|
||||||
*XBUS_LEDS &= ~led->mask;
|
hw_led_state &= ~led->mask;
|
||||||
|
*XBUS_LEDS = hw_led_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum led_brightness ebsa285_led_get(struct led_classdev *cdev)
|
static enum led_brightness ebsa285_led_get(struct led_classdev *cdev)
|
||||||
@ -52,18 +55,19 @@ static enum led_brightness ebsa285_led_get(struct led_classdev *cdev)
|
|||||||
struct ebsa285_led *led = container_of(cdev,
|
struct ebsa285_led *led = container_of(cdev,
|
||||||
struct ebsa285_led, cdev);
|
struct ebsa285_led, cdev);
|
||||||
|
|
||||||
return (*XBUS_LEDS & led->mask) ? LED_FULL : LED_OFF;
|
return hw_led_state & led->mask ? LED_OFF : LED_FULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init ebsa285_leds_init(void)
|
static int __init ebsa285_leds_init(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (machine_is_ebsa285())
|
if (!machine_is_ebsa285())
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
/* 3 LEDS All ON */
|
/* 3 LEDS all off */
|
||||||
*XBUS_LEDS |= XBUS_LED_AMBER | XBUS_LED_GREEN | XBUS_LED_RED;
|
hw_led_state = XBUS_LED_AMBER | XBUS_LED_GREEN | XBUS_LED_RED;
|
||||||
|
*XBUS_LEDS = hw_led_state;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(ebsa285_leds); i++) {
|
for (i = 0; i < ARRAY_SIZE(ebsa285_leds); i++) {
|
||||||
struct ebsa285_led *led;
|
struct ebsa285_led *led;
|
||||||
|
@ -146,7 +146,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
|
|||||||
|
|
||||||
info.flags = VM_UNMAPPED_AREA_TOPDOWN;
|
info.flags = VM_UNMAPPED_AREA_TOPDOWN;
|
||||||
info.length = len;
|
info.length = len;
|
||||||
info.low_limit = PAGE_SIZE;
|
info.low_limit = FIRST_USER_ADDRESS;
|
||||||
info.high_limit = mm->mmap_base;
|
info.high_limit = mm->mmap_base;
|
||||||
info.align_mask = do_align ? (PAGE_MASK & (SHMLBA - 1)) : 0;
|
info.align_mask = do_align ? (PAGE_MASK & (SHMLBA - 1)) : 0;
|
||||||
info.align_offset = pgoff << PAGE_SHIFT;
|
info.align_offset = pgoff << PAGE_SHIFT;
|
||||||
|
@ -87,7 +87,8 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
|
|||||||
init_pud = pud_offset(init_pgd, 0);
|
init_pud = pud_offset(init_pgd, 0);
|
||||||
init_pmd = pmd_offset(init_pud, 0);
|
init_pmd = pmd_offset(init_pud, 0);
|
||||||
init_pte = pte_offset_map(init_pmd, 0);
|
init_pte = pte_offset_map(init_pmd, 0);
|
||||||
set_pte_ext(new_pte, *init_pte, 0);
|
set_pte_ext(new_pte + 0, init_pte[0], 0);
|
||||||
|
set_pte_ext(new_pte + 1, init_pte[1], 0);
|
||||||
pte_unmap(init_pte);
|
pte_unmap(init_pte);
|
||||||
pte_unmap(new_pte);
|
pte_unmap(new_pte);
|
||||||
}
|
}
|
||||||
|
@ -61,8 +61,15 @@ static int get_offset(struct address_space *mapping)
|
|||||||
return (unsigned long) mapping >> 8;
|
return (unsigned long) mapping >> 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long get_shared_area(struct address_space *mapping,
|
static unsigned long shared_align_offset(struct file *filp, unsigned long pgoff)
|
||||||
unsigned long addr, unsigned long len, unsigned long pgoff)
|
{
|
||||||
|
struct address_space *mapping = filp ? filp->f_mapping : NULL;
|
||||||
|
|
||||||
|
return (get_offset(mapping) + pgoff) << PAGE_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long get_shared_area(struct file *filp, unsigned long addr,
|
||||||
|
unsigned long len, unsigned long pgoff)
|
||||||
{
|
{
|
||||||
struct vm_unmapped_area_info info;
|
struct vm_unmapped_area_info info;
|
||||||
|
|
||||||
@ -71,7 +78,7 @@ static unsigned long get_shared_area(struct address_space *mapping,
|
|||||||
info.low_limit = PAGE_ALIGN(addr);
|
info.low_limit = PAGE_ALIGN(addr);
|
||||||
info.high_limit = TASK_SIZE;
|
info.high_limit = TASK_SIZE;
|
||||||
info.align_mask = PAGE_MASK & (SHMLBA - 1);
|
info.align_mask = PAGE_MASK & (SHMLBA - 1);
|
||||||
info.align_offset = (get_offset(mapping) + pgoff) << PAGE_SHIFT;
|
info.align_offset = shared_align_offset(filp, pgoff);
|
||||||
return vm_unmapped_area(&info);
|
return vm_unmapped_area(&info);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,20 +89,18 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
if (flags & MAP_FIXED) {
|
if (flags & MAP_FIXED) {
|
||||||
if ((flags & MAP_SHARED) &&
|
if ((flags & MAP_SHARED) &&
|
||||||
(addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1))
|
(addr - shared_align_offset(filp, pgoff)) & (SHMLBA - 1))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
if (!addr)
|
if (!addr)
|
||||||
addr = TASK_UNMAPPED_BASE;
|
addr = TASK_UNMAPPED_BASE;
|
||||||
|
|
||||||
if (filp) {
|
if (filp || (flags & MAP_SHARED))
|
||||||
addr = get_shared_area(filp->f_mapping, addr, len, pgoff);
|
addr = get_shared_area(filp, addr, len, pgoff);
|
||||||
} else if(flags & MAP_SHARED) {
|
else
|
||||||
addr = get_shared_area(NULL, addr, len, pgoff);
|
|
||||||
} else {
|
|
||||||
addr = get_unshared_area(addr, len);
|
addr = get_unshared_area(addr, len);
|
||||||
}
|
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,8 +55,7 @@ struct pcc_param {
|
|||||||
|
|
||||||
struct s390_xts_ctx {
|
struct s390_xts_ctx {
|
||||||
u8 key[32];
|
u8 key[32];
|
||||||
u8 xts_param[16];
|
u8 pcc_key[32];
|
||||||
struct pcc_param pcc;
|
|
||||||
long enc;
|
long enc;
|
||||||
long dec;
|
long dec;
|
||||||
int key_len;
|
int key_len;
|
||||||
@ -591,7 +590,7 @@ static int xts_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
|
|||||||
xts_ctx->enc = KM_XTS_128_ENCRYPT;
|
xts_ctx->enc = KM_XTS_128_ENCRYPT;
|
||||||
xts_ctx->dec = KM_XTS_128_DECRYPT;
|
xts_ctx->dec = KM_XTS_128_DECRYPT;
|
||||||
memcpy(xts_ctx->key + 16, in_key, 16);
|
memcpy(xts_ctx->key + 16, in_key, 16);
|
||||||
memcpy(xts_ctx->pcc.key + 16, in_key + 16, 16);
|
memcpy(xts_ctx->pcc_key + 16, in_key + 16, 16);
|
||||||
break;
|
break;
|
||||||
case 48:
|
case 48:
|
||||||
xts_ctx->enc = 0;
|
xts_ctx->enc = 0;
|
||||||
@ -602,7 +601,7 @@ static int xts_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
|
|||||||
xts_ctx->enc = KM_XTS_256_ENCRYPT;
|
xts_ctx->enc = KM_XTS_256_ENCRYPT;
|
||||||
xts_ctx->dec = KM_XTS_256_DECRYPT;
|
xts_ctx->dec = KM_XTS_256_DECRYPT;
|
||||||
memcpy(xts_ctx->key, in_key, 32);
|
memcpy(xts_ctx->key, in_key, 32);
|
||||||
memcpy(xts_ctx->pcc.key, in_key + 32, 32);
|
memcpy(xts_ctx->pcc_key, in_key + 32, 32);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
*flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
|
*flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
|
||||||
@ -621,29 +620,33 @@ static int xts_aes_crypt(struct blkcipher_desc *desc, long func,
|
|||||||
unsigned int nbytes = walk->nbytes;
|
unsigned int nbytes = walk->nbytes;
|
||||||
unsigned int n;
|
unsigned int n;
|
||||||
u8 *in, *out;
|
u8 *in, *out;
|
||||||
void *param;
|
struct pcc_param pcc_param;
|
||||||
|
struct {
|
||||||
|
u8 key[32];
|
||||||
|
u8 init[16];
|
||||||
|
} xts_param;
|
||||||
|
|
||||||
if (!nbytes)
|
if (!nbytes)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
memset(xts_ctx->pcc.block, 0, sizeof(xts_ctx->pcc.block));
|
memset(pcc_param.block, 0, sizeof(pcc_param.block));
|
||||||
memset(xts_ctx->pcc.bit, 0, sizeof(xts_ctx->pcc.bit));
|
memset(pcc_param.bit, 0, sizeof(pcc_param.bit));
|
||||||
memset(xts_ctx->pcc.xts, 0, sizeof(xts_ctx->pcc.xts));
|
memset(pcc_param.xts, 0, sizeof(pcc_param.xts));
|
||||||
memcpy(xts_ctx->pcc.tweak, walk->iv, sizeof(xts_ctx->pcc.tweak));
|
memcpy(pcc_param.tweak, walk->iv, sizeof(pcc_param.tweak));
|
||||||
param = xts_ctx->pcc.key + offset;
|
memcpy(pcc_param.key, xts_ctx->pcc_key, 32);
|
||||||
ret = crypt_s390_pcc(func, param);
|
ret = crypt_s390_pcc(func, &pcc_param.key[offset]);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
memcpy(xts_ctx->xts_param, xts_ctx->pcc.xts, 16);
|
memcpy(xts_param.key, xts_ctx->key, 32);
|
||||||
param = xts_ctx->key + offset;
|
memcpy(xts_param.init, pcc_param.xts, 16);
|
||||||
do {
|
do {
|
||||||
/* only use complete blocks */
|
/* only use complete blocks */
|
||||||
n = nbytes & ~(AES_BLOCK_SIZE - 1);
|
n = nbytes & ~(AES_BLOCK_SIZE - 1);
|
||||||
out = walk->dst.virt.addr;
|
out = walk->dst.virt.addr;
|
||||||
in = walk->src.virt.addr;
|
in = walk->src.virt.addr;
|
||||||
|
|
||||||
ret = crypt_s390_km(func, param, out, in, n);
|
ret = crypt_s390_km(func, &xts_param.key[offset], out, in, n);
|
||||||
if (ret < 0 || ret != n)
|
if (ret < 0 || ret != n)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
|
@ -31,6 +31,9 @@ ifeq ($(CONFIG_X86_32),y)
|
|||||||
|
|
||||||
KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return
|
KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return
|
||||||
|
|
||||||
|
# Don't autogenerate SSE instructions
|
||||||
|
KBUILD_CFLAGS += -mno-sse
|
||||||
|
|
||||||
# Never want PIC in a 32-bit kernel, prevent breakage with GCC built
|
# Never want PIC in a 32-bit kernel, prevent breakage with GCC built
|
||||||
# with nonstandard options
|
# with nonstandard options
|
||||||
KBUILD_CFLAGS += -fno-pic
|
KBUILD_CFLAGS += -fno-pic
|
||||||
@ -57,8 +60,11 @@ else
|
|||||||
KBUILD_AFLAGS += -m64
|
KBUILD_AFLAGS += -m64
|
||||||
KBUILD_CFLAGS += -m64
|
KBUILD_CFLAGS += -m64
|
||||||
|
|
||||||
|
# Don't autogenerate SSE instructions
|
||||||
|
KBUILD_CFLAGS += -mno-sse
|
||||||
|
|
||||||
# Use -mpreferred-stack-boundary=3 if supported.
|
# Use -mpreferred-stack-boundary=3 if supported.
|
||||||
KBUILD_CFLAGS += $(call cc-option,-mno-sse -mpreferred-stack-boundary=3)
|
KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3)
|
||||||
|
|
||||||
# FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu)
|
# FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu)
|
||||||
cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
|
cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
|
||||||
|
@ -399,9 +399,9 @@ static inline uint64_t blkg_stat_read(struct blkg_stat *stat)
|
|||||||
uint64_t v;
|
uint64_t v;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
start = u64_stats_fetch_begin(&stat->syncp);
|
start = u64_stats_fetch_begin_bh(&stat->syncp);
|
||||||
v = stat->cnt;
|
v = stat->cnt;
|
||||||
} while (u64_stats_fetch_retry(&stat->syncp, start));
|
} while (u64_stats_fetch_retry_bh(&stat->syncp, start));
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@ -467,9 +467,9 @@ static inline struct blkg_rwstat blkg_rwstat_read(struct blkg_rwstat *rwstat)
|
|||||||
struct blkg_rwstat tmp;
|
struct blkg_rwstat tmp;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
start = u64_stats_fetch_begin(&rwstat->syncp);
|
start = u64_stats_fetch_begin_bh(&rwstat->syncp);
|
||||||
tmp = *rwstat;
|
tmp = *rwstat;
|
||||||
} while (u64_stats_fetch_retry(&rwstat->syncp, start));
|
} while (u64_stats_fetch_retry_bh(&rwstat->syncp, start));
|
||||||
|
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
@ -114,6 +114,9 @@ static ssize_t hash_sendpage(struct socket *sock, struct page *page,
|
|||||||
struct hash_ctx *ctx = ask->private;
|
struct hash_ctx *ctx = ask->private;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
if (flags & MSG_SENDPAGE_NOTLAST)
|
||||||
|
flags |= MSG_MORE;
|
||||||
|
|
||||||
if (flags & MSG_SENDPAGE_NOTLAST)
|
if (flags & MSG_SENDPAGE_NOTLAST)
|
||||||
flags |= MSG_MORE;
|
flags |= MSG_MORE;
|
||||||
|
|
||||||
|
@ -378,6 +378,9 @@ static ssize_t skcipher_sendpage(struct socket *sock, struct page *page,
|
|||||||
struct skcipher_sg_list *sgl;
|
struct skcipher_sg_list *sgl;
|
||||||
int err = -EINVAL;
|
int err = -EINVAL;
|
||||||
|
|
||||||
|
if (flags & MSG_SENDPAGE_NOTLAST)
|
||||||
|
flags |= MSG_MORE;
|
||||||
|
|
||||||
if (flags & MSG_SENDPAGE_NOTLAST)
|
if (flags & MSG_SENDPAGE_NOTLAST)
|
||||||
flags |= MSG_MORE;
|
flags |= MSG_MORE;
|
||||||
|
|
||||||
|
@ -368,9 +368,10 @@ static void crypto_authenc_encrypt_done(struct crypto_async_request *req,
|
|||||||
if (!err) {
|
if (!err) {
|
||||||
struct crypto_aead *authenc = crypto_aead_reqtfm(areq);
|
struct crypto_aead *authenc = crypto_aead_reqtfm(areq);
|
||||||
struct crypto_authenc_ctx *ctx = crypto_aead_ctx(authenc);
|
struct crypto_authenc_ctx *ctx = crypto_aead_ctx(authenc);
|
||||||
struct ablkcipher_request *abreq = aead_request_ctx(areq);
|
struct authenc_request_ctx *areq_ctx = aead_request_ctx(areq);
|
||||||
u8 *iv = (u8 *)(abreq + 1) +
|
struct ablkcipher_request *abreq = (void *)(areq_ctx->tail
|
||||||
crypto_ablkcipher_reqsize(ctx->enc);
|
+ ctx->reqoff);
|
||||||
|
u8 *iv = (u8 *)abreq - crypto_ablkcipher_ivsize(ctx->enc);
|
||||||
|
|
||||||
err = crypto_authenc_genicv(areq, iv, 0);
|
err = crypto_authenc_genicv(areq, iv, 0);
|
||||||
}
|
}
|
||||||
|
@ -271,6 +271,7 @@ static int crypto_ccm_auth(struct aead_request *req, struct scatterlist *plain,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* compute plaintext into mac */
|
/* compute plaintext into mac */
|
||||||
|
if (cryptlen)
|
||||||
get_data_to_compute(cipher, pctx, plain, cryptlen);
|
get_data_to_compute(cipher, pctx, plain, cryptlen);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
@ -3614,6 +3614,7 @@ int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht)
|
|||||||
shost->max_lun = 1;
|
shost->max_lun = 1;
|
||||||
shost->max_channel = 1;
|
shost->max_channel = 1;
|
||||||
shost->max_cmd_len = 16;
|
shost->max_cmd_len = 16;
|
||||||
|
shost->no_write_same = 1;
|
||||||
|
|
||||||
/* Schedule policy is determined by ->qc_defer()
|
/* Schedule policy is determined by ->qc_defer()
|
||||||
* callback and it needs to see every deferred qc.
|
* callback and it needs to see every deferred qc.
|
||||||
|
@ -664,6 +664,13 @@ static struct dmi_system_id __initdata i8k_dmi_table[] = {
|
|||||||
DMI_MATCH(DMI_PRODUCT_NAME, "Vostro"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "Vostro"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.ident = "Dell XPS421",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "XPS L421X"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1626,6 +1626,7 @@ static struct scsi_host_template scsi_driver_template = {
|
|||||||
.cmd_per_lun = 1,
|
.cmd_per_lun = 1,
|
||||||
.can_queue = 1,
|
.can_queue = 1,
|
||||||
.sdev_attrs = sbp2_scsi_sysfs_attrs,
|
.sdev_attrs = sbp2_scsi_sysfs_attrs,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_AUTHOR("Kristian Hoegsberg <krh@bitplanet.net>");
|
MODULE_AUTHOR("Kristian Hoegsberg <krh@bitplanet.net>");
|
||||||
|
@ -69,10 +69,14 @@ static int mpc8572_gpio_get(struct gpio_chip *gc, unsigned int gpio)
|
|||||||
u32 val;
|
u32 val;
|
||||||
struct of_mm_gpio_chip *mm = to_of_mm_gpio_chip(gc);
|
struct of_mm_gpio_chip *mm = to_of_mm_gpio_chip(gc);
|
||||||
struct mpc8xxx_gpio_chip *mpc8xxx_gc = to_mpc8xxx_gpio_chip(mm);
|
struct mpc8xxx_gpio_chip *mpc8xxx_gc = to_mpc8xxx_gpio_chip(mm);
|
||||||
|
u32 out_mask, out_shadow;
|
||||||
|
|
||||||
val = in_be32(mm->regs + GPIO_DAT) & ~in_be32(mm->regs + GPIO_DIR);
|
out_mask = in_be32(mm->regs + GPIO_DIR);
|
||||||
|
|
||||||
return (val | mpc8xxx_gc->data) & mpc8xxx_gpio2mask(gpio);
|
val = in_be32(mm->regs + GPIO_DAT) & ~out_mask;
|
||||||
|
out_shadow = mpc8xxx_gc->data & out_mask;
|
||||||
|
|
||||||
|
return (val | out_shadow) & mpc8xxx_gpio2mask(gpio);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mpc8xxx_gpio_get(struct gpio_chip *gc, unsigned int gpio)
|
static int mpc8xxx_gpio_get(struct gpio_chip *gc, unsigned int gpio)
|
||||||
|
@ -803,6 +803,8 @@
|
|||||||
#define USB_DEVICE_ID_SYNAPTICS_COMP_TP 0x0009
|
#define USB_DEVICE_ID_SYNAPTICS_COMP_TP 0x0009
|
||||||
#define USB_DEVICE_ID_SYNAPTICS_WTP 0x0010
|
#define USB_DEVICE_ID_SYNAPTICS_WTP 0x0010
|
||||||
#define USB_DEVICE_ID_SYNAPTICS_DPAD 0x0013
|
#define USB_DEVICE_ID_SYNAPTICS_DPAD 0x0013
|
||||||
|
#define USB_DEVICE_ID_SYNAPTICS_LTS1 0x0af8
|
||||||
|
#define USB_DEVICE_ID_SYNAPTICS_LTS2 0x1d10
|
||||||
|
|
||||||
#define USB_VENDOR_ID_THINGM 0x27b8
|
#define USB_VENDOR_ID_THINGM 0x27b8
|
||||||
#define USB_DEVICE_ID_BLINK1 0x01ed
|
#define USB_DEVICE_ID_BLINK1 0x01ed
|
||||||
@ -936,4 +938,7 @@
|
|||||||
#define UNIFYING_DEVICE_ID_TOUCH_MOUSE_T620 0x4027
|
#define UNIFYING_DEVICE_ID_TOUCH_MOUSE_T620 0x4027
|
||||||
#define UNIFYING_DEVICE_ID_ALLINONE_KBD_TK820 0x4102
|
#define UNIFYING_DEVICE_ID_ALLINONE_KBD_TK820 0x4102
|
||||||
|
|
||||||
|
#define USB_VENDOR_ID_SIS 0x0457
|
||||||
|
#define USB_DEVICE_ID_SIS_TS 0x1013
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -116,6 +116,9 @@ static const struct hid_blacklist {
|
|||||||
{ USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X, HID_QUIRK_MULTI_INPUT },
|
{ USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X, HID_QUIRK_MULTI_INPUT },
|
||||||
{ USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X, HID_QUIRK_MULTI_INPUT },
|
{ USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X, HID_QUIRK_MULTI_INPUT },
|
||||||
{ USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE, HID_QUIRK_NO_INIT_REPORTS },
|
{ USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE, HID_QUIRK_NO_INIT_REPORTS },
|
||||||
|
{ USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS1, HID_QUIRK_NO_INIT_REPORTS },
|
||||||
|
{ USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2, HID_QUIRK_NO_INIT_REPORTS },
|
||||||
|
{ USB_VENDOR_ID_SIS, USB_DEVICE_ID_SIS_TS, HID_QUIRK_NO_INIT_REPORTS },
|
||||||
|
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
@ -80,7 +80,7 @@ config INPUT_MATRIXKMAP
|
|||||||
comment "Userland interfaces"
|
comment "Userland interfaces"
|
||||||
|
|
||||||
config INPUT_MOUSEDEV
|
config INPUT_MOUSEDEV
|
||||||
tristate "Mouse interface" if EXPERT
|
tristate "Mouse interface"
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Y here if you want your mouse to be accessible as char devices
|
Say Y here if you want your mouse to be accessible as char devices
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# Input core configuration
|
# Input core configuration
|
||||||
#
|
#
|
||||||
menuconfig INPUT_KEYBOARD
|
menuconfig INPUT_KEYBOARD
|
||||||
bool "Keyboards" if EXPERT || !X86
|
bool "Keyboards"
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Y here, and a list of supported keyboards will be displayed.
|
Say Y here, and a list of supported keyboards will be displayed.
|
||||||
@ -67,7 +67,7 @@ config KEYBOARD_ATARI
|
|||||||
module will be called atakbd.
|
module will be called atakbd.
|
||||||
|
|
||||||
config KEYBOARD_ATKBD
|
config KEYBOARD_ATKBD
|
||||||
tristate "AT keyboard" if EXPERT || !X86
|
tristate "AT keyboard"
|
||||||
default y
|
default y
|
||||||
select SERIO
|
select SERIO
|
||||||
select SERIO_LIBPS2
|
select SERIO_LIBPS2
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# Input core configuration
|
# Input core configuration
|
||||||
#
|
#
|
||||||
config SERIO
|
config SERIO
|
||||||
tristate "Serial I/O support" if EXPERT || !X86
|
tristate "Serial I/O support"
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Say Yes here if you have any input device that uses serial I/O to
|
Say Yes here if you have any input device that uses serial I/O to
|
||||||
@ -19,7 +19,7 @@ config SERIO
|
|||||||
if SERIO
|
if SERIO
|
||||||
|
|
||||||
config SERIO_I8042
|
config SERIO_I8042
|
||||||
tristate "i8042 PC Keyboard controller" if EXPERT || !X86
|
tristate "i8042 PC Keyboard controller"
|
||||||
default y
|
default y
|
||||||
depends on !PARISC && (!ARM || ARCH_SHARK || FOOTBRIDGE_HOST) && \
|
depends on !PARISC && (!ARM || ARCH_SHARK || FOOTBRIDGE_HOST) && \
|
||||||
(!SUPERH || SH_CAYMAN) && !M68K && !BLACKFIN && !S390
|
(!SUPERH || SH_CAYMAN) && !M68K && !BLACKFIN && !S390
|
||||||
@ -169,7 +169,7 @@ config SERIO_MACEPS2
|
|||||||
module will be called maceps2.
|
module will be called maceps2.
|
||||||
|
|
||||||
config SERIO_LIBPS2
|
config SERIO_LIBPS2
|
||||||
tristate "PS/2 driver library" if EXPERT
|
tristate "PS/2 driver library"
|
||||||
depends on SERIO_I8042 || SERIO_I8042=n
|
depends on SERIO_I8042 || SERIO_I8042=n
|
||||||
help
|
help
|
||||||
Say Y here if you are using a driver for device connected
|
Say Y here if you are using a driver for device connected
|
||||||
|
@ -198,6 +198,13 @@ static void enclosure_remove_links(struct enclosure_component *cdev)
|
|||||||
{
|
{
|
||||||
char name[ENCLOSURE_NAME_SIZE];
|
char name[ENCLOSURE_NAME_SIZE];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In odd circumstances, like multipath devices, something else may
|
||||||
|
* already have removed the links, so check for this condition first.
|
||||||
|
*/
|
||||||
|
if (!cdev->dev->kobj.sd)
|
||||||
|
return;
|
||||||
|
|
||||||
enclosure_link_name(cdev, name);
|
enclosure_link_name(cdev, name);
|
||||||
sysfs_remove_link(&cdev->dev->kobj, name);
|
sysfs_remove_link(&cdev->dev->kobj, name);
|
||||||
sysfs_remove_link(&cdev->cdev.kobj, "device");
|
sysfs_remove_link(&cdev->cdev.kobj, "device");
|
||||||
|
@ -109,8 +109,12 @@
|
|||||||
#define MEI_DEV_ID_PPT_2 0x1CBA /* Panther Point */
|
#define MEI_DEV_ID_PPT_2 0x1CBA /* Panther Point */
|
||||||
#define MEI_DEV_ID_PPT_3 0x1DBA /* Panther Point */
|
#define MEI_DEV_ID_PPT_3 0x1DBA /* Panther Point */
|
||||||
|
|
||||||
#define MEI_DEV_ID_LPT 0x8C3A /* Lynx Point */
|
#define MEI_DEV_ID_LPT_H 0x8C3A /* Lynx Point H */
|
||||||
|
#define MEI_DEV_ID_LPT_W 0x8D3A /* Lynx Point - Wellsburg */
|
||||||
#define MEI_DEV_ID_LPT_LP 0x9C3A /* Lynx Point LP */
|
#define MEI_DEV_ID_LPT_LP 0x9C3A /* Lynx Point LP */
|
||||||
|
#define MEI_DEV_ID_LPT_HR 0x8CBA /* Lynx Point H Refresh */
|
||||||
|
|
||||||
|
#define MEI_DEV_ID_WPT_LP 0x9CBA /* Wildcat Point LP */
|
||||||
/*
|
/*
|
||||||
* MEI HW Section
|
* MEI HW Section
|
||||||
*/
|
*/
|
||||||
|
@ -79,8 +79,11 @@ static DEFINE_PCI_DEVICE_TABLE(mei_me_pci_tbl) = {
|
|||||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_PPT_1)},
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_PPT_1)},
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_PPT_2)},
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_PPT_2)},
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_PPT_3)},
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_PPT_3)},
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT)},
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT_H)},
|
||||||
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT_W)},
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT_LP)},
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT_LP)},
|
||||||
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_LPT_HR)},
|
||||||
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, MEI_DEV_ID_WPT_LP)},
|
||||||
|
|
||||||
/* required last entry */
|
/* required last entry */
|
||||||
{0, }
|
{0, }
|
||||||
|
@ -712,22 +712,31 @@ static int c_can_set_mode(struct net_device *dev, enum can_mode mode)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int c_can_get_berr_counter(const struct net_device *dev,
|
static int __c_can_get_berr_counter(const struct net_device *dev,
|
||||||
struct can_berr_counter *bec)
|
struct can_berr_counter *bec)
|
||||||
{
|
{
|
||||||
unsigned int reg_err_counter;
|
unsigned int reg_err_counter;
|
||||||
struct c_can_priv *priv = netdev_priv(dev);
|
struct c_can_priv *priv = netdev_priv(dev);
|
||||||
|
|
||||||
c_can_pm_runtime_get_sync(priv);
|
|
||||||
|
|
||||||
reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
|
reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
|
||||||
bec->rxerr = (reg_err_counter & ERR_CNT_REC_MASK) >>
|
bec->rxerr = (reg_err_counter & ERR_CNT_REC_MASK) >>
|
||||||
ERR_CNT_REC_SHIFT;
|
ERR_CNT_REC_SHIFT;
|
||||||
bec->txerr = reg_err_counter & ERR_CNT_TEC_MASK;
|
bec->txerr = reg_err_counter & ERR_CNT_TEC_MASK;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int c_can_get_berr_counter(const struct net_device *dev,
|
||||||
|
struct can_berr_counter *bec)
|
||||||
|
{
|
||||||
|
struct c_can_priv *priv = netdev_priv(dev);
|
||||||
|
int err;
|
||||||
|
|
||||||
|
c_can_pm_runtime_get_sync(priv);
|
||||||
|
err = __c_can_get_berr_counter(dev, bec);
|
||||||
c_can_pm_runtime_put_sync(priv);
|
c_can_pm_runtime_put_sync(priv);
|
||||||
|
|
||||||
return 0;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -872,7 +881,7 @@ static int c_can_handle_state_change(struct net_device *dev,
|
|||||||
if (unlikely(!skb))
|
if (unlikely(!skb))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
c_can_get_berr_counter(dev, &bec);
|
__c_can_get_berr_counter(dev, &bec);
|
||||||
reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
|
reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
|
||||||
rx_err_passive = (reg_err_counter & ERR_CNT_RP_MASK) >>
|
rx_err_passive = (reg_err_counter & ERR_CNT_RP_MASK) >>
|
||||||
ERR_CNT_RP_SHIFT;
|
ERR_CNT_RP_SHIFT;
|
||||||
|
@ -494,20 +494,20 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
|
|||||||
uint8_t isrc, status;
|
uint8_t isrc, status;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
/* Shared interrupts and IRQ off? */
|
|
||||||
if (priv->read_reg(priv, SJA1000_IER) == IRQ_OFF)
|
|
||||||
return IRQ_NONE;
|
|
||||||
|
|
||||||
if (priv->pre_irq)
|
if (priv->pre_irq)
|
||||||
priv->pre_irq(priv);
|
priv->pre_irq(priv);
|
||||||
|
|
||||||
|
/* Shared interrupts and IRQ off? */
|
||||||
|
if (priv->read_reg(priv, SJA1000_IER) == IRQ_OFF)
|
||||||
|
goto out;
|
||||||
|
|
||||||
while ((isrc = priv->read_reg(priv, SJA1000_IR)) &&
|
while ((isrc = priv->read_reg(priv, SJA1000_IR)) &&
|
||||||
(n < SJA1000_MAX_IRQ)) {
|
(n < SJA1000_MAX_IRQ)) {
|
||||||
n++;
|
|
||||||
status = priv->read_reg(priv, SJA1000_SR);
|
status = priv->read_reg(priv, SJA1000_SR);
|
||||||
/* check for absent controller due to hw unplug */
|
/* check for absent controller due to hw unplug */
|
||||||
if (status == 0xFF && sja1000_is_absent(priv))
|
if (status == 0xFF && sja1000_is_absent(priv))
|
||||||
return IRQ_NONE;
|
goto out;
|
||||||
|
|
||||||
if (isrc & IRQ_WUI)
|
if (isrc & IRQ_WUI)
|
||||||
netdev_warn(dev, "wakeup interrupt\n");
|
netdev_warn(dev, "wakeup interrupt\n");
|
||||||
@ -535,7 +535,7 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
|
|||||||
status = priv->read_reg(priv, SJA1000_SR);
|
status = priv->read_reg(priv, SJA1000_SR);
|
||||||
/* check for absent controller */
|
/* check for absent controller */
|
||||||
if (status == 0xFF && sja1000_is_absent(priv))
|
if (status == 0xFF && sja1000_is_absent(priv))
|
||||||
return IRQ_NONE;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isrc & (IRQ_DOI | IRQ_EI | IRQ_BEI | IRQ_EPI | IRQ_ALI)) {
|
if (isrc & (IRQ_DOI | IRQ_EI | IRQ_BEI | IRQ_EPI | IRQ_ALI)) {
|
||||||
@ -543,8 +543,9 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
|
|||||||
if (sja1000_err(dev, isrc, status))
|
if (sja1000_err(dev, isrc, status))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
n++;
|
||||||
}
|
}
|
||||||
|
out:
|
||||||
if (priv->post_irq)
|
if (priv->post_irq)
|
||||||
priv->post_irq(priv);
|
priv->post_irq(priv);
|
||||||
|
|
||||||
|
@ -6722,12 +6722,6 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
|
|||||||
pci_unmap_single(tp->pdev, dma_addr, skb_size,
|
pci_unmap_single(tp->pdev, dma_addr, skb_size,
|
||||||
PCI_DMA_FROMDEVICE);
|
PCI_DMA_FROMDEVICE);
|
||||||
|
|
||||||
skb = build_skb(data, frag_size);
|
|
||||||
if (!skb) {
|
|
||||||
tg3_frag_free(frag_size != 0, data);
|
|
||||||
goto drop_it_no_recycle;
|
|
||||||
}
|
|
||||||
skb_reserve(skb, TG3_RX_OFFSET(tp));
|
|
||||||
/* Ensure that the update to the data happens
|
/* Ensure that the update to the data happens
|
||||||
* after the usage of the old DMA mapping.
|
* after the usage of the old DMA mapping.
|
||||||
*/
|
*/
|
||||||
@ -6735,6 +6729,12 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
|
|||||||
|
|
||||||
ri->data = NULL;
|
ri->data = NULL;
|
||||||
|
|
||||||
|
skb = build_skb(data, frag_size);
|
||||||
|
if (!skb) {
|
||||||
|
tg3_frag_free(frag_size != 0, data);
|
||||||
|
goto drop_it_no_recycle;
|
||||||
|
}
|
||||||
|
skb_reserve(skb, TG3_RX_OFFSET(tp));
|
||||||
} else {
|
} else {
|
||||||
tg3_recycle_rx(tnapi, tpr, opaque_key,
|
tg3_recycle_rx(tnapi, tpr, opaque_key,
|
||||||
desc_idx, *post_ptr);
|
desc_idx, *post_ptr);
|
||||||
|
@ -46,7 +46,8 @@
|
|||||||
defined(CONFIG_MACH_LITTLETON) ||\
|
defined(CONFIG_MACH_LITTLETON) ||\
|
||||||
defined(CONFIG_MACH_ZYLONITE2) ||\
|
defined(CONFIG_MACH_ZYLONITE2) ||\
|
||||||
defined(CONFIG_ARCH_VIPER) ||\
|
defined(CONFIG_ARCH_VIPER) ||\
|
||||||
defined(CONFIG_MACH_STARGATE2)
|
defined(CONFIG_MACH_STARGATE2) ||\
|
||||||
|
defined(CONFIG_ARCH_VERSATILE)
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
|
||||||
@ -154,6 +155,8 @@ static inline void SMC_outw(u16 val, void __iomem *ioaddr, int reg)
|
|||||||
#define SMC_outl(v, a, r) writel(v, (a) + (r))
|
#define SMC_outl(v, a, r) writel(v, (a) + (r))
|
||||||
#define SMC_insl(a, r, p, l) readsl((a) + (r), p, l)
|
#define SMC_insl(a, r, p, l) readsl((a) + (r), p, l)
|
||||||
#define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l)
|
#define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l)
|
||||||
|
#define SMC_insw(a, r, p, l) readsw((a) + (r), p, l)
|
||||||
|
#define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l)
|
||||||
#define SMC_IRQ_FLAGS (-1) /* from resource */
|
#define SMC_IRQ_FLAGS (-1) /* from resource */
|
||||||
|
|
||||||
/* We actually can't write halfwords properly if not word aligned */
|
/* We actually can't write halfwords properly if not word aligned */
|
||||||
@ -206,23 +209,6 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg)
|
|||||||
#define RPC_LSA_DEFAULT RPC_LED_TX_RX
|
#define RPC_LSA_DEFAULT RPC_LED_TX_RX
|
||||||
#define RPC_LSB_DEFAULT RPC_LED_100_10
|
#define RPC_LSB_DEFAULT RPC_LED_100_10
|
||||||
|
|
||||||
#elif defined(CONFIG_ARCH_VERSATILE)
|
|
||||||
|
|
||||||
#define SMC_CAN_USE_8BIT 1
|
|
||||||
#define SMC_CAN_USE_16BIT 1
|
|
||||||
#define SMC_CAN_USE_32BIT 1
|
|
||||||
#define SMC_NOWAIT 1
|
|
||||||
|
|
||||||
#define SMC_inb(a, r) readb((a) + (r))
|
|
||||||
#define SMC_inw(a, r) readw((a) + (r))
|
|
||||||
#define SMC_inl(a, r) readl((a) + (r))
|
|
||||||
#define SMC_outb(v, a, r) writeb(v, (a) + (r))
|
|
||||||
#define SMC_outw(v, a, r) writew(v, (a) + (r))
|
|
||||||
#define SMC_outl(v, a, r) writel(v, (a) + (r))
|
|
||||||
#define SMC_insl(a, r, p, l) readsl((a) + (r), p, l)
|
|
||||||
#define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l)
|
|
||||||
#define SMC_IRQ_FLAGS (-1) /* from resource */
|
|
||||||
|
|
||||||
#elif defined(CONFIG_MN10300)
|
#elif defined(CONFIG_MN10300)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -445,27 +445,19 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
|
|||||||
/* Copy MAC header from skb into command buffer */
|
/* Copy MAC header from skb into command buffer */
|
||||||
memcpy(tx_cmd->hdr, hdr, hdr_len);
|
memcpy(tx_cmd->hdr, hdr, hdr_len);
|
||||||
|
|
||||||
|
txq_id = info->hw_queue;
|
||||||
|
|
||||||
if (is_agg)
|
if (is_agg)
|
||||||
txq_id = priv->tid_data[sta_id][tid].agg.txq_id;
|
txq_id = priv->tid_data[sta_id][tid].agg.txq_id;
|
||||||
else if (info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM) {
|
else if (info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM) {
|
||||||
/*
|
|
||||||
* Send this frame after DTIM -- there's a special queue
|
|
||||||
* reserved for this for contexts that support AP mode.
|
|
||||||
*/
|
|
||||||
txq_id = ctx->mcast_queue;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The microcode will clear the more data
|
* The microcode will clear the more data
|
||||||
* bit in the last frame it transmits.
|
* bit in the last frame it transmits.
|
||||||
*/
|
*/
|
||||||
hdr->frame_control |=
|
hdr->frame_control |=
|
||||||
cpu_to_le16(IEEE80211_FCTL_MOREDATA);
|
cpu_to_le16(IEEE80211_FCTL_MOREDATA);
|
||||||
} else if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN)
|
}
|
||||||
txq_id = IWL_AUX_QUEUE;
|
|
||||||
else
|
|
||||||
txq_id = ctx->ac_to_queue[skb_get_queue_mapping(skb)];
|
|
||||||
|
|
||||||
WARN_ON_ONCE(!is_agg && txq_id != info->hw_queue);
|
|
||||||
WARN_ON_ONCE(is_agg &&
|
WARN_ON_ONCE(is_agg &&
|
||||||
priv->queue_to_mac80211[txq_id] != info->hw_queue);
|
priv->queue_to_mac80211[txq_id] != info->hw_queue);
|
||||||
|
|
||||||
|
@ -2025,7 +2025,8 @@ static struct scsi_host_template driver_template = {
|
|||||||
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
.shost_attrs = twa_host_attrs,
|
.shost_attrs = twa_host_attrs,
|
||||||
.emulated = 1
|
.emulated = 1,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This function will probe and initialize a card */
|
/* This function will probe and initialize a card */
|
||||||
|
@ -1600,7 +1600,8 @@ static struct scsi_host_template driver_template = {
|
|||||||
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
.shost_attrs = twl_host_attrs,
|
.shost_attrs = twl_host_attrs,
|
||||||
.emulated = 1
|
.emulated = 1,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This function will probe and initialize a card */
|
/* This function will probe and initialize a card */
|
||||||
|
@ -2277,7 +2277,8 @@ static struct scsi_host_template driver_template = {
|
|||||||
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
.shost_attrs = tw_host_attrs,
|
.shost_attrs = tw_host_attrs,
|
||||||
.emulated = 1
|
.emulated = 1,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This function will probe and initialize a card */
|
/* This function will probe and initialize a card */
|
||||||
|
@ -1081,6 +1081,7 @@ static struct scsi_host_template aac_driver_template = {
|
|||||||
#endif
|
#endif
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
.emulated = 1,
|
.emulated = 1,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __aac_shutdown(struct aac_dev * aac)
|
static void __aac_shutdown(struct aac_dev * aac)
|
||||||
|
@ -137,6 +137,7 @@ static struct scsi_host_template arcmsr_scsi_host_template = {
|
|||||||
.cmd_per_lun = ARCMSR_MAX_CMD_PERLUN,
|
.cmd_per_lun = ARCMSR_MAX_CMD_PERLUN,
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
.shost_attrs = arcmsr_host_attrs,
|
.shost_attrs = arcmsr_host_attrs,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
static struct pci_device_id arcmsr_device_id_table[] = {
|
static struct pci_device_id arcmsr_device_id_table[] = {
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1110)},
|
{PCI_DEVICE(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1110)},
|
||||||
|
@ -299,6 +299,7 @@ wwn_t bfa_fcs_lport_get_rport(struct bfa_fcs_lport_s *port, wwn_t wwn,
|
|||||||
struct bfa_fcs_lport_s *bfa_fcs_lookup_port(struct bfa_fcs_s *fcs,
|
struct bfa_fcs_lport_s *bfa_fcs_lookup_port(struct bfa_fcs_s *fcs,
|
||||||
u16 vf_id, wwn_t lpwwn);
|
u16 vf_id, wwn_t lpwwn);
|
||||||
|
|
||||||
|
void bfa_fcs_lport_set_symname(struct bfa_fcs_lport_s *port, char *symname);
|
||||||
void bfa_fcs_lport_get_info(struct bfa_fcs_lport_s *port,
|
void bfa_fcs_lport_get_info(struct bfa_fcs_lport_s *port,
|
||||||
struct bfa_lport_info_s *port_info);
|
struct bfa_lport_info_s *port_info);
|
||||||
void bfa_fcs_lport_get_attr(struct bfa_fcs_lport_s *port,
|
void bfa_fcs_lport_get_attr(struct bfa_fcs_lport_s *port,
|
||||||
|
@ -1097,6 +1097,17 @@ bfa_fcs_lport_init(struct bfa_fcs_lport_s *lport,
|
|||||||
bfa_sm_send_event(lport, BFA_FCS_PORT_SM_CREATE);
|
bfa_sm_send_event(lport, BFA_FCS_PORT_SM_CREATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
bfa_fcs_lport_set_symname(struct bfa_fcs_lport_s *port,
|
||||||
|
char *symname)
|
||||||
|
{
|
||||||
|
strcpy(port->port_cfg.sym_name.symname, symname);
|
||||||
|
|
||||||
|
if (bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online))
|
||||||
|
bfa_fcs_lport_ns_util_send_rspn_id(
|
||||||
|
BFA_FCS_GET_NS_FROM_PORT(port), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fcs_lport_api
|
* fcs_lport_api
|
||||||
*/
|
*/
|
||||||
@ -4950,9 +4961,6 @@ bfa_fcs_lport_ns_util_send_rspn_id(void *cbarg, struct bfa_fcxp_s *fcxp_alloced)
|
|||||||
u8 *psymbl = &symbl[0];
|
u8 *psymbl = &symbl[0];
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
if (!bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online))
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Avoid sending RSPN in the following states. */
|
/* Avoid sending RSPN in the following states. */
|
||||||
if (bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_offline) ||
|
if (bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_offline) ||
|
||||||
bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_plogi_sending) ||
|
bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_plogi_sending) ||
|
||||||
|
@ -610,11 +610,8 @@ bfad_im_vport_set_symbolic_name(struct fc_vport *fc_vport)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
spin_lock_irqsave(&bfad->bfad_lock, flags);
|
spin_lock_irqsave(&bfad->bfad_lock, flags);
|
||||||
if (strlen(sym_name) > 0) {
|
if (strlen(sym_name) > 0)
|
||||||
strcpy(fcs_vport->lport.port_cfg.sym_name.symname, sym_name);
|
bfa_fcs_lport_set_symname(&fcs_vport->lport, sym_name);
|
||||||
bfa_fcs_lport_ns_util_send_rspn_id(
|
|
||||||
BFA_FCS_GET_NS_FROM_PORT((&fcs_vport->lport)), NULL);
|
|
||||||
}
|
|
||||||
spin_unlock_irqrestore(&bfad->bfad_lock, flags);
|
spin_unlock_irqrestore(&bfad->bfad_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4686,6 +4686,7 @@ static struct scsi_host_template gdth_template = {
|
|||||||
.cmd_per_lun = GDTH_MAXC_P_L,
|
.cmd_per_lun = GDTH_MAXC_P_L,
|
||||||
.unchecked_isa_dma = 1,
|
.unchecked_isa_dma = 1,
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_ISA
|
#ifdef CONFIG_ISA
|
||||||
|
@ -388,6 +388,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
|
|||||||
shost->unchecked_isa_dma = sht->unchecked_isa_dma;
|
shost->unchecked_isa_dma = sht->unchecked_isa_dma;
|
||||||
shost->use_clustering = sht->use_clustering;
|
shost->use_clustering = sht->use_clustering;
|
||||||
shost->ordered_tag = sht->ordered_tag;
|
shost->ordered_tag = sht->ordered_tag;
|
||||||
|
shost->no_write_same = sht->no_write_same;
|
||||||
|
|
||||||
if (sht->supported_mode == MODE_UNKNOWN)
|
if (sht->supported_mode == MODE_UNKNOWN)
|
||||||
/* means we didn't set it ... default to INITIATOR */
|
/* means we didn't set it ... default to INITIATOR */
|
||||||
|
@ -538,6 +538,7 @@ static struct scsi_host_template hpsa_driver_template = {
|
|||||||
.sdev_attrs = hpsa_sdev_attrs,
|
.sdev_attrs = hpsa_sdev_attrs,
|
||||||
.shost_attrs = hpsa_shost_attrs,
|
.shost_attrs = hpsa_shost_attrs,
|
||||||
.max_sectors = 8192,
|
.max_sectors = 8192,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -1265,7 +1266,7 @@ static void complete_scsi_command(struct CommandList *cp)
|
|||||||
"has check condition: aborted command: "
|
"has check condition: aborted command: "
|
||||||
"ASC: 0x%x, ASCQ: 0x%x\n",
|
"ASC: 0x%x, ASCQ: 0x%x\n",
|
||||||
cp, asc, ascq);
|
cp, asc, ascq);
|
||||||
cmd->result = DID_SOFT_ERROR << 16;
|
cmd->result |= DID_SOFT_ERROR << 16;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* Must be some other type of check condition */
|
/* Must be some other type of check condition */
|
||||||
@ -4904,7 +4905,7 @@ reinit_after_soft_reset:
|
|||||||
hpsa_hba_inquiry(h);
|
hpsa_hba_inquiry(h);
|
||||||
hpsa_register_scsi(h); /* hook ourselves into SCSI subsystem */
|
hpsa_register_scsi(h); /* hook ourselves into SCSI subsystem */
|
||||||
start_controller_lockup_detector(h);
|
start_controller_lockup_detector(h);
|
||||||
return 1;
|
return 0;
|
||||||
|
|
||||||
clean4:
|
clean4:
|
||||||
hpsa_free_sg_chain_blocks(h);
|
hpsa_free_sg_chain_blocks(h);
|
||||||
|
@ -6267,7 +6267,8 @@ static struct scsi_host_template driver_template = {
|
|||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
.shost_attrs = ipr_ioa_attrs,
|
.shost_attrs = ipr_ioa_attrs,
|
||||||
.sdev_attrs = ipr_dev_attrs,
|
.sdev_attrs = ipr_dev_attrs,
|
||||||
.proc_name = IPR_NAME
|
.proc_name = IPR_NAME,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -374,6 +374,7 @@ static struct scsi_host_template ips_driver_template = {
|
|||||||
.sg_tablesize = IPS_MAX_SG,
|
.sg_tablesize = IPS_MAX_SG,
|
||||||
.cmd_per_lun = 3,
|
.cmd_per_lun = 3,
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
|
|||||||
qc->tf.nsect = 0;
|
qc->tf.nsect = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ata_tf_to_fis(&qc->tf, 1, 0, (u8*)&task->ata_task.fis);
|
ata_tf_to_fis(&qc->tf, qc->dev->link->pmp, 1, (u8 *)&task->ata_task.fis);
|
||||||
task->uldd_task = qc;
|
task->uldd_task = qc;
|
||||||
if (ata_is_atapi(qc->tf.protocol)) {
|
if (ata_is_atapi(qc->tf.protocol)) {
|
||||||
memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len);
|
memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len);
|
||||||
|
@ -4244,6 +4244,7 @@ static struct scsi_host_template megaraid_template = {
|
|||||||
.eh_device_reset_handler = megaraid_reset,
|
.eh_device_reset_handler = megaraid_reset,
|
||||||
.eh_bus_reset_handler = megaraid_reset,
|
.eh_bus_reset_handler = megaraid_reset,
|
||||||
.eh_host_reset_handler = megaraid_reset,
|
.eh_host_reset_handler = megaraid_reset,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -367,6 +367,7 @@ static struct scsi_host_template megaraid_template_g = {
|
|||||||
.eh_host_reset_handler = megaraid_reset_handler,
|
.eh_host_reset_handler = megaraid_reset_handler,
|
||||||
.change_queue_depth = megaraid_change_queue_depth,
|
.change_queue_depth = megaraid_change_queue_depth,
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
|
.no_write_same = 1,
|
||||||
.sdev_attrs = megaraid_sdev_attrs,
|
.sdev_attrs = megaraid_sdev_attrs,
|
||||||
.shost_attrs = megaraid_shost_attrs,
|
.shost_attrs = megaraid_shost_attrs,
|
||||||
};
|
};
|
||||||
|
@ -2099,6 +2099,7 @@ static struct scsi_host_template megasas_template = {
|
|||||||
.bios_param = megasas_bios_param,
|
.bios_param = megasas_bios_param,
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
.change_queue_depth = megasas_change_queue_depth,
|
.change_queue_depth = megasas_change_queue_depth,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4314,6 +4314,7 @@ static struct scsi_host_template pmcraid_host_template = {
|
|||||||
.this_id = -1,
|
.this_id = -1,
|
||||||
.sg_tablesize = PMCRAID_MAX_IOADLS,
|
.sg_tablesize = PMCRAID_MAX_IOADLS,
|
||||||
.max_sectors = PMCRAID_IOA_MAX_SECTORS,
|
.max_sectors = PMCRAID_IOA_MAX_SECTORS,
|
||||||
|
.no_write_same = 1,
|
||||||
.cmd_per_lun = PMCRAID_MAX_CMD_PER_LUN,
|
.cmd_per_lun = PMCRAID_MAX_CMD_PER_LUN,
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
.shost_attrs = pmcraid_host_attrs,
|
.shost_attrs = pmcraid_host_attrs,
|
||||||
|
@ -2632,6 +2632,12 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
|
|||||||
{
|
{
|
||||||
struct scsi_device *sdev = sdkp->device;
|
struct scsi_device *sdev = sdkp->device;
|
||||||
|
|
||||||
|
if (sdev->host->no_write_same) {
|
||||||
|
sdev->no_write_same = 1;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, INQUIRY) < 0) {
|
if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, INQUIRY) < 0) {
|
||||||
sdev->no_report_opcodes = 1;
|
sdev->no_report_opcodes = 1;
|
||||||
|
|
||||||
|
@ -1454,6 +1454,7 @@ static struct scsi_host_template scsi_driver = {
|
|||||||
.use_clustering = DISABLE_CLUSTERING,
|
.use_clustering = DISABLE_CLUSTERING,
|
||||||
/* Make sure we dont get a sg segment crosses a page boundary */
|
/* Make sure we dont get a sg segment crosses a page boundary */
|
||||||
.dma_boundary = PAGE_SIZE-1,
|
.dma_boundary = PAGE_SIZE-1,
|
||||||
|
.no_write_same = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -2131,6 +2131,20 @@ static void ftdi_set_termios(struct tty_struct *tty,
|
|||||||
termios->c_cflag |= CRTSCTS;
|
termios->c_cflag |= CRTSCTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* All FTDI UART chips are limited to CS7/8. We won't pretend to
|
||||||
|
* support CS5/6 and revert the CSIZE setting instead.
|
||||||
|
*/
|
||||||
|
if ((C_CSIZE(tty) != CS8) && (C_CSIZE(tty) != CS7)) {
|
||||||
|
dev_warn(ddev, "requested CSIZE setting not supported\n");
|
||||||
|
|
||||||
|
termios->c_cflag &= ~CSIZE;
|
||||||
|
if (old_termios)
|
||||||
|
termios->c_cflag |= old_termios->c_cflag & CSIZE;
|
||||||
|
else
|
||||||
|
termios->c_cflag |= CS8;
|
||||||
|
}
|
||||||
|
|
||||||
cflag = termios->c_cflag;
|
cflag = termios->c_cflag;
|
||||||
|
|
||||||
if (!old_termios)
|
if (!old_termios)
|
||||||
@ -2167,19 +2181,16 @@ no_skip:
|
|||||||
} else {
|
} else {
|
||||||
urb_value |= FTDI_SIO_SET_DATA_PARITY_NONE;
|
urb_value |= FTDI_SIO_SET_DATA_PARITY_NONE;
|
||||||
}
|
}
|
||||||
if (cflag & CSIZE) {
|
|
||||||
switch (cflag & CSIZE) {
|
switch (cflag & CSIZE) {
|
||||||
case CS7:
|
case CS7:
|
||||||
urb_value |= 7;
|
urb_value |= 7;
|
||||||
dev_dbg(ddev, "Setting CS7\n");
|
dev_dbg(ddev, "Setting CS7\n");
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
case CS8:
|
case CS8:
|
||||||
urb_value |= 8;
|
urb_value |= 8;
|
||||||
dev_dbg(ddev, "Setting CS8\n");
|
dev_dbg(ddev, "Setting CS8\n");
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
dev_err(ddev, "CSIZE was set but not CS7-CS8\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is needed by the break command since it uses the same command
|
/* This is needed by the break command since it uses the same command
|
||||||
|
@ -1875,7 +1875,6 @@ static void mos7840_change_port_settings(struct tty_struct *tty,
|
|||||||
iflag = tty->termios.c_iflag;
|
iflag = tty->termios.c_iflag;
|
||||||
|
|
||||||
/* Change the number of bits */
|
/* Change the number of bits */
|
||||||
if (cflag & CSIZE) {
|
|
||||||
switch (cflag & CSIZE) {
|
switch (cflag & CSIZE) {
|
||||||
case CS5:
|
case CS5:
|
||||||
lData = LCR_BITS_5;
|
lData = LCR_BITS_5;
|
||||||
@ -1888,12 +1887,13 @@ static void mos7840_change_port_settings(struct tty_struct *tty,
|
|||||||
case CS7:
|
case CS7:
|
||||||
lData = LCR_BITS_7;
|
lData = LCR_BITS_7;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
case CS8:
|
case CS8:
|
||||||
lData = LCR_BITS_8;
|
lData = LCR_BITS_8;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
/* Change the Parity bit */
|
/* Change the Parity bit */
|
||||||
if (cflag & PARENB) {
|
if (cflag & PARENB) {
|
||||||
if (cflag & PARODD) {
|
if (cflag & PARODD) {
|
||||||
|
@ -304,7 +304,6 @@ static void pl2303_set_termios(struct tty_struct *tty,
|
|||||||
dev_dbg(&port->dev, "0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x\n", i,
|
dev_dbg(&port->dev, "0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x\n", i,
|
||||||
buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
|
buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
|
||||||
|
|
||||||
if (cflag & CSIZE) {
|
|
||||||
switch (cflag & CSIZE) {
|
switch (cflag & CSIZE) {
|
||||||
case CS5:
|
case CS5:
|
||||||
buf[6] = 5;
|
buf[6] = 5;
|
||||||
@ -321,7 +320,6 @@ static void pl2303_set_termios(struct tty_struct *tty,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
|
dev_dbg(&port->dev, "data bits = %d\n", buf[6]);
|
||||||
}
|
|
||||||
|
|
||||||
/* For reference buf[0]:buf[3] baud rate value */
|
/* For reference buf[0]:buf[3] baud rate value */
|
||||||
/* NOTE: Only the values defined in baud_sup are supported !
|
/* NOTE: Only the values defined in baud_sup are supported !
|
||||||
|
@ -346,7 +346,6 @@ static void spcp8x5_set_termios(struct tty_struct *tty,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Set Data Length : 00:5bit, 01:6bit, 10:7bit, 11:8bit */
|
/* Set Data Length : 00:5bit, 01:6bit, 10:7bit, 11:8bit */
|
||||||
if (cflag & CSIZE) {
|
|
||||||
switch (cflag & CSIZE) {
|
switch (cflag & CSIZE) {
|
||||||
case CS5:
|
case CS5:
|
||||||
buf[1] |= SET_UART_FORMAT_SIZE_5;
|
buf[1] |= SET_UART_FORMAT_SIZE_5;
|
||||||
@ -362,7 +361,6 @@ static void spcp8x5_set_termios(struct tty_struct *tty,
|
|||||||
buf[1] |= SET_UART_FORMAT_SIZE_8;
|
buf[1] |= SET_UART_FORMAT_SIZE_8;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Set Stop bit2 : 0:1bit 1:2bit */
|
/* Set Stop bit2 : 0:1bit 1:2bit */
|
||||||
buf[1] |= (cflag & CSTOPB) ? SET_UART_FORMAT_STOP_2 :
|
buf[1] |= (cflag & CSTOPB) ? SET_UART_FORMAT_STOP_2 :
|
||||||
|
@ -920,9 +920,10 @@ int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
|
|||||||
ret = m2p_add_override(mfn, pages[i], kmap_ops ?
|
ret = m2p_add_override(mfn, pages[i], kmap_ops ?
|
||||||
&kmap_ops[i] : NULL);
|
&kmap_ops[i] : NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
if (lazy)
|
if (lazy)
|
||||||
arch_leave_lazy_mmu_mode();
|
arch_leave_lazy_mmu_mode();
|
||||||
|
|
||||||
@ -953,9 +954,10 @@ int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
|
|||||||
ret = m2p_remove_override(pages[i], kmap_ops ?
|
ret = m2p_remove_override(pages[i], kmap_ops ?
|
||||||
&kmap_ops[i] : NULL);
|
&kmap_ops[i] : NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
if (lazy)
|
if (lazy)
|
||||||
arch_leave_lazy_mmu_mode();
|
arch_leave_lazy_mmu_mode();
|
||||||
|
|
||||||
|
@ -4401,11 +4401,17 @@ static void nfs4_delegreturn_done(struct rpc_task *task, void *calldata)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
switch (task->tk_status) {
|
switch (task->tk_status) {
|
||||||
case -NFS4ERR_STALE_STATEID:
|
|
||||||
case -NFS4ERR_EXPIRED:
|
|
||||||
case 0:
|
case 0:
|
||||||
renew_lease(data->res.server, data->timestamp);
|
renew_lease(data->res.server, data->timestamp);
|
||||||
break;
|
break;
|
||||||
|
case -NFS4ERR_ADMIN_REVOKED:
|
||||||
|
case -NFS4ERR_DELEG_REVOKED:
|
||||||
|
case -NFS4ERR_BAD_STATEID:
|
||||||
|
case -NFS4ERR_OLD_STATEID:
|
||||||
|
case -NFS4ERR_STALE_STATEID:
|
||||||
|
case -NFS4ERR_EXPIRED:
|
||||||
|
task->tk_status = 0;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (nfs4_async_handle_error(task, data->res.server, NULL) ==
|
if (nfs4_async_handle_error(task, data->res.server, NULL) ==
|
||||||
-EAGAIN) {
|
-EAGAIN) {
|
||||||
|
@ -36,6 +36,7 @@ static inline void scatterwalk_sg_chain(struct scatterlist *sg1, int num,
|
|||||||
{
|
{
|
||||||
sg_set_page(&sg1[num - 1], (void *)sg2, 0, 0);
|
sg_set_page(&sg1[num - 1], (void *)sg2, 0, 0);
|
||||||
sg1[num - 1].page_link &= ~0x02;
|
sg1[num - 1].page_link &= ~0x02;
|
||||||
|
sg1[num - 1].page_link |= 0x01;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct scatterlist *scatterwalk_sg_next(struct scatterlist *sg)
|
static inline struct scatterlist *scatterwalk_sg_next(struct scatterlist *sg)
|
||||||
@ -43,7 +44,7 @@ static inline struct scatterlist *scatterwalk_sg_next(struct scatterlist *sg)
|
|||||||
if (sg_is_last(sg))
|
if (sg_is_last(sg))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return (++sg)->length ? sg : (void *)sg_page(sg);
|
return (++sg)->length ? sg : sg_chain_ptr(sg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void scatterwalk_crypto_chain(struct scatterlist *head,
|
static inline void scatterwalk_crypto_chain(struct scatterlist *head,
|
||||||
|
@ -66,8 +66,8 @@ struct gen_pool_chunk {
|
|||||||
struct list_head next_chunk; /* next chunk in pool */
|
struct list_head next_chunk; /* next chunk in pool */
|
||||||
atomic_t avail;
|
atomic_t avail;
|
||||||
phys_addr_t phys_addr; /* physical starting address of memory chunk */
|
phys_addr_t phys_addr; /* physical starting address of memory chunk */
|
||||||
unsigned long start_addr; /* starting address of memory chunk */
|
unsigned long start_addr; /* start address of memory chunk */
|
||||||
unsigned long end_addr; /* ending address of memory chunk */
|
unsigned long end_addr; /* end address of memory chunk (inclusive) */
|
||||||
unsigned long bits[0]; /* bitmap for allocating memory chunk */
|
unsigned long bits[0]; /* bitmap for allocating memory chunk */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -475,6 +475,9 @@ struct scsi_host_template {
|
|||||||
*/
|
*/
|
||||||
unsigned ordered_tag:1;
|
unsigned ordered_tag:1;
|
||||||
|
|
||||||
|
/* True if the controller does not support WRITE SAME */
|
||||||
|
unsigned no_write_same:1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Countdown for host blocking with no commands outstanding.
|
* Countdown for host blocking with no commands outstanding.
|
||||||
*/
|
*/
|
||||||
@ -674,6 +677,9 @@ struct Scsi_Host {
|
|||||||
/* Don't resume host in EH */
|
/* Don't resume host in EH */
|
||||||
unsigned eh_noresume:1;
|
unsigned eh_noresume:1;
|
||||||
|
|
||||||
|
/* The controller does not support WRITE SAME */
|
||||||
|
unsigned no_write_same:1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Optional work queue to be utilized by the transport
|
* Optional work queue to be utilized by the transport
|
||||||
*/
|
*/
|
||||||
|
@ -50,7 +50,7 @@ static void resume_irqs(bool want_early)
|
|||||||
bool is_early = desc->action &&
|
bool is_early = desc->action &&
|
||||||
desc->action->flags & IRQF_EARLY_RESUME;
|
desc->action->flags & IRQF_EARLY_RESUME;
|
||||||
|
|
||||||
if (is_early != want_early)
|
if (!is_early && want_early)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
raw_spin_lock_irqsave(&desc->lock, flags);
|
raw_spin_lock_irqsave(&desc->lock, flags);
|
||||||
|
@ -1457,7 +1457,7 @@ static inline void old_vsyscall_fixup(struct timekeeper *tk)
|
|||||||
tk->xtime_nsec -= remainder;
|
tk->xtime_nsec -= remainder;
|
||||||
tk->xtime_nsec += 1ULL << tk->shift;
|
tk->xtime_nsec += 1ULL << tk->shift;
|
||||||
tk->ntp_error += remainder << tk->ntp_error_shift;
|
tk->ntp_error += remainder << tk->ntp_error_shift;
|
||||||
|
tk->ntp_error -= (1ULL << tk->shift) << tk->ntp_error_shift;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define old_vsyscall_fixup(tk)
|
#define old_vsyscall_fixup(tk)
|
||||||
|
@ -37,6 +37,11 @@
|
|||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
|
|
||||||
|
static inline size_t chunk_size(const struct gen_pool_chunk *chunk)
|
||||||
|
{
|
||||||
|
return chunk->end_addr - chunk->start_addr + 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int set_bits_ll(unsigned long *addr, unsigned long mask_to_set)
|
static int set_bits_ll(unsigned long *addr, unsigned long mask_to_set)
|
||||||
{
|
{
|
||||||
unsigned long val, nval;
|
unsigned long val, nval;
|
||||||
@ -188,7 +193,7 @@ int gen_pool_add_virt(struct gen_pool *pool, unsigned long virt, phys_addr_t phy
|
|||||||
|
|
||||||
chunk->phys_addr = phys;
|
chunk->phys_addr = phys;
|
||||||
chunk->start_addr = virt;
|
chunk->start_addr = virt;
|
||||||
chunk->end_addr = virt + size;
|
chunk->end_addr = virt + size - 1;
|
||||||
atomic_set(&chunk->avail, size);
|
atomic_set(&chunk->avail, size);
|
||||||
|
|
||||||
spin_lock(&pool->lock);
|
spin_lock(&pool->lock);
|
||||||
@ -213,7 +218,7 @@ phys_addr_t gen_pool_virt_to_phys(struct gen_pool *pool, unsigned long addr)
|
|||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) {
|
list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) {
|
||||||
if (addr >= chunk->start_addr && addr < chunk->end_addr) {
|
if (addr >= chunk->start_addr && addr <= chunk->end_addr) {
|
||||||
paddr = chunk->phys_addr + (addr - chunk->start_addr);
|
paddr = chunk->phys_addr + (addr - chunk->start_addr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -242,7 +247,7 @@ void gen_pool_destroy(struct gen_pool *pool)
|
|||||||
chunk = list_entry(_chunk, struct gen_pool_chunk, next_chunk);
|
chunk = list_entry(_chunk, struct gen_pool_chunk, next_chunk);
|
||||||
list_del(&chunk->next_chunk);
|
list_del(&chunk->next_chunk);
|
||||||
|
|
||||||
end_bit = (chunk->end_addr - chunk->start_addr) >> order;
|
end_bit = chunk_size(chunk) >> order;
|
||||||
bit = find_next_bit(chunk->bits, end_bit, 0);
|
bit = find_next_bit(chunk->bits, end_bit, 0);
|
||||||
BUG_ON(bit < end_bit);
|
BUG_ON(bit < end_bit);
|
||||||
|
|
||||||
@ -283,7 +288,7 @@ unsigned long gen_pool_alloc(struct gen_pool *pool, size_t size)
|
|||||||
if (size > atomic_read(&chunk->avail))
|
if (size > atomic_read(&chunk->avail))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
end_bit = (chunk->end_addr - chunk->start_addr) >> order;
|
end_bit = chunk_size(chunk) >> order;
|
||||||
retry:
|
retry:
|
||||||
start_bit = pool->algo(chunk->bits, end_bit, start_bit, nbits,
|
start_bit = pool->algo(chunk->bits, end_bit, start_bit, nbits,
|
||||||
pool->data);
|
pool->data);
|
||||||
@ -330,8 +335,8 @@ void gen_pool_free(struct gen_pool *pool, unsigned long addr, size_t size)
|
|||||||
nbits = (size + (1UL << order) - 1) >> order;
|
nbits = (size + (1UL << order) - 1) >> order;
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) {
|
list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk) {
|
||||||
if (addr >= chunk->start_addr && addr < chunk->end_addr) {
|
if (addr >= chunk->start_addr && addr <= chunk->end_addr) {
|
||||||
BUG_ON(addr + size > chunk->end_addr);
|
BUG_ON(addr + size - 1 > chunk->end_addr);
|
||||||
start_bit = (addr - chunk->start_addr) >> order;
|
start_bit = (addr - chunk->start_addr) >> order;
|
||||||
remain = bitmap_clear_ll(chunk->bits, start_bit, nbits);
|
remain = bitmap_clear_ll(chunk->bits, start_bit, nbits);
|
||||||
BUG_ON(remain);
|
BUG_ON(remain);
|
||||||
@ -400,7 +405,7 @@ size_t gen_pool_size(struct gen_pool *pool)
|
|||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk)
|
list_for_each_entry_rcu(chunk, &pool->chunks, next_chunk)
|
||||||
size += chunk->end_addr - chunk->start_addr;
|
size += chunk_size(chunk);
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
@ -1071,6 +1071,9 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset,
|
|||||||
struct udp_sock *up = udp_sk(sk);
|
struct udp_sock *up = udp_sk(sk);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (flags & MSG_SENDPAGE_NOTLAST)
|
||||||
|
flags |= MSG_MORE;
|
||||||
|
|
||||||
if (flags & MSG_SENDPAGE_NOTLAST)
|
if (flags & MSG_SENDPAGE_NOTLAST)
|
||||||
flags |= MSG_MORE;
|
flags |= MSG_MORE;
|
||||||
|
|
||||||
|
@ -1772,6 +1772,7 @@ enum {
|
|||||||
ALC889_FIXUP_DAC_ROUTE,
|
ALC889_FIXUP_DAC_ROUTE,
|
||||||
ALC889_FIXUP_MBP_VREF,
|
ALC889_FIXUP_MBP_VREF,
|
||||||
ALC889_FIXUP_IMAC91_VREF,
|
ALC889_FIXUP_IMAC91_VREF,
|
||||||
|
ALC889_FIXUP_MBA21_VREF,
|
||||||
ALC882_FIXUP_INV_DMIC,
|
ALC882_FIXUP_INV_DMIC,
|
||||||
ALC882_FIXUP_NO_PRIMARY_HP,
|
ALC882_FIXUP_NO_PRIMARY_HP,
|
||||||
ALC887_FIXUP_ASUS_BASS,
|
ALC887_FIXUP_ASUS_BASS,
|
||||||
@ -1875,17 +1876,13 @@ static void alc889_fixup_mbp_vref(struct hda_codec *codec,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set VREF on speaker pins on imac91 */
|
static void alc889_fixup_mac_pins(struct hda_codec *codec,
|
||||||
static void alc889_fixup_imac91_vref(struct hda_codec *codec,
|
const hda_nid_t *nids, int num_nids)
|
||||||
const struct hda_fixup *fix, int action)
|
|
||||||
{
|
{
|
||||||
struct alc_spec *spec = codec->spec;
|
struct alc_spec *spec = codec->spec;
|
||||||
static hda_nid_t nids[2] = { 0x18, 0x1a };
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (action != HDA_FIXUP_ACT_INIT)
|
for (i = 0; i < num_nids; i++) {
|
||||||
return;
|
|
||||||
for (i = 0; i < ARRAY_SIZE(nids); i++) {
|
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
val = snd_hda_codec_get_pin_target(codec, nids[i]);
|
val = snd_hda_codec_get_pin_target(codec, nids[i]);
|
||||||
val |= AC_PINCTL_VREF_50;
|
val |= AC_PINCTL_VREF_50;
|
||||||
@ -1894,6 +1891,26 @@ static void alc889_fixup_imac91_vref(struct hda_codec *codec,
|
|||||||
spec->gen.keep_vref_in_automute = 1;
|
spec->gen.keep_vref_in_automute = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set VREF on speaker pins on imac91 */
|
||||||
|
static void alc889_fixup_imac91_vref(struct hda_codec *codec,
|
||||||
|
const struct hda_fixup *fix, int action)
|
||||||
|
{
|
||||||
|
static hda_nid_t nids[2] = { 0x18, 0x1a };
|
||||||
|
|
||||||
|
if (action == HDA_FIXUP_ACT_INIT)
|
||||||
|
alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set VREF on speaker pins on mba21 */
|
||||||
|
static void alc889_fixup_mba21_vref(struct hda_codec *codec,
|
||||||
|
const struct hda_fixup *fix, int action)
|
||||||
|
{
|
||||||
|
static hda_nid_t nids[2] = { 0x18, 0x19 };
|
||||||
|
|
||||||
|
if (action == HDA_FIXUP_ACT_INIT)
|
||||||
|
alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
|
||||||
|
}
|
||||||
|
|
||||||
/* Don't take HP output as primary
|
/* Don't take HP output as primary
|
||||||
* Strangely, the speaker output doesn't work on Vaio Z and some Vaio
|
* Strangely, the speaker output doesn't work on Vaio Z and some Vaio
|
||||||
* all-in-one desktop PCs (for example VGC-LN51JGB) through DAC 0x05
|
* all-in-one desktop PCs (for example VGC-LN51JGB) through DAC 0x05
|
||||||
@ -2088,6 +2105,12 @@ static const struct hda_fixup alc882_fixups[] = {
|
|||||||
.chained = true,
|
.chained = true,
|
||||||
.chain_id = ALC882_FIXUP_GPIO1,
|
.chain_id = ALC882_FIXUP_GPIO1,
|
||||||
},
|
},
|
||||||
|
[ALC889_FIXUP_MBA21_VREF] = {
|
||||||
|
.type = HDA_FIXUP_FUNC,
|
||||||
|
.v.func = alc889_fixup_mba21_vref,
|
||||||
|
.chained = true,
|
||||||
|
.chain_id = ALC889_FIXUP_MBP_VREF,
|
||||||
|
},
|
||||||
[ALC882_FIXUP_INV_DMIC] = {
|
[ALC882_FIXUP_INV_DMIC] = {
|
||||||
.type = HDA_FIXUP_FUNC,
|
.type = HDA_FIXUP_FUNC,
|
||||||
.v.func = alc_fixup_inv_dmic_0x12,
|
.v.func = alc_fixup_inv_dmic_0x12,
|
||||||
@ -2152,7 +2175,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
|
|||||||
SND_PCI_QUIRK(0x106b, 0x3000, "iMac", ALC889_FIXUP_MBP_VREF),
|
SND_PCI_QUIRK(0x106b, 0x3000, "iMac", ALC889_FIXUP_MBP_VREF),
|
||||||
SND_PCI_QUIRK(0x106b, 0x3200, "iMac 7,1 Aluminum", ALC882_FIXUP_EAPD),
|
SND_PCI_QUIRK(0x106b, 0x3200, "iMac 7,1 Aluminum", ALC882_FIXUP_EAPD),
|
||||||
SND_PCI_QUIRK(0x106b, 0x3400, "MacBookAir 1,1", ALC889_FIXUP_MBP_VREF),
|
SND_PCI_QUIRK(0x106b, 0x3400, "MacBookAir 1,1", ALC889_FIXUP_MBP_VREF),
|
||||||
SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC889_FIXUP_MBP_VREF),
|
SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC889_FIXUP_MBA21_VREF),
|
||||||
SND_PCI_QUIRK(0x106b, 0x3600, "Macbook 3,1", ALC889_FIXUP_MBP_VREF),
|
SND_PCI_QUIRK(0x106b, 0x3600, "Macbook 3,1", ALC889_FIXUP_MBP_VREF),
|
||||||
SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF),
|
SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF),
|
||||||
SND_PCI_QUIRK(0x106b, 0x3e00, "iMac 24 Aluminum", ALC885_FIXUP_MACPRO_GPIO),
|
SND_PCI_QUIRK(0x106b, 0x3e00, "iMac 24 Aluminum", ALC885_FIXUP_MACPRO_GPIO),
|
||||||
@ -3113,6 +3136,7 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
|||||||
alc_write_coef_idx(codec, 0x18, 0x7388);
|
alc_write_coef_idx(codec, 0x18, 0x7388);
|
||||||
break;
|
break;
|
||||||
case 0x10ec0668:
|
case 0x10ec0668:
|
||||||
|
alc_write_coef_idx(codec, 0x11, 0x0001);
|
||||||
alc_write_coef_idx(codec, 0x15, 0x0d60);
|
alc_write_coef_idx(codec, 0x15, 0x0d60);
|
||||||
alc_write_coef_idx(codec, 0xc3, 0x0000);
|
alc_write_coef_idx(codec, 0xc3, 0x0000);
|
||||||
break;
|
break;
|
||||||
@ -3135,6 +3159,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
|||||||
alc_write_coef_idx(codec, 0x18, 0x7388);
|
alc_write_coef_idx(codec, 0x18, 0x7388);
|
||||||
break;
|
break;
|
||||||
case 0x10ec0668:
|
case 0x10ec0668:
|
||||||
|
alc_write_coef_idx(codec, 0x11, 0x0001);
|
||||||
alc_write_coef_idx(codec, 0x15, 0x0d50);
|
alc_write_coef_idx(codec, 0x15, 0x0d50);
|
||||||
alc_write_coef_idx(codec, 0xc3, 0x0000);
|
alc_write_coef_idx(codec, 0xc3, 0x0000);
|
||||||
break;
|
break;
|
||||||
@ -3729,6 +3754,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
|||||||
SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS),
|
SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS),
|
||||||
|
SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS),
|
||||||
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
|
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
|
||||||
SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED),
|
SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED),
|
||||||
SND_PCI_QUIRK(0x103c, 0x1973, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
SND_PCI_QUIRK(0x103c, 0x1973, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
||||||
@ -3999,6 +4025,7 @@ enum {
|
|||||||
ALC861_FIXUP_AMP_VREF_0F,
|
ALC861_FIXUP_AMP_VREF_0F,
|
||||||
ALC861_FIXUP_NO_JACK_DETECT,
|
ALC861_FIXUP_NO_JACK_DETECT,
|
||||||
ALC861_FIXUP_ASUS_A6RP,
|
ALC861_FIXUP_ASUS_A6RP,
|
||||||
|
ALC660_FIXUP_ASUS_W7J,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* On some laptops, VREF of pin 0x0f is abused for controlling the main amp */
|
/* On some laptops, VREF of pin 0x0f is abused for controlling the main amp */
|
||||||
@ -4048,10 +4075,22 @@ static const struct hda_fixup alc861_fixups[] = {
|
|||||||
.v.func = alc861_fixup_asus_amp_vref_0f,
|
.v.func = alc861_fixup_asus_amp_vref_0f,
|
||||||
.chained = true,
|
.chained = true,
|
||||||
.chain_id = ALC861_FIXUP_NO_JACK_DETECT,
|
.chain_id = ALC861_FIXUP_NO_JACK_DETECT,
|
||||||
|
},
|
||||||
|
[ALC660_FIXUP_ASUS_W7J] = {
|
||||||
|
.type = HDA_FIXUP_VERBS,
|
||||||
|
.v.verbs = (const struct hda_verb[]) {
|
||||||
|
/* ASUS W7J needs a magic pin setup on unused NID 0x10
|
||||||
|
* for enabling outputs
|
||||||
|
*/
|
||||||
|
{0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24},
|
||||||
|
{ }
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_pci_quirk alc861_fixup_tbl[] = {
|
static const struct snd_pci_quirk alc861_fixup_tbl[] = {
|
||||||
|
SND_PCI_QUIRK(0x1043, 0x1253, "ASUS W7J", ALC660_FIXUP_ASUS_W7J),
|
||||||
|
SND_PCI_QUIRK(0x1043, 0x1263, "ASUS Z35HL", ALC660_FIXUP_ASUS_W7J),
|
||||||
SND_PCI_QUIRK(0x1043, 0x1393, "ASUS A6Rp", ALC861_FIXUP_ASUS_A6RP),
|
SND_PCI_QUIRK(0x1043, 0x1393, "ASUS A6Rp", ALC861_FIXUP_ASUS_A6RP),
|
||||||
SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", ALC861_FIXUP_AMP_VREF_0F),
|
SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", ALC861_FIXUP_AMP_VREF_0F),
|
||||||
SND_PCI_QUIRK(0x1462, 0x7254, "HP DX2200", ALC861_FIXUP_NO_JACK_DETECT),
|
SND_PCI_QUIRK(0x1462, 0x7254, "HP DX2200", ALC861_FIXUP_NO_JACK_DETECT),
|
||||||
|
@ -407,10 +407,10 @@ static int wm8731_set_dai_fmt(struct snd_soc_dai *codec_dai,
|
|||||||
iface |= 0x0001;
|
iface |= 0x0001;
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAIFMT_DSP_A:
|
case SND_SOC_DAIFMT_DSP_A:
|
||||||
iface |= 0x0003;
|
iface |= 0x0013;
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAIFMT_DSP_B:
|
case SND_SOC_DAIFMT_DSP_B:
|
||||||
iface |= 0x0013;
|
iface |= 0x0003;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -1264,6 +1264,8 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec,
|
|||||||
|
|
||||||
/* disable POBCTRL, SOFT_ST and BUFDCOPEN */
|
/* disable POBCTRL, SOFT_ST and BUFDCOPEN */
|
||||||
snd_soc_write(codec, WM8990_ANTIPOP2, 0x0);
|
snd_soc_write(codec, WM8990_ANTIPOP2, 0x0);
|
||||||
|
|
||||||
|
codec->cache_sync = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user