Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
This commit is contained in:
commit
0a379e21c5
138 changed files with 785 additions and 439 deletions
|
|
@ -159,6 +159,8 @@ clock which they consume.
|
||||||
mixer 343
|
mixer 343
|
||||||
hdmi 344
|
hdmi 344
|
||||||
g2d 345
|
g2d 345
|
||||||
|
mdma0 346
|
||||||
|
smmu_mdma0 347
|
||||||
|
|
||||||
|
|
||||||
[Clock Muxes]
|
[Clock Muxes]
|
||||||
|
|
|
||||||
|
|
@ -1368,6 +1368,9 @@ T: git git://git.xilinx.com/linux-xlnx.git
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/arm/mach-zynq/
|
F: arch/arm/mach-zynq/
|
||||||
F: drivers/cpuidle/cpuidle-zynq.c
|
F: drivers/cpuidle/cpuidle-zynq.c
|
||||||
|
N: zynq
|
||||||
|
N: xilinx
|
||||||
|
F: drivers/clocksource/cadence_ttc_timer.c
|
||||||
|
|
||||||
ARM SMMU DRIVER
|
ARM SMMU DRIVER
|
||||||
M: Will Deacon <will.deacon@arm.com>
|
M: Will Deacon <will.deacon@arm.com>
|
||||||
|
|
@ -2815,8 +2818,10 @@ F: include/uapi/drm/
|
||||||
|
|
||||||
INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
|
INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
|
||||||
M: Daniel Vetter <daniel.vetter@ffwll.ch>
|
M: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||||
|
M: Jani Nikula <jani.nikula@linux.intel.com>
|
||||||
L: intel-gfx@lists.freedesktop.org
|
L: intel-gfx@lists.freedesktop.org
|
||||||
L: dri-devel@lists.freedesktop.org
|
L: dri-devel@lists.freedesktop.org
|
||||||
|
Q: http://patchwork.freedesktop.org/project/intel-gfx/
|
||||||
T: git git://people.freedesktop.org/~danvet/drm-intel
|
T: git git://people.freedesktop.org/~danvet/drm-intel
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/gpu/drm/i915/
|
F: drivers/gpu/drm/i915/
|
||||||
|
|
|
||||||
2
Makefile
2
Makefile
|
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 13
|
PATCHLEVEL = 13
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc6
|
EXTRAVERSION = -rc7
|
||||||
NAME = One Giant Leap for Frogkind
|
NAME = One Giant Leap for Frogkind
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
||||||
|
|
@ -559,7 +559,7 @@
|
||||||
compatible = "arm,pl330", "arm,primecell";
|
compatible = "arm,pl330", "arm,primecell";
|
||||||
reg = <0x10800000 0x1000>;
|
reg = <0x10800000 0x1000>;
|
||||||
interrupts = <0 33 0>;
|
interrupts = <0 33 0>;
|
||||||
clocks = <&clock 271>;
|
clocks = <&clock 346>;
|
||||||
clock-names = "apb_pclk";
|
clock-names = "apb_pclk";
|
||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
#dma-channels = <8>;
|
#dma-channels = <8>;
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@
|
||||||
# define VFP_ABI_FRAME 0
|
# define VFP_ABI_FRAME 0
|
||||||
# define BSAES_ASM_EXTENDED_KEY
|
# define BSAES_ASM_EXTENDED_KEY
|
||||||
# define XTS_CHAIN_TWEAK
|
# define XTS_CHAIN_TWEAK
|
||||||
# define __ARM_ARCH__ __LINUX_ARM_ARCH__
|
# define __ARM_ARCH__ 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __thumb__
|
#ifdef __thumb__
|
||||||
|
|
|
||||||
|
|
@ -701,7 +701,7 @@ $code.=<<___;
|
||||||
# define VFP_ABI_FRAME 0
|
# define VFP_ABI_FRAME 0
|
||||||
# define BSAES_ASM_EXTENDED_KEY
|
# define BSAES_ASM_EXTENDED_KEY
|
||||||
# define XTS_CHAIN_TWEAK
|
# define XTS_CHAIN_TWEAK
|
||||||
# define __ARM_ARCH__ __LINUX_ARM_ARCH__
|
# define __ARM_ARCH__ 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __thumb__
|
#ifdef __thumb__
|
||||||
|
|
|
||||||
|
|
@ -329,7 +329,7 @@ extern void _memset_io(volatile void __iomem *, int, size_t);
|
||||||
*/
|
*/
|
||||||
#define ioremap(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
|
#define ioremap(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
|
||||||
#define ioremap_nocache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
|
#define ioremap_nocache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
|
||||||
#define ioremap_cached(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_CACHED)
|
#define ioremap_cache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_CACHED)
|
||||||
#define ioremap_wc(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_WC)
|
#define ioremap_wc(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_WC)
|
||||||
#define iounmap __arm_iounmap
|
#define iounmap __arm_iounmap
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -347,7 +347,8 @@ static inline __deprecated void *bus_to_virt(unsigned long x)
|
||||||
#define ARCH_PFN_OFFSET PHYS_PFN_OFFSET
|
#define ARCH_PFN_OFFSET PHYS_PFN_OFFSET
|
||||||
|
|
||||||
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
|
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
|
||||||
#define virt_addr_valid(kaddr) ((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory)
|
#define virt_addr_valid(kaddr) (((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory) \
|
||||||
|
&& pfn_valid(__pa(kaddr) >> PAGE_SHIFT) )
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,6 @@ static inline bool set_phys_to_machine(unsigned long pfn, unsigned long mfn)
|
||||||
return __set_phys_to_machine(pfn, mfn);
|
return __set_phys_to_machine(pfn, mfn);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define xen_remap(cookie, size) ioremap_cached((cookie), (size));
|
#define xen_remap(cookie, size) ioremap_cache((cookie), (size));
|
||||||
|
|
||||||
#endif /* _ASM_ARM_XEN_PAGE_H */
|
#endif /* _ASM_ARM_XEN_PAGE_H */
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,13 @@
|
||||||
#include <asm/system_misc.h>
|
#include <asm/system_misc.h>
|
||||||
#include <asm/opcodes.h>
|
#include <asm/opcodes.h>
|
||||||
|
|
||||||
static const char *handler[]= { "prefetch abort", "data abort", "address exception", "interrupt" };
|
static const char *handler[]= {
|
||||||
|
"prefetch abort",
|
||||||
|
"data abort",
|
||||||
|
"address exception",
|
||||||
|
"interrupt",
|
||||||
|
"undefined instruction",
|
||||||
|
};
|
||||||
|
|
||||||
void *vectors_page;
|
void *vectors_page;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,11 +96,12 @@ static struct irqaction footbridge_timer_irq = {
|
||||||
void __init footbridge_timer_init(void)
|
void __init footbridge_timer_init(void)
|
||||||
{
|
{
|
||||||
struct clock_event_device *ce = &ckevt_dc21285;
|
struct clock_event_device *ce = &ckevt_dc21285;
|
||||||
|
unsigned rate = DIV_ROUND_CLOSEST(mem_fclk_21285, 16);
|
||||||
|
|
||||||
clocksource_register_hz(&cksrc_dc21285, (mem_fclk_21285 + 8) / 16);
|
clocksource_register_hz(&cksrc_dc21285, rate);
|
||||||
|
|
||||||
setup_irq(ce->irq, &footbridge_timer_irq);
|
setup_irq(ce->irq, &footbridge_timer_irq);
|
||||||
|
|
||||||
ce->cpumask = cpumask_of(smp_processor_id());
|
ce->cpumask = cpumask_of(smp_processor_id());
|
||||||
clockevents_config_and_register(ce, mem_fclk_21285, 0x4, 0xffffff);
|
clockevents_config_and_register(ce, rate, 0x4, 0xffffff);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -483,7 +483,7 @@ static struct platform_device lcdc0_device = {
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &lcdc0_info,
|
.platform_data = &lcdc0_info,
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -580,7 +580,7 @@ static struct platform_device hdmi_lcdc_device = {
|
||||||
.id = 1,
|
.id = 1,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &hdmi_lcdc_info,
|
.platform_data = &hdmi_lcdc_info,
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -334,7 +334,7 @@ static struct platform_device lcdc_device = {
|
||||||
.resource = lcdc_resources,
|
.resource = lcdc_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &lcdc_info,
|
.platform_data = &lcdc_info,
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -409,7 +409,7 @@ static struct platform_device lcdc_device = {
|
||||||
.resource = lcdc_resources,
|
.resource = lcdc_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &lcdc_info,
|
.platform_data = &lcdc_info,
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -499,7 +499,7 @@ static struct platform_device hdmi_lcdc_device = {
|
||||||
.id = 1,
|
.id = 1,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &hdmi_lcdc_info,
|
.platform_data = &hdmi_lcdc_info,
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -175,16 +175,16 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page)
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
if (cache_is_vipt_nonaliasing()) {
|
if (cache_is_vipt_nonaliasing()) {
|
||||||
for (i = 0; i < (1 << compound_order(page)); i++) {
|
for (i = 0; i < (1 << compound_order(page)); i++) {
|
||||||
void *addr = kmap_atomic(page);
|
void *addr = kmap_atomic(page + i);
|
||||||
__cpuc_flush_dcache_area(addr, PAGE_SIZE);
|
__cpuc_flush_dcache_area(addr, PAGE_SIZE);
|
||||||
kunmap_atomic(addr);
|
kunmap_atomic(addr);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < (1 << compound_order(page)); i++) {
|
for (i = 0; i < (1 << compound_order(page)); i++) {
|
||||||
void *addr = kmap_high_get(page);
|
void *addr = kmap_high_get(page + i);
|
||||||
if (addr) {
|
if (addr) {
|
||||||
__cpuc_flush_dcache_area(addr, PAGE_SIZE);
|
__cpuc_flush_dcache_area(addr, PAGE_SIZE);
|
||||||
kunmap_high(page);
|
kunmap_high(page + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -125,42 +125,38 @@ flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned long vma
|
||||||
void mark_rodata_ro(void);
|
void mark_rodata_ro(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_PA8X00
|
|
||||||
/* Only pa8800, pa8900 needs this */
|
|
||||||
|
|
||||||
#include <asm/kmap_types.h>
|
#include <asm/kmap_types.h>
|
||||||
|
|
||||||
#define ARCH_HAS_KMAP
|
#define ARCH_HAS_KMAP
|
||||||
|
|
||||||
void kunmap_parisc(void *addr);
|
|
||||||
|
|
||||||
static inline void *kmap(struct page *page)
|
static inline void *kmap(struct page *page)
|
||||||
{
|
{
|
||||||
might_sleep();
|
might_sleep();
|
||||||
|
flush_dcache_page(page);
|
||||||
return page_address(page);
|
return page_address(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void kunmap(struct page *page)
|
static inline void kunmap(struct page *page)
|
||||||
{
|
{
|
||||||
kunmap_parisc(page_address(page));
|
flush_kernel_dcache_page_addr(page_address(page));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void *kmap_atomic(struct page *page)
|
static inline void *kmap_atomic(struct page *page)
|
||||||
{
|
{
|
||||||
pagefault_disable();
|
pagefault_disable();
|
||||||
|
flush_dcache_page(page);
|
||||||
return page_address(page);
|
return page_address(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void __kunmap_atomic(void *addr)
|
static inline void __kunmap_atomic(void *addr)
|
||||||
{
|
{
|
||||||
kunmap_parisc(addr);
|
flush_kernel_dcache_page_addr(addr);
|
||||||
pagefault_enable();
|
pagefault_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define kmap_atomic_prot(page, prot) kmap_atomic(page)
|
#define kmap_atomic_prot(page, prot) kmap_atomic(page)
|
||||||
#define kmap_atomic_pfn(pfn) kmap_atomic(pfn_to_page(pfn))
|
#define kmap_atomic_pfn(pfn) kmap_atomic(pfn_to_page(pfn))
|
||||||
#define kmap_atomic_to_page(ptr) virt_to_page(ptr)
|
#define kmap_atomic_to_page(ptr) virt_to_page(ptr)
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _PARISC_CACHEFLUSH_H */
|
#endif /* _PARISC_CACHEFLUSH_H */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,8 @@ struct page;
|
||||||
|
|
||||||
void clear_page_asm(void *page);
|
void clear_page_asm(void *page);
|
||||||
void copy_page_asm(void *to, void *from);
|
void copy_page_asm(void *to, void *from);
|
||||||
void clear_user_page(void *vto, unsigned long vaddr, struct page *pg);
|
#define clear_user_page(vto, vaddr, page) clear_page_asm(vto)
|
||||||
void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
|
#define copy_user_page(vto, vfrom, vaddr, page) copy_page_asm(vto, vfrom)
|
||||||
struct page *pg);
|
|
||||||
|
|
||||||
/* #define CONFIG_PARISC_TMPALIAS */
|
/* #define CONFIG_PARISC_TMPALIAS */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -388,41 +388,6 @@ void flush_kernel_dcache_page_addr(void *addr)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(flush_kernel_dcache_page_addr);
|
EXPORT_SYMBOL(flush_kernel_dcache_page_addr);
|
||||||
|
|
||||||
void clear_user_page(void *vto, unsigned long vaddr, struct page *page)
|
|
||||||
{
|
|
||||||
clear_page_asm(vto);
|
|
||||||
if (!parisc_requires_coherency())
|
|
||||||
flush_kernel_dcache_page_asm(vto);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(clear_user_page);
|
|
||||||
|
|
||||||
void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
|
|
||||||
struct page *pg)
|
|
||||||
{
|
|
||||||
/* Copy using kernel mapping. No coherency is needed
|
|
||||||
(all in kmap/kunmap) on machines that don't support
|
|
||||||
non-equivalent aliasing. However, the `from' page
|
|
||||||
needs to be flushed before it can be accessed through
|
|
||||||
the kernel mapping. */
|
|
||||||
preempt_disable();
|
|
||||||
flush_dcache_page_asm(__pa(vfrom), vaddr);
|
|
||||||
preempt_enable();
|
|
||||||
copy_page_asm(vto, vfrom);
|
|
||||||
if (!parisc_requires_coherency())
|
|
||||||
flush_kernel_dcache_page_asm(vto);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(copy_user_page);
|
|
||||||
|
|
||||||
#ifdef CONFIG_PA8X00
|
|
||||||
|
|
||||||
void kunmap_parisc(void *addr)
|
|
||||||
{
|
|
||||||
if (parisc_requires_coherency())
|
|
||||||
flush_kernel_dcache_page_addr(addr);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(kunmap_parisc);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
|
void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,6 @@ config S390
|
||||||
select HAVE_SYSCALL_TRACEPOINTS
|
select HAVE_SYSCALL_TRACEPOINTS
|
||||||
select HAVE_UID16 if 32BIT
|
select HAVE_UID16 if 32BIT
|
||||||
select HAVE_VIRT_CPU_ACCOUNTING
|
select HAVE_VIRT_CPU_ACCOUNTING
|
||||||
select INIT_ALL_POSSIBLE
|
|
||||||
select KTIME_SCALAR if 32BIT
|
select KTIME_SCALAR if 32BIT
|
||||||
select MODULES_USE_ELF_RELA
|
select MODULES_USE_ELF_RELA
|
||||||
select OLD_SIGACTION
|
select OLD_SIGACTION
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ extern void smp_yield(void);
|
||||||
extern void smp_stop_cpu(void);
|
extern void smp_stop_cpu(void);
|
||||||
extern void smp_cpu_set_polarization(int cpu, int val);
|
extern void smp_cpu_set_polarization(int cpu, int val);
|
||||||
extern int smp_cpu_get_polarization(int cpu);
|
extern int smp_cpu_get_polarization(int cpu);
|
||||||
|
extern void smp_fill_possible_mask(void);
|
||||||
|
|
||||||
#else /* CONFIG_SMP */
|
#else /* CONFIG_SMP */
|
||||||
|
|
||||||
|
|
@ -50,6 +51,7 @@ static inline int smp_vcpu_scheduled(int cpu) { return 1; }
|
||||||
static inline void smp_yield_cpu(int cpu) { }
|
static inline void smp_yield_cpu(int cpu) { }
|
||||||
static inline void smp_yield(void) { }
|
static inline void smp_yield(void) { }
|
||||||
static inline void smp_stop_cpu(void) { }
|
static inline void smp_stop_cpu(void) { }
|
||||||
|
static inline void smp_fill_possible_mask(void) { }
|
||||||
|
|
||||||
#endif /* CONFIG_SMP */
|
#endif /* CONFIG_SMP */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1023,6 +1023,7 @@ void __init setup_arch(char **cmdline_p)
|
||||||
setup_vmcoreinfo();
|
setup_vmcoreinfo();
|
||||||
setup_lowcore();
|
setup_lowcore();
|
||||||
|
|
||||||
|
smp_fill_possible_mask();
|
||||||
cpu_init();
|
cpu_init();
|
||||||
s390_init_cpu_topology();
|
s390_init_cpu_topology();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -721,18 +721,14 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init setup_possible_cpus(char *s)
|
static unsigned int setup_possible_cpus __initdata;
|
||||||
{
|
|
||||||
int max, cpu;
|
|
||||||
|
|
||||||
if (kstrtoint(s, 0, &max) < 0)
|
static int __init _setup_possible_cpus(char *s)
|
||||||
return 0;
|
{
|
||||||
init_cpu_possible(cpumask_of(0));
|
get_option(&s, &setup_possible_cpus);
|
||||||
for (cpu = 1; cpu < max && cpu < nr_cpu_ids; cpu++)
|
|
||||||
set_cpu_possible(cpu, true);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
early_param("possible_cpus", setup_possible_cpus);
|
early_param("possible_cpus", _setup_possible_cpus);
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
|
|
||||||
|
|
@ -775,6 +771,17 @@ void __noreturn cpu_die(void)
|
||||||
|
|
||||||
#endif /* CONFIG_HOTPLUG_CPU */
|
#endif /* CONFIG_HOTPLUG_CPU */
|
||||||
|
|
||||||
|
void __init smp_fill_possible_mask(void)
|
||||||
|
{
|
||||||
|
unsigned int possible, cpu;
|
||||||
|
|
||||||
|
possible = setup_possible_cpus;
|
||||||
|
if (!possible)
|
||||||
|
possible = MACHINE_IS_VM ? 64 : nr_cpu_ids;
|
||||||
|
for (cpu = 0; cpu < possible && cpu < nr_cpu_ids; cpu++)
|
||||||
|
set_cpu_possible(cpu, true);
|
||||||
|
}
|
||||||
|
|
||||||
void __init smp_prepare_cpus(unsigned int max_cpus)
|
void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||||
{
|
{
|
||||||
/* request the 0x1201 emergency signal external interrupt */
|
/* request the 0x1201 emergency signal external interrupt */
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@ void zpci_event_availability(void *data)
|
||||||
if (!zdev || zdev->state == ZPCI_FN_STATE_CONFIGURED)
|
if (!zdev || zdev->state == ZPCI_FN_STATE_CONFIGURED)
|
||||||
break;
|
break;
|
||||||
zdev->state = ZPCI_FN_STATE_CONFIGURED;
|
zdev->state = ZPCI_FN_STATE_CONFIGURED;
|
||||||
|
zdev->fh = ccdf->fh;
|
||||||
ret = zpci_enable_device(zdev);
|
ret = zpci_enable_device(zdev);
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
|
|
@ -101,6 +102,7 @@ void zpci_event_availability(void *data)
|
||||||
if (pdev)
|
if (pdev)
|
||||||
pci_stop_and_remove_bus_device(pdev);
|
pci_stop_and_remove_bus_device(pdev);
|
||||||
|
|
||||||
|
zdev->fh = ccdf->fh;
|
||||||
zpci_disable_device(zdev);
|
zpci_disable_device(zdev);
|
||||||
zdev->state = ZPCI_FN_STATE_STANDBY;
|
zdev->state = ZPCI_FN_STATE_STANDBY;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,11 @@ EXPORT_SYMBOL(csum_partial_copy_generic);
|
||||||
EXPORT_SYMBOL(copy_page);
|
EXPORT_SYMBOL(copy_page);
|
||||||
EXPORT_SYMBOL(__clear_user);
|
EXPORT_SYMBOL(__clear_user);
|
||||||
EXPORT_SYMBOL(empty_zero_page);
|
EXPORT_SYMBOL(empty_zero_page);
|
||||||
|
#ifdef CONFIG_FLATMEM
|
||||||
|
/* need in pfn_valid macro */
|
||||||
|
EXPORT_SYMBOL(min_low_pfn);
|
||||||
|
EXPORT_SYMBOL(max_low_pfn);
|
||||||
|
#endif
|
||||||
|
|
||||||
#define DECLARE_EXPORT(name) \
|
#define DECLARE_EXPORT(name) \
|
||||||
extern void name(void);EXPORT_SYMBOL(name)
|
extern void name(void);EXPORT_SYMBOL(name)
|
||||||
|
|
|
||||||
|
|
@ -262,8 +262,8 @@ extern unsigned long __must_check __clear_user(void __user *, unsigned long);
|
||||||
extern __must_check long strlen_user(const char __user *str);
|
extern __must_check long strlen_user(const char __user *str);
|
||||||
extern __must_check long strnlen_user(const char __user *str, long n);
|
extern __must_check long strnlen_user(const char __user *str, long n);
|
||||||
|
|
||||||
#define __copy_to_user_inatomic ___copy_to_user
|
#define __copy_to_user_inatomic __copy_to_user
|
||||||
#define __copy_from_user_inatomic ___copy_from_user
|
#define __copy_from_user_inatomic __copy_from_user
|
||||||
|
|
||||||
struct pt_regs;
|
struct pt_regs;
|
||||||
extern unsigned long compute_effective_address(struct pt_regs *,
|
extern unsigned long compute_effective_address(struct pt_regs *,
|
||||||
|
|
|
||||||
|
|
@ -854,7 +854,7 @@ int dma_supported(struct device *dev, u64 device_mask)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
#ifdef CONFIG_PCI
|
#ifdef CONFIG_PCI
|
||||||
if (dev->bus == &pci_bus_type)
|
if (dev_is_pci(dev))
|
||||||
return pci64_dma_supported(to_pci_dev(dev), device_mask);
|
return pci64_dma_supported(to_pci_dev(dev), device_mask);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -666,10 +666,9 @@ EXPORT_SYMBOL(dma_ops);
|
||||||
*/
|
*/
|
||||||
int dma_supported(struct device *dev, u64 mask)
|
int dma_supported(struct device *dev, u64 mask)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_PCI
|
if (dev_is_pci(dev))
|
||||||
if (dev->bus == &pci_bus_type)
|
|
||||||
return 1;
|
return 1;
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(dma_supported);
|
EXPORT_SYMBOL(dma_supported);
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#include <linux/kgdb.h>
|
#include <linux/kgdb.h>
|
||||||
#include <linux/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
#include <linux/ftrace.h>
|
#include <linux/ftrace.h>
|
||||||
|
#include <linux/context_tracking.h>
|
||||||
|
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/kdebug.h>
|
#include <asm/kdebug.h>
|
||||||
|
|
|
||||||
|
|
@ -123,11 +123,12 @@ void smp_callin(void)
|
||||||
rmb();
|
rmb();
|
||||||
|
|
||||||
set_cpu_online(cpuid, true);
|
set_cpu_online(cpuid, true);
|
||||||
local_irq_enable();
|
|
||||||
|
|
||||||
/* idle thread is expected to have preempt disabled */
|
/* idle thread is expected to have preempt disabled */
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
|
|
||||||
|
local_irq_enable();
|
||||||
|
|
||||||
cpu_startup_entry(CPUHP_ONLINE);
|
cpu_startup_entry(CPUHP_ONLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1350,6 +1350,10 @@ void kvm_lapic_set_base(struct kvm_vcpu *vcpu, u64 value)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!kvm_vcpu_is_bsp(apic->vcpu))
|
||||||
|
value &= ~MSR_IA32_APICBASE_BSP;
|
||||||
|
vcpu->arch.apic_base = value;
|
||||||
|
|
||||||
/* update jump label if enable bit changes */
|
/* update jump label if enable bit changes */
|
||||||
if ((vcpu->arch.apic_base ^ value) & MSR_IA32_APICBASE_ENABLE) {
|
if ((vcpu->arch.apic_base ^ value) & MSR_IA32_APICBASE_ENABLE) {
|
||||||
if (value & MSR_IA32_APICBASE_ENABLE)
|
if (value & MSR_IA32_APICBASE_ENABLE)
|
||||||
|
|
@ -1359,10 +1363,6 @@ void kvm_lapic_set_base(struct kvm_vcpu *vcpu, u64 value)
|
||||||
recalculate_apic_map(vcpu->kvm);
|
recalculate_apic_map(vcpu->kvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!kvm_vcpu_is_bsp(apic->vcpu))
|
|
||||||
value &= ~MSR_IA32_APICBASE_BSP;
|
|
||||||
|
|
||||||
vcpu->arch.apic_base = value;
|
|
||||||
if ((old_value ^ value) & X2APIC_ENABLE) {
|
if ((old_value ^ value) & X2APIC_ENABLE) {
|
||||||
if (value & X2APIC_ENABLE) {
|
if (value & X2APIC_ENABLE) {
|
||||||
u32 id = kvm_apic_id(apic);
|
u32 id = kvm_apic_id(apic);
|
||||||
|
|
|
||||||
|
|
@ -8283,8 +8283,7 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
|
||||||
vcpu->arch.cr4_guest_owned_bits = ~vmcs_readl(CR4_GUEST_HOST_MASK);
|
vcpu->arch.cr4_guest_owned_bits = ~vmcs_readl(CR4_GUEST_HOST_MASK);
|
||||||
kvm_set_cr4(vcpu, vmcs12->host_cr4);
|
kvm_set_cr4(vcpu, vmcs12->host_cr4);
|
||||||
|
|
||||||
if (nested_cpu_has_ept(vmcs12))
|
nested_ept_uninit_mmu_context(vcpu);
|
||||||
nested_ept_uninit_mmu_context(vcpu);
|
|
||||||
|
|
||||||
kvm_set_cr3(vcpu, vmcs12->host_cr3);
|
kvm_set_cr3(vcpu, vmcs12->host_cr3);
|
||||||
kvm_mmu_reset_context(vcpu);
|
kvm_mmu_reset_context(vcpu);
|
||||||
|
|
|
||||||
|
|
@ -207,7 +207,7 @@ static int acpi_ac_probe(struct platform_device *pdev)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
result = acpi_install_notify_handler(ACPI_HANDLE(&pdev->dev),
|
result = acpi_install_notify_handler(ACPI_HANDLE(&pdev->dev),
|
||||||
ACPI_DEVICE_NOTIFY, acpi_ac_notify_handler, ac);
|
ACPI_ALL_NOTIFY, acpi_ac_notify_handler, ac);
|
||||||
if (result) {
|
if (result) {
|
||||||
power_supply_unregister(&ac->charger);
|
power_supply_unregister(&ac->charger);
|
||||||
goto end;
|
goto end;
|
||||||
|
|
@ -255,7 +255,7 @@ static int acpi_ac_remove(struct platform_device *pdev)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
acpi_remove_notify_handler(ACPI_HANDLE(&pdev->dev),
|
acpi_remove_notify_handler(ACPI_HANDLE(&pdev->dev),
|
||||||
ACPI_DEVICE_NOTIFY, acpi_ac_notify_handler);
|
ACPI_ALL_NOTIFY, acpi_ac_notify_handler);
|
||||||
|
|
||||||
ac = platform_get_drvdata(pdev);
|
ac = platform_get_drvdata(pdev);
|
||||||
if (ac->charger.dev)
|
if (ac->charger.dev)
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ MODULE_AUTHOR("Alexey Starikovskiy <astarikovskiy@suse.de>");
|
||||||
MODULE_DESCRIPTION("ACPI Battery Driver");
|
MODULE_DESCRIPTION("ACPI Battery Driver");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
|
static int battery_bix_broken_package;
|
||||||
static unsigned int cache_time = 1000;
|
static unsigned int cache_time = 1000;
|
||||||
module_param(cache_time, uint, 0644);
|
module_param(cache_time, uint, 0644);
|
||||||
MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
|
MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
|
||||||
|
|
@ -416,7 +417,12 @@ static int acpi_battery_get_info(struct acpi_battery *battery)
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating %s", name));
|
ACPI_EXCEPTION((AE_INFO, status, "Evaluating %s", name));
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
if (test_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags))
|
|
||||||
|
if (battery_bix_broken_package)
|
||||||
|
result = extract_package(battery, buffer.pointer,
|
||||||
|
extended_info_offsets + 1,
|
||||||
|
ARRAY_SIZE(extended_info_offsets) - 1);
|
||||||
|
else if (test_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags))
|
||||||
result = extract_package(battery, buffer.pointer,
|
result = extract_package(battery, buffer.pointer,
|
||||||
extended_info_offsets,
|
extended_info_offsets,
|
||||||
ARRAY_SIZE(extended_info_offsets));
|
ARRAY_SIZE(extended_info_offsets));
|
||||||
|
|
@ -754,6 +760,17 @@ static int battery_notify(struct notifier_block *nb,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct dmi_system_id bat_dmi_table[] = {
|
||||||
|
{
|
||||||
|
.ident = "NEC LZ750/LS",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "PC-LZ750LS"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
|
||||||
static int acpi_battery_add(struct acpi_device *device)
|
static int acpi_battery_add(struct acpi_device *device)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
@ -846,6 +863,9 @@ static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie)
|
||||||
{
|
{
|
||||||
if (acpi_disabled)
|
if (acpi_disabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (dmi_check_system(bat_dmi_table))
|
||||||
|
battery_bix_broken_package = 1;
|
||||||
acpi_bus_register_driver(&acpi_battery_driver);
|
acpi_bus_register_driver(&acpi_battery_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -156,6 +156,16 @@ int acpi_bus_get_private_data(acpi_handle handle, void **data)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(acpi_bus_get_private_data);
|
EXPORT_SYMBOL(acpi_bus_get_private_data);
|
||||||
|
|
||||||
|
void acpi_bus_no_hotplug(acpi_handle handle)
|
||||||
|
{
|
||||||
|
struct acpi_device *adev = NULL;
|
||||||
|
|
||||||
|
acpi_bus_get_device(handle, &adev);
|
||||||
|
if (adev)
|
||||||
|
adev->flags.no_hotplug = true;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(acpi_bus_no_hotplug);
|
||||||
|
|
||||||
static void acpi_print_osc_error(acpi_handle handle,
|
static void acpi_print_osc_error(acpi_handle handle,
|
||||||
struct acpi_osc_context *context, char *error)
|
struct acpi_osc_context *context, char *error)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -427,6 +427,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||||
.driver_data = board_ahci_yes_fbs }, /* 88se9128 */
|
.driver_data = board_ahci_yes_fbs }, /* 88se9128 */
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9125),
|
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9125),
|
||||||
.driver_data = board_ahci_yes_fbs }, /* 88se9125 */
|
.driver_data = board_ahci_yes_fbs }, /* 88se9125 */
|
||||||
|
{ PCI_DEVICE_SUB(PCI_VENDOR_ID_MARVELL_EXT, 0x9178,
|
||||||
|
PCI_VENDOR_ID_MARVELL_EXT, 0x9170),
|
||||||
|
.driver_data = board_ahci_yes_fbs }, /* 88se9170 */
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a),
|
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a),
|
||||||
.driver_data = board_ahci_yes_fbs }, /* 88se9172 */
|
.driver_data = board_ahci_yes_fbs }, /* 88se9172 */
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172),
|
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172),
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,10 @@ static struct pci_driver sis_pci_driver = {
|
||||||
.id_table = sis_pci_tbl,
|
.id_table = sis_pci_tbl,
|
||||||
.probe = sis_init_one,
|
.probe = sis_init_one,
|
||||||
.remove = ata_pci_remove_one,
|
.remove = ata_pci_remove_one,
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
.suspend = ata_pci_device_suspend,
|
||||||
|
.resume = ata_pci_device_resume,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct scsi_host_template sis_sht = {
|
static struct scsi_host_template sis_sht = {
|
||||||
|
|
|
||||||
|
|
@ -27,15 +27,18 @@ static char *tpm_device_name = "TPM";
|
||||||
static acpi_status ppi_callback(acpi_handle handle, u32 level, void *context,
|
static acpi_status ppi_callback(acpi_handle handle, u32 level, void *context,
|
||||||
void **return_value)
|
void **return_value)
|
||||||
{
|
{
|
||||||
acpi_status status;
|
acpi_status status = AE_OK;
|
||||||
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||||
status = acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
|
|
||||||
if (strstr(buffer.pointer, context) != NULL) {
|
if (ACPI_SUCCESS(acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer))) {
|
||||||
*return_value = handle;
|
if (strstr(buffer.pointer, context) != NULL) {
|
||||||
|
*return_value = handle;
|
||||||
|
status = AE_CTRL_TERMINATE;
|
||||||
|
}
|
||||||
kfree(buffer.pointer);
|
kfree(buffer.pointer);
|
||||||
return AE_CTRL_TERMINATE;
|
|
||||||
}
|
}
|
||||||
return AE_OK;
|
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ppi_assign_params(union acpi_object params[4],
|
static inline void ppi_assign_params(union acpi_object params[4],
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ static unsigned int _get_table_val(const struct clk_div_table *table,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int _get_val(struct clk_divider *divider, u8 div)
|
static unsigned int _get_val(struct clk_divider *divider, unsigned int div)
|
||||||
{
|
{
|
||||||
if (divider->flags & CLK_DIVIDER_ONE_BASED)
|
if (divider->flags & CLK_DIVIDER_ONE_BASED)
|
||||||
return div;
|
return div;
|
||||||
|
|
|
||||||
|
|
@ -26,17 +26,17 @@ static struct clk_onecell_data clk_data;
|
||||||
#define ASS_CLK_DIV 0x4
|
#define ASS_CLK_DIV 0x4
|
||||||
#define ASS_CLK_GATE 0x8
|
#define ASS_CLK_GATE 0x8
|
||||||
|
|
||||||
|
/* list of all parent clock list */
|
||||||
|
static const char *mout_audss_p[] = { "fin_pll", "fout_epll" };
|
||||||
|
static const char *mout_i2s_p[] = { "mout_audss", "cdclk0", "sclk_audio0" };
|
||||||
|
|
||||||
|
#ifdef CONFIG_PM_SLEEP
|
||||||
static unsigned long reg_save[][2] = {
|
static unsigned long reg_save[][2] = {
|
||||||
{ASS_CLK_SRC, 0},
|
{ASS_CLK_SRC, 0},
|
||||||
{ASS_CLK_DIV, 0},
|
{ASS_CLK_DIV, 0},
|
||||||
{ASS_CLK_GATE, 0},
|
{ASS_CLK_GATE, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
/* list of all parent clock list */
|
|
||||||
static const char *mout_audss_p[] = { "fin_pll", "fout_epll" };
|
|
||||||
static const char *mout_i2s_p[] = { "mout_audss", "cdclk0", "sclk_audio0" };
|
|
||||||
|
|
||||||
#ifdef CONFIG_PM_SLEEP
|
|
||||||
static int exynos_audss_clk_suspend(void)
|
static int exynos_audss_clk_suspend(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
#define SRC_TOP1 0xc214
|
#define SRC_TOP1 0xc214
|
||||||
#define SRC_CAM 0xc220
|
#define SRC_CAM 0xc220
|
||||||
#define SRC_TV 0xc224
|
#define SRC_TV 0xc224
|
||||||
#define SRC_MFC 0xcc28
|
#define SRC_MFC 0xc228
|
||||||
#define SRC_G3D 0xc22c
|
#define SRC_G3D 0xc22c
|
||||||
#define E4210_SRC_IMAGE 0xc230
|
#define E4210_SRC_IMAGE 0xc230
|
||||||
#define SRC_LCD0 0xc234
|
#define SRC_LCD0 0xc234
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
#define MPLL_LOCK 0x4000
|
#define MPLL_LOCK 0x4000
|
||||||
#define MPLL_CON0 0x4100
|
#define MPLL_CON0 0x4100
|
||||||
#define SRC_CORE1 0x4204
|
#define SRC_CORE1 0x4204
|
||||||
|
#define GATE_IP_ACP 0x8800
|
||||||
#define CPLL_LOCK 0x10020
|
#define CPLL_LOCK 0x10020
|
||||||
#define EPLL_LOCK 0x10030
|
#define EPLL_LOCK 0x10030
|
||||||
#define VPLL_LOCK 0x10040
|
#define VPLL_LOCK 0x10040
|
||||||
|
|
@ -75,7 +76,6 @@
|
||||||
#define SRC_CDREX 0x20200
|
#define SRC_CDREX 0x20200
|
||||||
#define PLL_DIV2_SEL 0x20a24
|
#define PLL_DIV2_SEL 0x20a24
|
||||||
#define GATE_IP_DISP1 0x10928
|
#define GATE_IP_DISP1 0x10928
|
||||||
#define GATE_IP_ACP 0x10000
|
|
||||||
|
|
||||||
/* list of PLLs to be registered */
|
/* list of PLLs to be registered */
|
||||||
enum exynos5250_plls {
|
enum exynos5250_plls {
|
||||||
|
|
@ -120,7 +120,8 @@ enum exynos5250_clks {
|
||||||
spi2, i2s1, i2s2, pcm1, pcm2, pwm, spdif, ac97, hsi2c0, hsi2c1, hsi2c2,
|
spi2, i2s1, i2s2, pcm1, pcm2, pwm, spdif, ac97, hsi2c0, hsi2c1, hsi2c2,
|
||||||
hsi2c3, chipid, sysreg, pmu, cmu_top, cmu_core, cmu_mem, tzpc0, tzpc1,
|
hsi2c3, chipid, sysreg, pmu, cmu_top, cmu_core, cmu_mem, tzpc0, tzpc1,
|
||||||
tzpc2, tzpc3, tzpc4, tzpc5, tzpc6, tzpc7, tzpc8, tzpc9, hdmi_cec, mct,
|
tzpc2, tzpc3, tzpc4, tzpc5, tzpc6, tzpc7, tzpc8, tzpc9, hdmi_cec, mct,
|
||||||
wdt, rtc, tmu, fimd1, mie1, dsim0, dp, mixer, hdmi, g2d,
|
wdt, rtc, tmu, fimd1, mie1, dsim0, dp, mixer, hdmi, g2d, mdma0,
|
||||||
|
smmu_mdma0,
|
||||||
|
|
||||||
/* mux clocks */
|
/* mux clocks */
|
||||||
mout_hdmi = 1024,
|
mout_hdmi = 1024,
|
||||||
|
|
@ -354,8 +355,8 @@ static struct samsung_gate_clock exynos5250_gate_clks[] __initdata = {
|
||||||
GATE(smmu_gscl2, "smmu_gscl2", "aclk266", GATE_IP_GSCL, 9, 0, 0),
|
GATE(smmu_gscl2, "smmu_gscl2", "aclk266", GATE_IP_GSCL, 9, 0, 0),
|
||||||
GATE(smmu_gscl3, "smmu_gscl3", "aclk266", GATE_IP_GSCL, 10, 0, 0),
|
GATE(smmu_gscl3, "smmu_gscl3", "aclk266", GATE_IP_GSCL, 10, 0, 0),
|
||||||
GATE(mfc, "mfc", "aclk333", GATE_IP_MFC, 0, 0, 0),
|
GATE(mfc, "mfc", "aclk333", GATE_IP_MFC, 0, 0, 0),
|
||||||
GATE(smmu_mfcl, "smmu_mfcl", "aclk333", GATE_IP_MFC, 1, 0, 0),
|
GATE(smmu_mfcl, "smmu_mfcl", "aclk333", GATE_IP_MFC, 2, 0, 0),
|
||||||
GATE(smmu_mfcr, "smmu_mfcr", "aclk333", GATE_IP_MFC, 2, 0, 0),
|
GATE(smmu_mfcr, "smmu_mfcr", "aclk333", GATE_IP_MFC, 1, 0, 0),
|
||||||
GATE(rotator, "rotator", "aclk266", GATE_IP_GEN, 1, 0, 0),
|
GATE(rotator, "rotator", "aclk266", GATE_IP_GEN, 1, 0, 0),
|
||||||
GATE(jpeg, "jpeg", "aclk166", GATE_IP_GEN, 2, 0, 0),
|
GATE(jpeg, "jpeg", "aclk166", GATE_IP_GEN, 2, 0, 0),
|
||||||
GATE(mdma1, "mdma1", "aclk266", GATE_IP_GEN, 4, 0, 0),
|
GATE(mdma1, "mdma1", "aclk266", GATE_IP_GEN, 4, 0, 0),
|
||||||
|
|
@ -406,7 +407,8 @@ static struct samsung_gate_clock exynos5250_gate_clks[] __initdata = {
|
||||||
GATE(hsi2c2, "hsi2c2", "aclk66", GATE_IP_PERIC, 30, 0, 0),
|
GATE(hsi2c2, "hsi2c2", "aclk66", GATE_IP_PERIC, 30, 0, 0),
|
||||||
GATE(hsi2c3, "hsi2c3", "aclk66", GATE_IP_PERIC, 31, 0, 0),
|
GATE(hsi2c3, "hsi2c3", "aclk66", GATE_IP_PERIC, 31, 0, 0),
|
||||||
GATE(chipid, "chipid", "aclk66", GATE_IP_PERIS, 0, 0, 0),
|
GATE(chipid, "chipid", "aclk66", GATE_IP_PERIS, 0, 0, 0),
|
||||||
GATE(sysreg, "sysreg", "aclk66", GATE_IP_PERIS, 1, 0, 0),
|
GATE(sysreg, "sysreg", "aclk66",
|
||||||
|
GATE_IP_PERIS, 1, CLK_IGNORE_UNUSED, 0),
|
||||||
GATE(pmu, "pmu", "aclk66", GATE_IP_PERIS, 2, CLK_IGNORE_UNUSED, 0),
|
GATE(pmu, "pmu", "aclk66", GATE_IP_PERIS, 2, CLK_IGNORE_UNUSED, 0),
|
||||||
GATE(tzpc0, "tzpc0", "aclk66", GATE_IP_PERIS, 6, 0, 0),
|
GATE(tzpc0, "tzpc0", "aclk66", GATE_IP_PERIS, 6, 0, 0),
|
||||||
GATE(tzpc1, "tzpc1", "aclk66", GATE_IP_PERIS, 7, 0, 0),
|
GATE(tzpc1, "tzpc1", "aclk66", GATE_IP_PERIS, 7, 0, 0),
|
||||||
|
|
@ -492,6 +494,8 @@ static struct samsung_gate_clock exynos5250_gate_clks[] __initdata = {
|
||||||
GATE(mixer, "mixer", "mout_aclk200_disp1", GATE_IP_DISP1, 5, 0, 0),
|
GATE(mixer, "mixer", "mout_aclk200_disp1", GATE_IP_DISP1, 5, 0, 0),
|
||||||
GATE(hdmi, "hdmi", "mout_aclk200_disp1", GATE_IP_DISP1, 6, 0, 0),
|
GATE(hdmi, "hdmi", "mout_aclk200_disp1", GATE_IP_DISP1, 6, 0, 0),
|
||||||
GATE(g2d, "g2d", "aclk200", GATE_IP_ACP, 3, 0, 0),
|
GATE(g2d, "g2d", "aclk200", GATE_IP_ACP, 3, 0, 0),
|
||||||
|
GATE(mdma0, "mdma0", "aclk266", GATE_IP_ACP, 1, 0, 0),
|
||||||
|
GATE(smmu_mdma0, "smmu_mdma0", "aclk266", GATE_IP_ACP, 5, 0, 0),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct samsung_pll_rate_table vpll_24mhz_tbl[] __initdata = {
|
static struct samsung_pll_rate_table vpll_24mhz_tbl[] __initdata = {
|
||||||
|
|
|
||||||
|
|
@ -839,9 +839,6 @@ static void cpufreq_init_policy(struct cpufreq_policy *policy)
|
||||||
|
|
||||||
/* set default policy */
|
/* set default policy */
|
||||||
ret = cpufreq_set_policy(policy, &new_policy);
|
ret = cpufreq_set_policy(policy, &new_policy);
|
||||||
policy->user_policy.policy = policy->policy;
|
|
||||||
policy->user_policy.governor = policy->governor;
|
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_debug("setting policy failed\n");
|
pr_debug("setting policy failed\n");
|
||||||
if (cpufreq_driver->exit)
|
if (cpufreq_driver->exit)
|
||||||
|
|
@ -1016,15 +1013,17 @@ static int __cpufreq_add_dev(struct device *dev, struct subsys_interface *sif,
|
||||||
read_unlock_irqrestore(&cpufreq_driver_lock, flags);
|
read_unlock_irqrestore(&cpufreq_driver_lock, flags);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (frozen)
|
/*
|
||||||
/* Restore the saved policy when doing light-weight init */
|
* Restore the saved policy when doing light-weight init and fall back
|
||||||
policy = cpufreq_policy_restore(cpu);
|
* to the full init if that fails.
|
||||||
else
|
*/
|
||||||
|
policy = frozen ? cpufreq_policy_restore(cpu) : NULL;
|
||||||
|
if (!policy) {
|
||||||
|
frozen = false;
|
||||||
policy = cpufreq_policy_alloc();
|
policy = cpufreq_policy_alloc();
|
||||||
|
if (!policy)
|
||||||
if (!policy)
|
goto nomem_out;
|
||||||
goto nomem_out;
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In the resume path, since we restore a saved policy, the assignment
|
* In the resume path, since we restore a saved policy, the assignment
|
||||||
|
|
@ -1069,8 +1068,10 @@ static int __cpufreq_add_dev(struct device *dev, struct subsys_interface *sif,
|
||||||
*/
|
*/
|
||||||
cpumask_and(policy->cpus, policy->cpus, cpu_online_mask);
|
cpumask_and(policy->cpus, policy->cpus, cpu_online_mask);
|
||||||
|
|
||||||
policy->user_policy.min = policy->min;
|
if (!frozen) {
|
||||||
policy->user_policy.max = policy->max;
|
policy->user_policy.min = policy->min;
|
||||||
|
policy->user_policy.max = policy->max;
|
||||||
|
}
|
||||||
|
|
||||||
blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
|
blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
|
||||||
CPUFREQ_START, policy);
|
CPUFREQ_START, policy);
|
||||||
|
|
@ -1101,6 +1102,11 @@ static int __cpufreq_add_dev(struct device *dev, struct subsys_interface *sif,
|
||||||
|
|
||||||
cpufreq_init_policy(policy);
|
cpufreq_init_policy(policy);
|
||||||
|
|
||||||
|
if (!frozen) {
|
||||||
|
policy->user_policy.policy = policy->policy;
|
||||||
|
policy->user_policy.governor = policy->governor;
|
||||||
|
}
|
||||||
|
|
||||||
kobject_uevent(&policy->kobj, KOBJ_ADD);
|
kobject_uevent(&policy->kobj, KOBJ_ADD);
|
||||||
up_read(&cpufreq_rwsem);
|
up_read(&cpufreq_rwsem);
|
||||||
|
|
||||||
|
|
@ -1118,8 +1124,11 @@ err_get_freq:
|
||||||
if (cpufreq_driver->exit)
|
if (cpufreq_driver->exit)
|
||||||
cpufreq_driver->exit(policy);
|
cpufreq_driver->exit(policy);
|
||||||
err_set_policy_cpu:
|
err_set_policy_cpu:
|
||||||
if (frozen)
|
if (frozen) {
|
||||||
|
/* Do not leave stale fallback data behind. */
|
||||||
|
per_cpu(cpufreq_cpu_data_fallback, cpu) = NULL;
|
||||||
cpufreq_policy_put_kobj(policy);
|
cpufreq_policy_put_kobj(policy);
|
||||||
|
}
|
||||||
cpufreq_policy_free(policy);
|
cpufreq_policy_free(policy);
|
||||||
|
|
||||||
nomem_out:
|
nomem_out:
|
||||||
|
|
|
||||||
|
|
@ -581,7 +581,8 @@ static void intel_pstate_timer_func(unsigned long __data)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ICPU(model, policy) \
|
#define ICPU(model, policy) \
|
||||||
{ X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)&policy }
|
{ X86_VENDOR_INTEL, 6, model, X86_FEATURE_APERFMPERF,\
|
||||||
|
(unsigned long)&policy }
|
||||||
|
|
||||||
static const struct x86_cpu_id intel_pstate_cpu_ids[] = {
|
static const struct x86_cpu_id intel_pstate_cpu_ids[] = {
|
||||||
ICPU(0x2a, core_params),
|
ICPU(0x2a, core_params),
|
||||||
|
|
@ -614,6 +615,11 @@ static int intel_pstate_init_cpu(unsigned int cpunum)
|
||||||
cpu = all_cpu_data[cpunum];
|
cpu = all_cpu_data[cpunum];
|
||||||
|
|
||||||
intel_pstate_get_cpu_pstates(cpu);
|
intel_pstate_get_cpu_pstates(cpu);
|
||||||
|
if (!cpu->pstate.current_pstate) {
|
||||||
|
all_cpu_data[cpunum] = NULL;
|
||||||
|
kfree(cpu);
|
||||||
|
return -ENODATA;
|
||||||
|
}
|
||||||
|
|
||||||
cpu->cpu = cpunum;
|
cpu->cpu = cpunum;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ static struct cpuidle_driver calxeda_idle_driver = {
|
||||||
.state_count = 2,
|
.state_count = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init calxeda_cpuidle_probe(struct platform_device *pdev)
|
static int calxeda_cpuidle_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
return cpuidle_register(&calxeda_idle_driver, NULL);
|
return cpuidle_register(&calxeda_idle_driver, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1410,14 +1410,12 @@ static const struct platform_device_info ixp_dev_info __initdata = {
|
||||||
static int __init ixp_module_init(void)
|
static int __init ixp_module_init(void)
|
||||||
{
|
{
|
||||||
int num = ARRAY_SIZE(ixp4xx_algos);
|
int num = ARRAY_SIZE(ixp4xx_algos);
|
||||||
int i, err ;
|
int i, err;
|
||||||
|
|
||||||
pdev = platform_device_register_full(&ixp_dev_info);
|
pdev = platform_device_register_full(&ixp_dev_info);
|
||||||
if (IS_ERR(pdev))
|
if (IS_ERR(pdev))
|
||||||
return PTR_ERR(pdev);
|
return PTR_ERR(pdev);
|
||||||
|
|
||||||
dev = &pdev->dev;
|
|
||||||
|
|
||||||
spin_lock_init(&desc_lock);
|
spin_lock_init(&desc_lock);
|
||||||
spin_lock_init(&emerg_lock);
|
spin_lock_init(&emerg_lock);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -817,7 +817,15 @@ int ioat_dma_self_test(struct ioatdma_device *device)
|
||||||
}
|
}
|
||||||
|
|
||||||
dma_src = dma_map_single(dev, src, IOAT_TEST_SIZE, DMA_TO_DEVICE);
|
dma_src = dma_map_single(dev, src, IOAT_TEST_SIZE, DMA_TO_DEVICE);
|
||||||
|
if (dma_mapping_error(dev, dma_src)) {
|
||||||
|
dev_err(dev, "mapping src buffer failed\n");
|
||||||
|
goto free_resources;
|
||||||
|
}
|
||||||
dma_dest = dma_map_single(dev, dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE);
|
dma_dest = dma_map_single(dev, dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE);
|
||||||
|
if (dma_mapping_error(dev, dma_dest)) {
|
||||||
|
dev_err(dev, "mapping dest buffer failed\n");
|
||||||
|
goto unmap_src;
|
||||||
|
}
|
||||||
flags = DMA_PREP_INTERRUPT;
|
flags = DMA_PREP_INTERRUPT;
|
||||||
tx = device->common.device_prep_dma_memcpy(dma_chan, dma_dest, dma_src,
|
tx = device->common.device_prep_dma_memcpy(dma_chan, dma_dest, dma_src,
|
||||||
IOAT_TEST_SIZE, flags);
|
IOAT_TEST_SIZE, flags);
|
||||||
|
|
@ -855,8 +863,9 @@ int ioat_dma_self_test(struct ioatdma_device *device)
|
||||||
}
|
}
|
||||||
|
|
||||||
unmap_dma:
|
unmap_dma:
|
||||||
dma_unmap_single(dev, dma_src, IOAT_TEST_SIZE, DMA_TO_DEVICE);
|
|
||||||
dma_unmap_single(dev, dma_dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE);
|
dma_unmap_single(dev, dma_dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE);
|
||||||
|
unmap_src:
|
||||||
|
dma_unmap_single(dev, dma_src, IOAT_TEST_SIZE, DMA_TO_DEVICE);
|
||||||
free_resources:
|
free_resources:
|
||||||
dma->device_free_chan_resources(dma_chan);
|
dma->device_free_chan_resources(dma_chan);
|
||||||
out:
|
out:
|
||||||
|
|
|
||||||
|
|
@ -906,14 +906,12 @@ static void gen8_ggtt_insert_entries(struct i915_address_space *vm,
|
||||||
WARN_ON(readq(>t_entries[i-1])
|
WARN_ON(readq(>t_entries[i-1])
|
||||||
!= gen8_pte_encode(addr, level, true));
|
!= gen8_pte_encode(addr, level, true));
|
||||||
|
|
||||||
#if 0 /* TODO: Still needed on GEN8? */
|
|
||||||
/* This next bit makes the above posting read even more important. We
|
/* This next bit makes the above posting read even more important. We
|
||||||
* want to flush the TLBs only after we're certain all the PTE updates
|
* want to flush the TLBs only after we're certain all the PTE updates
|
||||||
* have finished.
|
* have finished.
|
||||||
*/
|
*/
|
||||||
I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
|
I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
|
||||||
POSTING_READ(GFX_FLSH_CNTL_GEN6);
|
POSTING_READ(GFX_FLSH_CNTL_GEN6);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -10541,11 +10541,20 @@ static struct intel_quirk intel_quirks[] = {
|
||||||
/* Sony Vaio Y cannot use SSC on LVDS */
|
/* Sony Vaio Y cannot use SSC on LVDS */
|
||||||
{ 0x0046, 0x104d, 0x9076, quirk_ssc_force_disable },
|
{ 0x0046, 0x104d, 0x9076, quirk_ssc_force_disable },
|
||||||
|
|
||||||
/*
|
/* Acer Aspire 5734Z must invert backlight brightness */
|
||||||
* All GM45 Acer (and its brands eMachines and Packard Bell) laptops
|
{ 0x2a42, 0x1025, 0x0459, quirk_invert_brightness },
|
||||||
* seem to use inverted backlight PWM.
|
|
||||||
*/
|
/* Acer/eMachines G725 */
|
||||||
{ 0x2a42, 0x1025, PCI_ANY_ID, quirk_invert_brightness },
|
{ 0x2a42, 0x1025, 0x0210, quirk_invert_brightness },
|
||||||
|
|
||||||
|
/* Acer/eMachines e725 */
|
||||||
|
{ 0x2a42, 0x1025, 0x0212, quirk_invert_brightness },
|
||||||
|
|
||||||
|
/* Acer/Packard Bell NCL20 */
|
||||||
|
{ 0x2a42, 0x1025, 0x034b, quirk_invert_brightness },
|
||||||
|
|
||||||
|
/* Acer Aspire 4736Z */
|
||||||
|
{ 0x2a42, 0x1025, 0x0260, quirk_invert_brightness },
|
||||||
|
|
||||||
/* Dell XPS13 HD Sandy Bridge */
|
/* Dell XPS13 HD Sandy Bridge */
|
||||||
{ 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable },
|
{ 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable },
|
||||||
|
|
|
||||||
|
|
@ -104,11 +104,8 @@ nouveau_subdev_create_(struct nouveau_object *parent,
|
||||||
|
|
||||||
if (parent) {
|
if (parent) {
|
||||||
struct nouveau_device *device = nv_device(parent);
|
struct nouveau_device *device = nv_device(parent);
|
||||||
int subidx = nv_hclass(subdev) & 0xff;
|
|
||||||
|
|
||||||
subdev->debug = nouveau_dbgopt(device->dbgopt, subname);
|
subdev->debug = nouveau_dbgopt(device->dbgopt, subname);
|
||||||
subdev->mmio = nv_subdev(device)->mmio;
|
subdev->mmio = nv_subdev(device)->mmio;
|
||||||
device->subdev[subidx] = *pobject;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -268,6 +268,8 @@ nouveau_devobj_ctor(struct nouveau_object *parent,
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
device->subdev[i] = devobj->subdev[i];
|
||||||
|
|
||||||
/* note: can't init *any* subdevs until devinit has been run
|
/* note: can't init *any* subdevs until devinit has been run
|
||||||
* due to not knowing exactly what the vbios init tables will
|
* due to not knowing exactly what the vbios init tables will
|
||||||
* mess with. devinit also can't be run until all of its
|
* mess with. devinit also can't be run until all of its
|
||||||
|
|
|
||||||
|
|
@ -161,7 +161,7 @@ nvc0_identify(struct nouveau_device *device)
|
||||||
device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
|
device->oclass[NVDEV_SUBDEV_THERM ] = &nva3_therm_oclass;
|
||||||
device->oclass[NVDEV_SUBDEV_MXM ] = &nv50_mxm_oclass;
|
device->oclass[NVDEV_SUBDEV_MXM ] = &nv50_mxm_oclass;
|
||||||
device->oclass[NVDEV_SUBDEV_DEVINIT] = &nvc0_devinit_oclass;
|
device->oclass[NVDEV_SUBDEV_DEVINIT] = &nvc0_devinit_oclass;
|
||||||
device->oclass[NVDEV_SUBDEV_MC ] = nvc3_mc_oclass;
|
device->oclass[NVDEV_SUBDEV_MC ] = nvc0_mc_oclass;
|
||||||
device->oclass[NVDEV_SUBDEV_BUS ] = nvc0_bus_oclass;
|
device->oclass[NVDEV_SUBDEV_BUS ] = nvc0_bus_oclass;
|
||||||
device->oclass[NVDEV_SUBDEV_TIMER ] = &nv04_timer_oclass;
|
device->oclass[NVDEV_SUBDEV_TIMER ] = &nv04_timer_oclass;
|
||||||
device->oclass[NVDEV_SUBDEV_FB ] = nvc0_fb_oclass;
|
device->oclass[NVDEV_SUBDEV_FB ] = nvc0_fb_oclass;
|
||||||
|
|
|
||||||
|
|
@ -334,7 +334,7 @@ nvc0_graph_mthd(struct nvc0_graph_priv *priv, struct nvc0_graph_mthd *mthds)
|
||||||
while ((mthd = &mthds[i++]) && (init = mthd->init)) {
|
while ((mthd = &mthds[i++]) && (init = mthd->init)) {
|
||||||
u32 addr = 0x80000000 | mthd->oclass;
|
u32 addr = 0x80000000 | mthd->oclass;
|
||||||
for (data = 0; init->count; init++) {
|
for (data = 0; init->count; init++) {
|
||||||
if (data != init->data) {
|
if (init == mthd->init || data != init->data) {
|
||||||
nv_wr32(priv, 0x40448c, init->data);
|
nv_wr32(priv, 0x40448c, init->data);
|
||||||
data = init->data;
|
data = init->data;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,11 @@ struct nouveau_fb {
|
||||||
static inline struct nouveau_fb *
|
static inline struct nouveau_fb *
|
||||||
nouveau_fb(void *obj)
|
nouveau_fb(void *obj)
|
||||||
{
|
{
|
||||||
|
/* fbram uses this before device subdev pointer is valid */
|
||||||
|
if (nv_iclass(obj, NV_SUBDEV_CLASS) &&
|
||||||
|
nv_subidx(obj) == NVDEV_SUBDEV_FB)
|
||||||
|
return obj;
|
||||||
|
|
||||||
return (void *)nv_device(obj)->subdev[NVDEV_SUBDEV_FB];
|
return (void *)nv_device(obj)->subdev[NVDEV_SUBDEV_FB];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -365,13 +365,13 @@ static u16
|
||||||
init_script(struct nouveau_bios *bios, int index)
|
init_script(struct nouveau_bios *bios, int index)
|
||||||
{
|
{
|
||||||
struct nvbios_init init = { .bios = bios };
|
struct nvbios_init init = { .bios = bios };
|
||||||
u16 data;
|
u16 bmp_ver = bmp_version(bios), data;
|
||||||
|
|
||||||
if (bmp_version(bios) && bmp_version(bios) < 0x0510) {
|
if (bmp_ver && bmp_ver < 0x0510) {
|
||||||
if (index > 1)
|
if (index > 1 || bmp_ver < 0x0100)
|
||||||
return 0x0000;
|
return 0x0000;
|
||||||
|
|
||||||
data = bios->bmp_offset + (bios->version.major < 2 ? 14 : 18);
|
data = bios->bmp_offset + (bmp_ver < 0x0200 ? 14 : 18);
|
||||||
return nv_ro16(bios, data + (index * 2));
|
return nv_ro16(bios, data + (index * 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1294,7 +1294,11 @@ init_jump(struct nvbios_init *init)
|
||||||
u16 offset = nv_ro16(bios, init->offset + 1);
|
u16 offset = nv_ro16(bios, init->offset + 1);
|
||||||
|
|
||||||
trace("JUMP\t0x%04x\n", offset);
|
trace("JUMP\t0x%04x\n", offset);
|
||||||
init->offset = offset;
|
|
||||||
|
if (init_exec(init))
|
||||||
|
init->offset = offset;
|
||||||
|
else
|
||||||
|
init->offset += 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -447,6 +447,8 @@ nouveau_abi16_ioctl_notifierobj_alloc(ABI16_IOCTL_ARGS)
|
||||||
if (ret)
|
if (ret)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
info->offset = ntfy->node->offset;
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (ret)
|
if (ret)
|
||||||
nouveau_abi16_ntfy_fini(chan, ntfy);
|
nouveau_abi16_ntfy_fini(chan, ntfy);
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ static struct nouveau_dsm_priv {
|
||||||
bool dsm_detected;
|
bool dsm_detected;
|
||||||
bool optimus_detected;
|
bool optimus_detected;
|
||||||
acpi_handle dhandle;
|
acpi_handle dhandle;
|
||||||
|
acpi_handle other_handle;
|
||||||
acpi_handle rom_handle;
|
acpi_handle rom_handle;
|
||||||
} nouveau_dsm_priv;
|
} nouveau_dsm_priv;
|
||||||
|
|
||||||
|
|
@ -260,9 +261,10 @@ static int nouveau_dsm_pci_probe(struct pci_dev *pdev)
|
||||||
if (!dhandle)
|
if (!dhandle)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!acpi_has_method(dhandle, "_DSM"))
|
if (!acpi_has_method(dhandle, "_DSM")) {
|
||||||
|
nouveau_dsm_priv.other_handle = dhandle;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
if (nouveau_test_dsm(dhandle, nouveau_dsm, NOUVEAU_DSM_POWER))
|
if (nouveau_test_dsm(dhandle, nouveau_dsm, NOUVEAU_DSM_POWER))
|
||||||
retval |= NOUVEAU_DSM_HAS_MUX;
|
retval |= NOUVEAU_DSM_HAS_MUX;
|
||||||
|
|
||||||
|
|
@ -338,6 +340,16 @@ static bool nouveau_dsm_detect(void)
|
||||||
printk(KERN_INFO "VGA switcheroo: detected DSM switching method %s handle\n",
|
printk(KERN_INFO "VGA switcheroo: detected DSM switching method %s handle\n",
|
||||||
acpi_method_name);
|
acpi_method_name);
|
||||||
nouveau_dsm_priv.dsm_detected = true;
|
nouveau_dsm_priv.dsm_detected = true;
|
||||||
|
/*
|
||||||
|
* On some systems hotplug events are generated for the device
|
||||||
|
* being switched off when _DSM is executed. They cause ACPI
|
||||||
|
* hotplug to trigger and attempt to remove the device from
|
||||||
|
* the system, which causes it to break down. Prevent that from
|
||||||
|
* happening by setting the no_hotplug flag for the involved
|
||||||
|
* ACPI device objects.
|
||||||
|
*/
|
||||||
|
acpi_bus_no_hotplug(nouveau_dsm_priv.dhandle);
|
||||||
|
acpi_bus_no_hotplug(nouveau_dsm_priv.other_handle);
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -610,7 +610,7 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb,
|
||||||
ret = nouveau_fence_sync(fence, chan);
|
ret = nouveau_fence_sync(fence, chan);
|
||||||
nouveau_fence_unref(&fence);
|
nouveau_fence_unref(&fence);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto fail_free;
|
||||||
|
|
||||||
if (new_bo != old_bo) {
|
if (new_bo != old_bo) {
|
||||||
ret = nouveau_bo_pin(new_bo, TTM_PL_FLAG_VRAM);
|
ret = nouveau_bo_pin(new_bo, TTM_PL_FLAG_VRAM);
|
||||||
|
|
|
||||||
|
|
@ -1143,31 +1143,53 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tiling_flags & RADEON_TILING_MACRO) {
|
if (tiling_flags & RADEON_TILING_MACRO) {
|
||||||
if (rdev->family >= CHIP_BONAIRE)
|
evergreen_tiling_fields(tiling_flags, &bankw, &bankh, &mtaspect, &tile_split);
|
||||||
tmp = rdev->config.cik.tile_config;
|
|
||||||
else if (rdev->family >= CHIP_TAHITI)
|
|
||||||
tmp = rdev->config.si.tile_config;
|
|
||||||
else if (rdev->family >= CHIP_CAYMAN)
|
|
||||||
tmp = rdev->config.cayman.tile_config;
|
|
||||||
else
|
|
||||||
tmp = rdev->config.evergreen.tile_config;
|
|
||||||
|
|
||||||
switch ((tmp & 0xf0) >> 4) {
|
/* Set NUM_BANKS. */
|
||||||
case 0: /* 4 banks */
|
if (rdev->family >= CHIP_BONAIRE) {
|
||||||
fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_4_BANK);
|
unsigned tileb, index, num_banks, tile_split_bytes;
|
||||||
break;
|
|
||||||
case 1: /* 8 banks */
|
/* Calculate the macrotile mode index. */
|
||||||
default:
|
tile_split_bytes = 64 << tile_split;
|
||||||
fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_8_BANK);
|
tileb = 8 * 8 * target_fb->bits_per_pixel / 8;
|
||||||
break;
|
tileb = min(tile_split_bytes, tileb);
|
||||||
case 2: /* 16 banks */
|
|
||||||
fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_16_BANK);
|
for (index = 0; tileb > 64; index++) {
|
||||||
break;
|
tileb >>= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index >= 16) {
|
||||||
|
DRM_ERROR("Wrong screen bpp (%u) or tile split (%u)\n",
|
||||||
|
target_fb->bits_per_pixel, tile_split);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
num_banks = (rdev->config.cik.macrotile_mode_array[index] >> 6) & 0x3;
|
||||||
|
fb_format |= EVERGREEN_GRPH_NUM_BANKS(num_banks);
|
||||||
|
} else {
|
||||||
|
/* SI and older. */
|
||||||
|
if (rdev->family >= CHIP_TAHITI)
|
||||||
|
tmp = rdev->config.si.tile_config;
|
||||||
|
else if (rdev->family >= CHIP_CAYMAN)
|
||||||
|
tmp = rdev->config.cayman.tile_config;
|
||||||
|
else
|
||||||
|
tmp = rdev->config.evergreen.tile_config;
|
||||||
|
|
||||||
|
switch ((tmp & 0xf0) >> 4) {
|
||||||
|
case 0: /* 4 banks */
|
||||||
|
fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_4_BANK);
|
||||||
|
break;
|
||||||
|
case 1: /* 8 banks */
|
||||||
|
default:
|
||||||
|
fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_8_BANK);
|
||||||
|
break;
|
||||||
|
case 2: /* 16 banks */
|
||||||
|
fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_16_BANK);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fb_format |= EVERGREEN_GRPH_ARRAY_MODE(EVERGREEN_GRPH_ARRAY_2D_TILED_THIN1);
|
fb_format |= EVERGREEN_GRPH_ARRAY_MODE(EVERGREEN_GRPH_ARRAY_2D_TILED_THIN1);
|
||||||
|
|
||||||
evergreen_tiling_fields(tiling_flags, &bankw, &bankh, &mtaspect, &tile_split);
|
|
||||||
fb_format |= EVERGREEN_GRPH_TILE_SPLIT(tile_split);
|
fb_format |= EVERGREEN_GRPH_TILE_SPLIT(tile_split);
|
||||||
fb_format |= EVERGREEN_GRPH_BANK_WIDTH(bankw);
|
fb_format |= EVERGREEN_GRPH_BANK_WIDTH(bankw);
|
||||||
fb_format |= EVERGREEN_GRPH_BANK_HEIGHT(bankh);
|
fb_format |= EVERGREEN_GRPH_BANK_HEIGHT(bankh);
|
||||||
|
|
@ -1180,19 +1202,12 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
|
||||||
fb_format |= EVERGREEN_GRPH_ARRAY_MODE(EVERGREEN_GRPH_ARRAY_1D_TILED_THIN1);
|
fb_format |= EVERGREEN_GRPH_ARRAY_MODE(EVERGREEN_GRPH_ARRAY_1D_TILED_THIN1);
|
||||||
|
|
||||||
if (rdev->family >= CHIP_BONAIRE) {
|
if (rdev->family >= CHIP_BONAIRE) {
|
||||||
u32 num_pipe_configs = rdev->config.cik.max_tile_pipes;
|
/* Read the pipe config from the 2D TILED SCANOUT mode.
|
||||||
u32 num_rb = rdev->config.cik.max_backends_per_se;
|
* It should be the same for the other modes too, but not all
|
||||||
if (num_pipe_configs > 8)
|
* modes set the pipe config field. */
|
||||||
num_pipe_configs = 8;
|
u32 pipe_config = (rdev->config.cik.tile_mode_array[10] >> 6) & 0x1f;
|
||||||
if (num_pipe_configs == 8)
|
|
||||||
fb_format |= CIK_GRPH_PIPE_CONFIG(CIK_ADDR_SURF_P8_32x32_16x16);
|
fb_format |= CIK_GRPH_PIPE_CONFIG(pipe_config);
|
||||||
else if (num_pipe_configs == 4) {
|
|
||||||
if (num_rb == 4)
|
|
||||||
fb_format |= CIK_GRPH_PIPE_CONFIG(CIK_ADDR_SURF_P4_16x16);
|
|
||||||
else if (num_rb < 4)
|
|
||||||
fb_format |= CIK_GRPH_PIPE_CONFIG(CIK_ADDR_SURF_P4_8x16);
|
|
||||||
} else if (num_pipe_configs == 2)
|
|
||||||
fb_format |= CIK_GRPH_PIPE_CONFIG(CIK_ADDR_SURF_P2);
|
|
||||||
} else if ((rdev->family == CHIP_TAHITI) ||
|
} else if ((rdev->family == CHIP_TAHITI) ||
|
||||||
(rdev->family == CHIP_PITCAIRN))
|
(rdev->family == CHIP_PITCAIRN))
|
||||||
fb_format |= SI_GRPH_PIPE_CONFIG(SI_ADDR_SURF_P8_32x32_8x16);
|
fb_format |= SI_GRPH_PIPE_CONFIG(SI_ADDR_SURF_P8_32x32_8x16);
|
||||||
|
|
|
||||||
|
|
@ -3057,7 +3057,7 @@ static u32 cik_create_bitmask(u32 bit_width)
|
||||||
* Returns the disabled RB bitmask.
|
* Returns the disabled RB bitmask.
|
||||||
*/
|
*/
|
||||||
static u32 cik_get_rb_disabled(struct radeon_device *rdev,
|
static u32 cik_get_rb_disabled(struct radeon_device *rdev,
|
||||||
u32 max_rb_num, u32 se_num,
|
u32 max_rb_num_per_se,
|
||||||
u32 sh_per_se)
|
u32 sh_per_se)
|
||||||
{
|
{
|
||||||
u32 data, mask;
|
u32 data, mask;
|
||||||
|
|
@ -3071,7 +3071,7 @@ static u32 cik_get_rb_disabled(struct radeon_device *rdev,
|
||||||
|
|
||||||
data >>= BACKEND_DISABLE_SHIFT;
|
data >>= BACKEND_DISABLE_SHIFT;
|
||||||
|
|
||||||
mask = cik_create_bitmask(max_rb_num / se_num / sh_per_se);
|
mask = cik_create_bitmask(max_rb_num_per_se / sh_per_se);
|
||||||
|
|
||||||
return data & mask;
|
return data & mask;
|
||||||
}
|
}
|
||||||
|
|
@ -3088,7 +3088,7 @@ static u32 cik_get_rb_disabled(struct radeon_device *rdev,
|
||||||
*/
|
*/
|
||||||
static void cik_setup_rb(struct radeon_device *rdev,
|
static void cik_setup_rb(struct radeon_device *rdev,
|
||||||
u32 se_num, u32 sh_per_se,
|
u32 se_num, u32 sh_per_se,
|
||||||
u32 max_rb_num)
|
u32 max_rb_num_per_se)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
u32 data, mask;
|
u32 data, mask;
|
||||||
|
|
@ -3098,7 +3098,7 @@ static void cik_setup_rb(struct radeon_device *rdev,
|
||||||
for (i = 0; i < se_num; i++) {
|
for (i = 0; i < se_num; i++) {
|
||||||
for (j = 0; j < sh_per_se; j++) {
|
for (j = 0; j < sh_per_se; j++) {
|
||||||
cik_select_se_sh(rdev, i, j);
|
cik_select_se_sh(rdev, i, j);
|
||||||
data = cik_get_rb_disabled(rdev, max_rb_num, se_num, sh_per_se);
|
data = cik_get_rb_disabled(rdev, max_rb_num_per_se, sh_per_se);
|
||||||
if (rdev->family == CHIP_HAWAII)
|
if (rdev->family == CHIP_HAWAII)
|
||||||
disabled_rbs |= data << ((i * sh_per_se + j) * HAWAII_RB_BITMAP_WIDTH_PER_SH);
|
disabled_rbs |= data << ((i * sh_per_se + j) * HAWAII_RB_BITMAP_WIDTH_PER_SH);
|
||||||
else
|
else
|
||||||
|
|
@ -3108,12 +3108,14 @@ static void cik_setup_rb(struct radeon_device *rdev,
|
||||||
cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
|
cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
|
||||||
|
|
||||||
mask = 1;
|
mask = 1;
|
||||||
for (i = 0; i < max_rb_num; i++) {
|
for (i = 0; i < max_rb_num_per_se * se_num; i++) {
|
||||||
if (!(disabled_rbs & mask))
|
if (!(disabled_rbs & mask))
|
||||||
enabled_rbs |= mask;
|
enabled_rbs |= mask;
|
||||||
mask <<= 1;
|
mask <<= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rdev->config.cik.backend_enable_mask = enabled_rbs;
|
||||||
|
|
||||||
for (i = 0; i < se_num; i++) {
|
for (i = 0; i < se_num; i++) {
|
||||||
cik_select_se_sh(rdev, i, 0xffffffff);
|
cik_select_se_sh(rdev, i, 0xffffffff);
|
||||||
data = 0;
|
data = 0;
|
||||||
|
|
|
||||||
|
|
@ -1940,7 +1940,7 @@ struct si_asic {
|
||||||
unsigned sc_earlyz_tile_fifo_size;
|
unsigned sc_earlyz_tile_fifo_size;
|
||||||
|
|
||||||
unsigned num_tile_pipes;
|
unsigned num_tile_pipes;
|
||||||
unsigned num_backends_per_se;
|
unsigned backend_enable_mask;
|
||||||
unsigned backend_disable_mask_per_asic;
|
unsigned backend_disable_mask_per_asic;
|
||||||
unsigned backend_map;
|
unsigned backend_map;
|
||||||
unsigned num_texture_channel_caches;
|
unsigned num_texture_channel_caches;
|
||||||
|
|
@ -1970,7 +1970,7 @@ struct cik_asic {
|
||||||
unsigned sc_earlyz_tile_fifo_size;
|
unsigned sc_earlyz_tile_fifo_size;
|
||||||
|
|
||||||
unsigned num_tile_pipes;
|
unsigned num_tile_pipes;
|
||||||
unsigned num_backends_per_se;
|
unsigned backend_enable_mask;
|
||||||
unsigned backend_disable_mask_per_asic;
|
unsigned backend_disable_mask_per_asic;
|
||||||
unsigned backend_map;
|
unsigned backend_map;
|
||||||
unsigned num_texture_channel_caches;
|
unsigned num_texture_channel_caches;
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ static struct radeon_atpx_priv {
|
||||||
bool atpx_detected;
|
bool atpx_detected;
|
||||||
/* handle for device - and atpx */
|
/* handle for device - and atpx */
|
||||||
acpi_handle dhandle;
|
acpi_handle dhandle;
|
||||||
|
acpi_handle other_handle;
|
||||||
struct radeon_atpx atpx;
|
struct radeon_atpx atpx;
|
||||||
} radeon_atpx_priv;
|
} radeon_atpx_priv;
|
||||||
|
|
||||||
|
|
@ -451,9 +452,10 @@ static bool radeon_atpx_pci_probe_handle(struct pci_dev *pdev)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
status = acpi_get_handle(dhandle, "ATPX", &atpx_handle);
|
status = acpi_get_handle(dhandle, "ATPX", &atpx_handle);
|
||||||
if (ACPI_FAILURE(status))
|
if (ACPI_FAILURE(status)) {
|
||||||
|
radeon_atpx_priv.other_handle = dhandle;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
radeon_atpx_priv.dhandle = dhandle;
|
radeon_atpx_priv.dhandle = dhandle;
|
||||||
radeon_atpx_priv.atpx.handle = atpx_handle;
|
radeon_atpx_priv.atpx.handle = atpx_handle;
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -530,6 +532,16 @@ static bool radeon_atpx_detect(void)
|
||||||
printk(KERN_INFO "VGA switcheroo: detected switching method %s handle\n",
|
printk(KERN_INFO "VGA switcheroo: detected switching method %s handle\n",
|
||||||
acpi_method_name);
|
acpi_method_name);
|
||||||
radeon_atpx_priv.atpx_detected = true;
|
radeon_atpx_priv.atpx_detected = true;
|
||||||
|
/*
|
||||||
|
* On some systems hotplug events are generated for the device
|
||||||
|
* being switched off when ATPX is executed. They cause ACPI
|
||||||
|
* hotplug to trigger and attempt to remove the device from
|
||||||
|
* the system, which causes it to break down. Prevent that from
|
||||||
|
* happening by setting the no_hotplug flag for the involved
|
||||||
|
* ACPI device objects.
|
||||||
|
*/
|
||||||
|
acpi_bus_no_hotplug(radeon_atpx_priv.dhandle);
|
||||||
|
acpi_bus_no_hotplug(radeon_atpx_priv.other_handle);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -77,9 +77,10 @@
|
||||||
* 2.33.0 - Add SI tiling mode array query
|
* 2.33.0 - Add SI tiling mode array query
|
||||||
* 2.34.0 - Add CIK tiling mode array query
|
* 2.34.0 - Add CIK tiling mode array query
|
||||||
* 2.35.0 - Add CIK macrotile mode array query
|
* 2.35.0 - Add CIK macrotile mode array query
|
||||||
|
* 2.36.0 - Fix CIK DCE tiling setup
|
||||||
*/
|
*/
|
||||||
#define KMS_DRIVER_MAJOR 2
|
#define KMS_DRIVER_MAJOR 2
|
||||||
#define KMS_DRIVER_MINOR 35
|
#define KMS_DRIVER_MINOR 36
|
||||||
#define KMS_DRIVER_PATCHLEVEL 0
|
#define KMS_DRIVER_PATCHLEVEL 0
|
||||||
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
|
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
|
||||||
int radeon_driver_unload_kms(struct drm_device *dev);
|
int radeon_driver_unload_kms(struct drm_device *dev);
|
||||||
|
|
|
||||||
|
|
@ -461,6 +461,15 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
|
||||||
case RADEON_INFO_SI_CP_DMA_COMPUTE:
|
case RADEON_INFO_SI_CP_DMA_COMPUTE:
|
||||||
*value = 1;
|
*value = 1;
|
||||||
break;
|
break;
|
||||||
|
case RADEON_INFO_SI_BACKEND_ENABLED_MASK:
|
||||||
|
if (rdev->family >= CHIP_BONAIRE) {
|
||||||
|
*value = rdev->config.cik.backend_enable_mask;
|
||||||
|
} else if (rdev->family >= CHIP_TAHITI) {
|
||||||
|
*value = rdev->config.si.backend_enable_mask;
|
||||||
|
} else {
|
||||||
|
DRM_DEBUG_KMS("BACKEND_ENABLED_MASK is si+ only!\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
DRM_DEBUG_KMS("Invalid request %d\n", info->request);
|
DRM_DEBUG_KMS("Invalid request %d\n", info->request);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
||||||
|
|
@ -473,7 +473,7 @@ static int radeon_uvd_cs_reloc(struct radeon_cs_parser *p,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((start >> 28) != (end >> 28)) {
|
if ((start >> 28) != ((end - 1) >> 28)) {
|
||||||
DRM_ERROR("reloc %LX-%LX crossing 256MB boundary!\n",
|
DRM_ERROR("reloc %LX-%LX crossing 256MB boundary!\n",
|
||||||
start, end);
|
start, end);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
||||||
|
|
@ -2811,7 +2811,7 @@ static void si_setup_spi(struct radeon_device *rdev,
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 si_get_rb_disabled(struct radeon_device *rdev,
|
static u32 si_get_rb_disabled(struct radeon_device *rdev,
|
||||||
u32 max_rb_num, u32 se_num,
|
u32 max_rb_num_per_se,
|
||||||
u32 sh_per_se)
|
u32 sh_per_se)
|
||||||
{
|
{
|
||||||
u32 data, mask;
|
u32 data, mask;
|
||||||
|
|
@ -2825,14 +2825,14 @@ static u32 si_get_rb_disabled(struct radeon_device *rdev,
|
||||||
|
|
||||||
data >>= BACKEND_DISABLE_SHIFT;
|
data >>= BACKEND_DISABLE_SHIFT;
|
||||||
|
|
||||||
mask = si_create_bitmask(max_rb_num / se_num / sh_per_se);
|
mask = si_create_bitmask(max_rb_num_per_se / sh_per_se);
|
||||||
|
|
||||||
return data & mask;
|
return data & mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void si_setup_rb(struct radeon_device *rdev,
|
static void si_setup_rb(struct radeon_device *rdev,
|
||||||
u32 se_num, u32 sh_per_se,
|
u32 se_num, u32 sh_per_se,
|
||||||
u32 max_rb_num)
|
u32 max_rb_num_per_se)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
u32 data, mask;
|
u32 data, mask;
|
||||||
|
|
@ -2842,19 +2842,21 @@ static void si_setup_rb(struct radeon_device *rdev,
|
||||||
for (i = 0; i < se_num; i++) {
|
for (i = 0; i < se_num; i++) {
|
||||||
for (j = 0; j < sh_per_se; j++) {
|
for (j = 0; j < sh_per_se; j++) {
|
||||||
si_select_se_sh(rdev, i, j);
|
si_select_se_sh(rdev, i, j);
|
||||||
data = si_get_rb_disabled(rdev, max_rb_num, se_num, sh_per_se);
|
data = si_get_rb_disabled(rdev, max_rb_num_per_se, sh_per_se);
|
||||||
disabled_rbs |= data << ((i * sh_per_se + j) * TAHITI_RB_BITMAP_WIDTH_PER_SH);
|
disabled_rbs |= data << ((i * sh_per_se + j) * TAHITI_RB_BITMAP_WIDTH_PER_SH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
si_select_se_sh(rdev, 0xffffffff, 0xffffffff);
|
si_select_se_sh(rdev, 0xffffffff, 0xffffffff);
|
||||||
|
|
||||||
mask = 1;
|
mask = 1;
|
||||||
for (i = 0; i < max_rb_num; i++) {
|
for (i = 0; i < max_rb_num_per_se * se_num; i++) {
|
||||||
if (!(disabled_rbs & mask))
|
if (!(disabled_rbs & mask))
|
||||||
enabled_rbs |= mask;
|
enabled_rbs |= mask;
|
||||||
mask <<= 1;
|
mask <<= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rdev->config.si.backend_enable_mask = enabled_rbs;
|
||||||
|
|
||||||
for (i = 0; i < se_num; i++) {
|
for (i = 0; i < se_num; i++) {
|
||||||
si_select_se_sh(rdev, i, 0xffffffff);
|
si_select_se_sh(rdev, i, 0xffffffff);
|
||||||
data = 0;
|
data = 0;
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,7 @@ static struct cpuidle_state *cpuidle_state_table;
|
||||||
* which is also the index into the MWAIT hint array.
|
* which is also the index into the MWAIT hint array.
|
||||||
* Thus C0 is a dummy.
|
* Thus C0 is a dummy.
|
||||||
*/
|
*/
|
||||||
static struct cpuidle_state nehalem_cstates[] __initdata = {
|
static struct cpuidle_state nehalem_cstates[] = {
|
||||||
{
|
{
|
||||||
.name = "C1-NHM",
|
.name = "C1-NHM",
|
||||||
.desc = "MWAIT 0x00",
|
.desc = "MWAIT 0x00",
|
||||||
|
|
@ -156,7 +156,7 @@ static struct cpuidle_state nehalem_cstates[] __initdata = {
|
||||||
.enter = NULL }
|
.enter = NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct cpuidle_state snb_cstates[] __initdata = {
|
static struct cpuidle_state snb_cstates[] = {
|
||||||
{
|
{
|
||||||
.name = "C1-SNB",
|
.name = "C1-SNB",
|
||||||
.desc = "MWAIT 0x00",
|
.desc = "MWAIT 0x00",
|
||||||
|
|
@ -196,7 +196,7 @@ static struct cpuidle_state snb_cstates[] __initdata = {
|
||||||
.enter = NULL }
|
.enter = NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct cpuidle_state ivb_cstates[] __initdata = {
|
static struct cpuidle_state ivb_cstates[] = {
|
||||||
{
|
{
|
||||||
.name = "C1-IVB",
|
.name = "C1-IVB",
|
||||||
.desc = "MWAIT 0x00",
|
.desc = "MWAIT 0x00",
|
||||||
|
|
@ -236,7 +236,7 @@ static struct cpuidle_state ivb_cstates[] __initdata = {
|
||||||
.enter = NULL }
|
.enter = NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct cpuidle_state hsw_cstates[] __initdata = {
|
static struct cpuidle_state hsw_cstates[] = {
|
||||||
{
|
{
|
||||||
.name = "C1-HSW",
|
.name = "C1-HSW",
|
||||||
.desc = "MWAIT 0x00",
|
.desc = "MWAIT 0x00",
|
||||||
|
|
@ -297,7 +297,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||||
.enter = NULL }
|
.enter = NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct cpuidle_state atom_cstates[] __initdata = {
|
static struct cpuidle_state atom_cstates[] = {
|
||||||
{
|
{
|
||||||
.name = "C1E-ATM",
|
.name = "C1E-ATM",
|
||||||
.desc = "MWAIT 0x00",
|
.desc = "MWAIT 0x00",
|
||||||
|
|
@ -329,7 +329,7 @@ static struct cpuidle_state atom_cstates[] __initdata = {
|
||||||
{
|
{
|
||||||
.enter = NULL }
|
.enter = NULL }
|
||||||
};
|
};
|
||||||
static struct cpuidle_state avn_cstates[] __initdata = {
|
static struct cpuidle_state avn_cstates[] = {
|
||||||
{
|
{
|
||||||
.name = "C1-AVN",
|
.name = "C1-AVN",
|
||||||
.desc = "MWAIT 0x00",
|
.desc = "MWAIT 0x00",
|
||||||
|
|
@ -344,6 +344,8 @@ static struct cpuidle_state avn_cstates[] __initdata = {
|
||||||
.exit_latency = 15,
|
.exit_latency = 15,
|
||||||
.target_residency = 45,
|
.target_residency = 45,
|
||||||
.enter = &intel_idle },
|
.enter = &intel_idle },
|
||||||
|
{
|
||||||
|
.enter = NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1871,6 +1871,10 @@ void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EV_ABS:
|
case EV_ABS:
|
||||||
|
input_alloc_absinfo(dev);
|
||||||
|
if (!dev->absinfo)
|
||||||
|
return;
|
||||||
|
|
||||||
__set_bit(code, dev->absbit);
|
__set_bit(code, dev->absbit);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -455,7 +455,18 @@ static void zforce_complete(struct zforce_ts *ts, int cmd, int result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t zforce_interrupt(int irq, void *dev_id)
|
static irqreturn_t zforce_irq(int irq, void *dev_id)
|
||||||
|
{
|
||||||
|
struct zforce_ts *ts = dev_id;
|
||||||
|
struct i2c_client *client = ts->client;
|
||||||
|
|
||||||
|
if (ts->suspended && device_may_wakeup(&client->dev))
|
||||||
|
pm_wakeup_event(&client->dev, 500);
|
||||||
|
|
||||||
|
return IRQ_WAKE_THREAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
static irqreturn_t zforce_irq_thread(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
struct zforce_ts *ts = dev_id;
|
struct zforce_ts *ts = dev_id;
|
||||||
struct i2c_client *client = ts->client;
|
struct i2c_client *client = ts->client;
|
||||||
|
|
@ -465,12 +476,10 @@ static irqreturn_t zforce_interrupt(int irq, void *dev_id)
|
||||||
u8 *payload;
|
u8 *payload;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When suspended, emit a wakeup signal if necessary and return.
|
* When still suspended, return.
|
||||||
* Due to the level-interrupt we will get re-triggered later.
|
* Due to the level-interrupt we will get re-triggered later.
|
||||||
*/
|
*/
|
||||||
if (ts->suspended) {
|
if (ts->suspended) {
|
||||||
if (device_may_wakeup(&client->dev))
|
|
||||||
pm_wakeup_event(&client->dev, 500);
|
|
||||||
msleep(20);
|
msleep(20);
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
@ -763,8 +772,8 @@ static int zforce_probe(struct i2c_client *client,
|
||||||
* Therefore we can trigger the interrupt anytime it is low and do
|
* Therefore we can trigger the interrupt anytime it is low and do
|
||||||
* not need to limit it to the interrupt edge.
|
* not need to limit it to the interrupt edge.
|
||||||
*/
|
*/
|
||||||
ret = devm_request_threaded_irq(&client->dev, client->irq, NULL,
|
ret = devm_request_threaded_irq(&client->dev, client->irq,
|
||||||
zforce_interrupt,
|
zforce_irq, zforce_irq_thread,
|
||||||
IRQF_TRIGGER_LOW | IRQF_ONESHOT,
|
IRQF_TRIGGER_LOW | IRQF_ONESHOT,
|
||||||
input_dev->name, ts);
|
input_dev->name, ts);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
|
|
||||||
|
|
@ -244,18 +244,12 @@ static int lp5521_update_program_memory(struct lp55xx_chip *chip,
|
||||||
if (i % 2)
|
if (i % 2)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
mutex_lock(&chip->lock);
|
|
||||||
|
|
||||||
for (i = 0; i < LP5521_PROGRAM_LENGTH; i++) {
|
for (i = 0; i < LP5521_PROGRAM_LENGTH; i++) {
|
||||||
ret = lp55xx_write(chip, addr[idx] + i, pattern[i]);
|
ret = lp55xx_write(chip, addr[idx] + i, pattern[i]);
|
||||||
if (ret) {
|
if (ret)
|
||||||
mutex_unlock(&chip->lock);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&chip->lock);
|
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
|
@ -427,15 +421,17 @@ static ssize_t store_engine_load(struct device *dev,
|
||||||
{
|
{
|
||||||
struct lp55xx_led *led = i2c_get_clientdata(to_i2c_client(dev));
|
struct lp55xx_led *led = i2c_get_clientdata(to_i2c_client(dev));
|
||||||
struct lp55xx_chip *chip = led->chip;
|
struct lp55xx_chip *chip = led->chip;
|
||||||
|
int ret;
|
||||||
|
|
||||||
mutex_lock(&chip->lock);
|
mutex_lock(&chip->lock);
|
||||||
|
|
||||||
chip->engine_idx = nr;
|
chip->engine_idx = nr;
|
||||||
lp5521_load_engine(chip);
|
lp5521_load_engine(chip);
|
||||||
|
ret = lp5521_update_program_memory(chip, buf, len);
|
||||||
|
|
||||||
mutex_unlock(&chip->lock);
|
mutex_unlock(&chip->lock);
|
||||||
|
|
||||||
return lp5521_update_program_memory(chip, buf, len);
|
return ret;
|
||||||
}
|
}
|
||||||
store_load(1)
|
store_load(1)
|
||||||
store_load(2)
|
store_load(2)
|
||||||
|
|
|
||||||
|
|
@ -337,18 +337,12 @@ static int lp5523_update_program_memory(struct lp55xx_chip *chip,
|
||||||
if (i % 2)
|
if (i % 2)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
mutex_lock(&chip->lock);
|
|
||||||
|
|
||||||
for (i = 0; i < LP5523_PROGRAM_LENGTH; i++) {
|
for (i = 0; i < LP5523_PROGRAM_LENGTH; i++) {
|
||||||
ret = lp55xx_write(chip, LP5523_REG_PROG_MEM + i, pattern[i]);
|
ret = lp55xx_write(chip, LP5523_REG_PROG_MEM + i, pattern[i]);
|
||||||
if (ret) {
|
if (ret)
|
||||||
mutex_unlock(&chip->lock);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&chip->lock);
|
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
|
@ -548,15 +542,17 @@ static ssize_t store_engine_load(struct device *dev,
|
||||||
{
|
{
|
||||||
struct lp55xx_led *led = i2c_get_clientdata(to_i2c_client(dev));
|
struct lp55xx_led *led = i2c_get_clientdata(to_i2c_client(dev));
|
||||||
struct lp55xx_chip *chip = led->chip;
|
struct lp55xx_chip *chip = led->chip;
|
||||||
|
int ret;
|
||||||
|
|
||||||
mutex_lock(&chip->lock);
|
mutex_lock(&chip->lock);
|
||||||
|
|
||||||
chip->engine_idx = nr;
|
chip->engine_idx = nr;
|
||||||
lp5523_load_engine_and_select_page(chip);
|
lp5523_load_engine_and_select_page(chip);
|
||||||
|
ret = lp5523_update_program_memory(chip, buf, len);
|
||||||
|
|
||||||
mutex_unlock(&chip->lock);
|
mutex_unlock(&chip->lock);
|
||||||
|
|
||||||
return lp5523_update_program_memory(chip, buf, len);
|
return ret;
|
||||||
}
|
}
|
||||||
store_load(1)
|
store_load(1)
|
||||||
store_load(2)
|
store_load(2)
|
||||||
|
|
|
||||||
|
|
@ -1228,8 +1228,14 @@ static void rtsx_pci_remove(struct pci_dev *pcidev)
|
||||||
|
|
||||||
pcr->remove_pci = true;
|
pcr->remove_pci = true;
|
||||||
|
|
||||||
cancel_delayed_work(&pcr->carddet_work);
|
/* Disable interrupts at the pcr level */
|
||||||
cancel_delayed_work(&pcr->idle_work);
|
spin_lock_irq(&pcr->lock);
|
||||||
|
rtsx_pci_writel(pcr, RTSX_BIER, 0);
|
||||||
|
pcr->bier = 0;
|
||||||
|
spin_unlock_irq(&pcr->lock);
|
||||||
|
|
||||||
|
cancel_delayed_work_sync(&pcr->carddet_work);
|
||||||
|
cancel_delayed_work_sync(&pcr->idle_work);
|
||||||
|
|
||||||
mfd_remove_devices(&pcidev->dev);
|
mfd_remove_devices(&pcidev->dev);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ static int pxa2xx_flash_probe(struct platform_device *pdev)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
info->map.cached =
|
info->map.cached =
|
||||||
ioremap_cached(info->map.phys, info->map.size);
|
ioremap_cache(info->map.phys, info->map.size);
|
||||||
if (!info->map.cached)
|
if (!info->map.cached)
|
||||||
printk(KERN_WARNING "Failed to ioremap cached %s\n",
|
printk(KERN_WARNING "Failed to ioremap cached %s\n",
|
||||||
info->map.name);
|
info->map.name);
|
||||||
|
|
|
||||||
|
|
@ -3692,7 +3692,8 @@ static inline int bond_slave_override(struct bonding *bond,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb)
|
static u16 bond_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* This helper function exists to help dev_pick_tx get the correct
|
* This helper function exists to help dev_pick_tx get the correct
|
||||||
|
|
|
||||||
|
|
@ -520,10 +520,12 @@ struct bnx2x_fastpath {
|
||||||
#define BNX2X_FP_STATE_IDLE 0
|
#define BNX2X_FP_STATE_IDLE 0
|
||||||
#define BNX2X_FP_STATE_NAPI (1 << 0) /* NAPI owns this FP */
|
#define BNX2X_FP_STATE_NAPI (1 << 0) /* NAPI owns this FP */
|
||||||
#define BNX2X_FP_STATE_POLL (1 << 1) /* poll owns this FP */
|
#define BNX2X_FP_STATE_POLL (1 << 1) /* poll owns this FP */
|
||||||
#define BNX2X_FP_STATE_NAPI_YIELD (1 << 2) /* NAPI yielded this FP */
|
#define BNX2X_FP_STATE_DISABLED (1 << 2)
|
||||||
#define BNX2X_FP_STATE_POLL_YIELD (1 << 3) /* poll yielded this FP */
|
#define BNX2X_FP_STATE_NAPI_YIELD (1 << 3) /* NAPI yielded this FP */
|
||||||
|
#define BNX2X_FP_STATE_POLL_YIELD (1 << 4) /* poll yielded this FP */
|
||||||
|
#define BNX2X_FP_OWNED (BNX2X_FP_STATE_NAPI | BNX2X_FP_STATE_POLL)
|
||||||
#define BNX2X_FP_YIELD (BNX2X_FP_STATE_NAPI_YIELD | BNX2X_FP_STATE_POLL_YIELD)
|
#define BNX2X_FP_YIELD (BNX2X_FP_STATE_NAPI_YIELD | BNX2X_FP_STATE_POLL_YIELD)
|
||||||
#define BNX2X_FP_LOCKED (BNX2X_FP_STATE_NAPI | BNX2X_FP_STATE_POLL)
|
#define BNX2X_FP_LOCKED (BNX2X_FP_OWNED | BNX2X_FP_STATE_DISABLED)
|
||||||
#define BNX2X_FP_USER_PEND (BNX2X_FP_STATE_POLL | BNX2X_FP_STATE_POLL_YIELD)
|
#define BNX2X_FP_USER_PEND (BNX2X_FP_STATE_POLL | BNX2X_FP_STATE_POLL_YIELD)
|
||||||
/* protect state */
|
/* protect state */
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
|
|
@ -613,7 +615,7 @@ static inline bool bnx2x_fp_lock_napi(struct bnx2x_fastpath *fp)
|
||||||
{
|
{
|
||||||
bool rc = true;
|
bool rc = true;
|
||||||
|
|
||||||
spin_lock(&fp->lock);
|
spin_lock_bh(&fp->lock);
|
||||||
if (fp->state & BNX2X_FP_LOCKED) {
|
if (fp->state & BNX2X_FP_LOCKED) {
|
||||||
WARN_ON(fp->state & BNX2X_FP_STATE_NAPI);
|
WARN_ON(fp->state & BNX2X_FP_STATE_NAPI);
|
||||||
fp->state |= BNX2X_FP_STATE_NAPI_YIELD;
|
fp->state |= BNX2X_FP_STATE_NAPI_YIELD;
|
||||||
|
|
@ -622,7 +624,7 @@ static inline bool bnx2x_fp_lock_napi(struct bnx2x_fastpath *fp)
|
||||||
/* we don't care if someone yielded */
|
/* we don't care if someone yielded */
|
||||||
fp->state = BNX2X_FP_STATE_NAPI;
|
fp->state = BNX2X_FP_STATE_NAPI;
|
||||||
}
|
}
|
||||||
spin_unlock(&fp->lock);
|
spin_unlock_bh(&fp->lock);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -631,14 +633,16 @@ static inline bool bnx2x_fp_unlock_napi(struct bnx2x_fastpath *fp)
|
||||||
{
|
{
|
||||||
bool rc = false;
|
bool rc = false;
|
||||||
|
|
||||||
spin_lock(&fp->lock);
|
spin_lock_bh(&fp->lock);
|
||||||
WARN_ON(fp->state &
|
WARN_ON(fp->state &
|
||||||
(BNX2X_FP_STATE_POLL | BNX2X_FP_STATE_NAPI_YIELD));
|
(BNX2X_FP_STATE_POLL | BNX2X_FP_STATE_NAPI_YIELD));
|
||||||
|
|
||||||
if (fp->state & BNX2X_FP_STATE_POLL_YIELD)
|
if (fp->state & BNX2X_FP_STATE_POLL_YIELD)
|
||||||
rc = true;
|
rc = true;
|
||||||
fp->state = BNX2X_FP_STATE_IDLE;
|
|
||||||
spin_unlock(&fp->lock);
|
/* state ==> idle, unless currently disabled */
|
||||||
|
fp->state &= BNX2X_FP_STATE_DISABLED;
|
||||||
|
spin_unlock_bh(&fp->lock);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -669,7 +673,9 @@ static inline bool bnx2x_fp_unlock_poll(struct bnx2x_fastpath *fp)
|
||||||
|
|
||||||
if (fp->state & BNX2X_FP_STATE_POLL_YIELD)
|
if (fp->state & BNX2X_FP_STATE_POLL_YIELD)
|
||||||
rc = true;
|
rc = true;
|
||||||
fp->state = BNX2X_FP_STATE_IDLE;
|
|
||||||
|
/* state ==> idle, unless currently disabled */
|
||||||
|
fp->state &= BNX2X_FP_STATE_DISABLED;
|
||||||
spin_unlock_bh(&fp->lock);
|
spin_unlock_bh(&fp->lock);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
@ -677,9 +683,23 @@ static inline bool bnx2x_fp_unlock_poll(struct bnx2x_fastpath *fp)
|
||||||
/* true if a socket is polling, even if it did not get the lock */
|
/* true if a socket is polling, even if it did not get the lock */
|
||||||
static inline bool bnx2x_fp_ll_polling(struct bnx2x_fastpath *fp)
|
static inline bool bnx2x_fp_ll_polling(struct bnx2x_fastpath *fp)
|
||||||
{
|
{
|
||||||
WARN_ON(!(fp->state & BNX2X_FP_LOCKED));
|
WARN_ON(!(fp->state & BNX2X_FP_OWNED));
|
||||||
return fp->state & BNX2X_FP_USER_PEND;
|
return fp->state & BNX2X_FP_USER_PEND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* false if fp is currently owned */
|
||||||
|
static inline bool bnx2x_fp_ll_disable(struct bnx2x_fastpath *fp)
|
||||||
|
{
|
||||||
|
int rc = true;
|
||||||
|
|
||||||
|
spin_lock_bh(&fp->lock);
|
||||||
|
if (fp->state & BNX2X_FP_OWNED)
|
||||||
|
rc = false;
|
||||||
|
fp->state |= BNX2X_FP_STATE_DISABLED;
|
||||||
|
spin_unlock_bh(&fp->lock);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
static inline void bnx2x_fp_init_lock(struct bnx2x_fastpath *fp)
|
static inline void bnx2x_fp_init_lock(struct bnx2x_fastpath *fp)
|
||||||
{
|
{
|
||||||
|
|
@ -709,6 +729,10 @@ static inline bool bnx2x_fp_ll_polling(struct bnx2x_fastpath *fp)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
static inline bool bnx2x_fp_ll_disable(struct bnx2x_fastpath *fp)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
#endif /* CONFIG_NET_RX_BUSY_POLL */
|
#endif /* CONFIG_NET_RX_BUSY_POLL */
|
||||||
|
|
||||||
/* Use 2500 as a mini-jumbo MTU for FCoE */
|
/* Use 2500 as a mini-jumbo MTU for FCoE */
|
||||||
|
|
|
||||||
|
|
@ -197,6 +197,7 @@ static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata,
|
||||||
struct sk_buff *skb = tx_buf->skb;
|
struct sk_buff *skb = tx_buf->skb;
|
||||||
u16 bd_idx = TX_BD(tx_buf->first_bd), new_cons;
|
u16 bd_idx = TX_BD(tx_buf->first_bd), new_cons;
|
||||||
int nbd;
|
int nbd;
|
||||||
|
u16 split_bd_len = 0;
|
||||||
|
|
||||||
/* prefetch skb end pointer to speedup dev_kfree_skb() */
|
/* prefetch skb end pointer to speedup dev_kfree_skb() */
|
||||||
prefetch(&skb->end);
|
prefetch(&skb->end);
|
||||||
|
|
@ -204,10 +205,7 @@ static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata,
|
||||||
DP(NETIF_MSG_TX_DONE, "fp[%d]: pkt_idx %d buff @(%p)->skb %p\n",
|
DP(NETIF_MSG_TX_DONE, "fp[%d]: pkt_idx %d buff @(%p)->skb %p\n",
|
||||||
txdata->txq_index, idx, tx_buf, skb);
|
txdata->txq_index, idx, tx_buf, skb);
|
||||||
|
|
||||||
/* unmap first bd */
|
|
||||||
tx_start_bd = &txdata->tx_desc_ring[bd_idx].start_bd;
|
tx_start_bd = &txdata->tx_desc_ring[bd_idx].start_bd;
|
||||||
dma_unmap_single(&bp->pdev->dev, BD_UNMAP_ADDR(tx_start_bd),
|
|
||||||
BD_UNMAP_LEN(tx_start_bd), DMA_TO_DEVICE);
|
|
||||||
|
|
||||||
nbd = le16_to_cpu(tx_start_bd->nbd) - 1;
|
nbd = le16_to_cpu(tx_start_bd->nbd) - 1;
|
||||||
#ifdef BNX2X_STOP_ON_ERROR
|
#ifdef BNX2X_STOP_ON_ERROR
|
||||||
|
|
@ -225,12 +223,19 @@ static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata,
|
||||||
--nbd;
|
--nbd;
|
||||||
bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
|
bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
|
||||||
|
|
||||||
/* ...and the TSO split header bd since they have no mapping */
|
/* TSO headers+data bds share a common mapping. See bnx2x_tx_split() */
|
||||||
if (tx_buf->flags & BNX2X_TSO_SPLIT_BD) {
|
if (tx_buf->flags & BNX2X_TSO_SPLIT_BD) {
|
||||||
|
tx_data_bd = &txdata->tx_desc_ring[bd_idx].reg_bd;
|
||||||
|
split_bd_len = BD_UNMAP_LEN(tx_data_bd);
|
||||||
--nbd;
|
--nbd;
|
||||||
bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
|
bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* unmap first bd */
|
||||||
|
dma_unmap_single(&bp->pdev->dev, BD_UNMAP_ADDR(tx_start_bd),
|
||||||
|
BD_UNMAP_LEN(tx_start_bd) + split_bd_len,
|
||||||
|
DMA_TO_DEVICE);
|
||||||
|
|
||||||
/* now free frags */
|
/* now free frags */
|
||||||
while (nbd > 0) {
|
while (nbd > 0) {
|
||||||
|
|
||||||
|
|
@ -1829,26 +1834,22 @@ static void bnx2x_napi_disable_cnic(struct bnx2x *bp)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
local_bh_disable();
|
|
||||||
for_each_rx_queue_cnic(bp, i) {
|
for_each_rx_queue_cnic(bp, i) {
|
||||||
napi_disable(&bnx2x_fp(bp, i, napi));
|
napi_disable(&bnx2x_fp(bp, i, napi));
|
||||||
while (!bnx2x_fp_lock_napi(&bp->fp[i]))
|
while (!bnx2x_fp_ll_disable(&bp->fp[i]))
|
||||||
mdelay(1);
|
usleep_range(1000, 2000);
|
||||||
}
|
}
|
||||||
local_bh_enable();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bnx2x_napi_disable(struct bnx2x *bp)
|
static void bnx2x_napi_disable(struct bnx2x *bp)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
local_bh_disable();
|
|
||||||
for_each_eth_queue(bp, i) {
|
for_each_eth_queue(bp, i) {
|
||||||
napi_disable(&bnx2x_fp(bp, i, napi));
|
napi_disable(&bnx2x_fp(bp, i, napi));
|
||||||
while (!bnx2x_fp_lock_napi(&bp->fp[i]))
|
while (!bnx2x_fp_ll_disable(&bp->fp[i]))
|
||||||
mdelay(1);
|
usleep_range(1000, 2000);
|
||||||
}
|
}
|
||||||
local_bh_enable();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bnx2x_netif_start(struct bnx2x *bp)
|
void bnx2x_netif_start(struct bnx2x *bp)
|
||||||
|
|
@ -1871,7 +1872,8 @@ void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw)
|
||||||
bnx2x_napi_disable_cnic(bp);
|
bnx2x_napi_disable_cnic(bp);
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb)
|
u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
struct bnx2x *bp = netdev_priv(dev);
|
struct bnx2x *bp = netdev_priv(dev);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -495,7 +495,8 @@ int bnx2x_set_vf_mac(struct net_device *dev, int queue, u8 *mac);
|
||||||
int bnx2x_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos);
|
int bnx2x_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos);
|
||||||
|
|
||||||
/* select_queue callback */
|
/* select_queue callback */
|
||||||
u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb);
|
u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv);
|
||||||
|
|
||||||
static inline void bnx2x_update_rx_prod(struct bnx2x *bp,
|
static inline void bnx2x_update_rx_prod(struct bnx2x *bp,
|
||||||
struct bnx2x_fastpath *fp,
|
struct bnx2x_fastpath *fp,
|
||||||
|
|
|
||||||
|
|
@ -423,7 +423,7 @@ u64 cxgb4_select_ntuple(struct net_device *dev,
|
||||||
* in the Compressed Filter Tuple.
|
* in the Compressed Filter Tuple.
|
||||||
*/
|
*/
|
||||||
if (tp->vlan_shift >= 0 && l2t->vlan != VLAN_NONE)
|
if (tp->vlan_shift >= 0 && l2t->vlan != VLAN_NONE)
|
||||||
ntuple |= (F_FT_VLAN_VLD | l2t->vlan) << tp->vlan_shift;
|
ntuple |= (u64)(F_FT_VLAN_VLD | l2t->vlan) << tp->vlan_shift;
|
||||||
|
|
||||||
if (tp->port_shift >= 0)
|
if (tp->port_shift >= 0)
|
||||||
ntuple |= (u64)l2t->lport << tp->port_shift;
|
ntuple |= (u64)l2t->lport << tp->port_shift;
|
||||||
|
|
|
||||||
|
|
@ -6827,12 +6827,20 @@ static inline int ixgbe_maybe_stop_tx(struct ixgbe_ring *tx_ring, u16 size)
|
||||||
return __ixgbe_maybe_stop_tx(tx_ring, size);
|
return __ixgbe_maybe_stop_tx(tx_ring, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef IXGBE_FCOE
|
static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb)
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
|
struct ixgbe_fwd_adapter *fwd_adapter = accel_priv;
|
||||||
|
#ifdef IXGBE_FCOE
|
||||||
struct ixgbe_adapter *adapter;
|
struct ixgbe_adapter *adapter;
|
||||||
struct ixgbe_ring_feature *f;
|
struct ixgbe_ring_feature *f;
|
||||||
int txq;
|
int txq;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (fwd_adapter)
|
||||||
|
return skb->queue_mapping + fwd_adapter->tx_base_queue;
|
||||||
|
|
||||||
|
#ifdef IXGBE_FCOE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* only execute the code below if protocol is FCoE
|
* only execute the code below if protocol is FCoE
|
||||||
|
|
@ -6858,9 +6866,11 @@ static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb)
|
||||||
txq -= f->indices;
|
txq -= f->indices;
|
||||||
|
|
||||||
return txq + f->offset;
|
return txq + f->offset;
|
||||||
|
#else
|
||||||
|
return __netdev_pick_tx(dev, skb);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
|
netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,
|
||||||
struct ixgbe_adapter *adapter,
|
struct ixgbe_adapter *adapter,
|
||||||
struct ixgbe_ring *tx_ring)
|
struct ixgbe_ring *tx_ring)
|
||||||
|
|
@ -7629,27 +7639,11 @@ static void ixgbe_fwd_del(struct net_device *pdev, void *priv)
|
||||||
kfree(fwd_adapter);
|
kfree(fwd_adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
static netdev_tx_t ixgbe_fwd_xmit(struct sk_buff *skb,
|
|
||||||
struct net_device *dev,
|
|
||||||
void *priv)
|
|
||||||
{
|
|
||||||
struct ixgbe_fwd_adapter *fwd_adapter = priv;
|
|
||||||
unsigned int queue;
|
|
||||||
struct ixgbe_ring *tx_ring;
|
|
||||||
|
|
||||||
queue = skb->queue_mapping + fwd_adapter->tx_base_queue;
|
|
||||||
tx_ring = fwd_adapter->real_adapter->tx_ring[queue];
|
|
||||||
|
|
||||||
return __ixgbe_xmit_frame(skb, dev, tx_ring);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct net_device_ops ixgbe_netdev_ops = {
|
static const struct net_device_ops ixgbe_netdev_ops = {
|
||||||
.ndo_open = ixgbe_open,
|
.ndo_open = ixgbe_open,
|
||||||
.ndo_stop = ixgbe_close,
|
.ndo_stop = ixgbe_close,
|
||||||
.ndo_start_xmit = ixgbe_xmit_frame,
|
.ndo_start_xmit = ixgbe_xmit_frame,
|
||||||
#ifdef IXGBE_FCOE
|
|
||||||
.ndo_select_queue = ixgbe_select_queue,
|
.ndo_select_queue = ixgbe_select_queue,
|
||||||
#endif
|
|
||||||
.ndo_set_rx_mode = ixgbe_set_rx_mode,
|
.ndo_set_rx_mode = ixgbe_set_rx_mode,
|
||||||
.ndo_validate_addr = eth_validate_addr,
|
.ndo_validate_addr = eth_validate_addr,
|
||||||
.ndo_set_mac_address = ixgbe_set_mac,
|
.ndo_set_mac_address = ixgbe_set_mac,
|
||||||
|
|
@ -7689,7 +7683,6 @@ static const struct net_device_ops ixgbe_netdev_ops = {
|
||||||
.ndo_bridge_getlink = ixgbe_ndo_bridge_getlink,
|
.ndo_bridge_getlink = ixgbe_ndo_bridge_getlink,
|
||||||
.ndo_dfwd_add_station = ixgbe_fwd_add,
|
.ndo_dfwd_add_station = ixgbe_fwd_add,
|
||||||
.ndo_dfwd_del_station = ixgbe_fwd_del,
|
.ndo_dfwd_del_station = ixgbe_fwd_del,
|
||||||
.ndo_dfwd_start_xmit = ixgbe_fwd_xmit,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -618,7 +618,8 @@ ltq_etop_set_multicast_list(struct net_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16
|
static u16
|
||||||
ltq_etop_select_queue(struct net_device *dev, struct sk_buff *skb)
|
ltq_etop_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
/* we are currently only using the first queue */
|
/* we are currently only using the first queue */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -628,7 +628,8 @@ static void build_inline_wqe(struct mlx4_en_tx_desc *tx_desc, struct sk_buff *sk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb)
|
u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
struct mlx4_en_priv *priv = netdev_priv(dev);
|
struct mlx4_en_priv *priv = netdev_priv(dev);
|
||||||
u16 rings_p_up = priv->num_tx_rings_p_up;
|
u16 rings_p_up = priv->num_tx_rings_p_up;
|
||||||
|
|
|
||||||
|
|
@ -722,7 +722,8 @@ int mlx4_en_set_cq_moder(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq);
|
||||||
int mlx4_en_arm_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq);
|
int mlx4_en_arm_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq);
|
||||||
|
|
||||||
void mlx4_en_tx_irq(struct mlx4_cq *mcq);
|
void mlx4_en_tx_irq(struct mlx4_cq *mcq);
|
||||||
u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb);
|
u16 mlx4_en_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv);
|
||||||
netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev);
|
netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev);
|
||||||
|
|
||||||
int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
|
int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
|
||||||
|
|
|
||||||
|
|
@ -1723,6 +1723,7 @@ int qlcnic_83xx_init_mailbox_work(struct qlcnic_adapter *);
|
||||||
void qlcnic_83xx_detach_mailbox_work(struct qlcnic_adapter *);
|
void qlcnic_83xx_detach_mailbox_work(struct qlcnic_adapter *);
|
||||||
void qlcnic_83xx_reinit_mbx_work(struct qlcnic_mailbox *mbx);
|
void qlcnic_83xx_reinit_mbx_work(struct qlcnic_mailbox *mbx);
|
||||||
void qlcnic_83xx_free_mailbox(struct qlcnic_mailbox *mbx);
|
void qlcnic_83xx_free_mailbox(struct qlcnic_mailbox *mbx);
|
||||||
|
void qlcnic_update_stats(struct qlcnic_adapter *);
|
||||||
|
|
||||||
/* Adapter hardware abstraction */
|
/* Adapter hardware abstraction */
|
||||||
struct qlcnic_hardware_ops {
|
struct qlcnic_hardware_ops {
|
||||||
|
|
|
||||||
|
|
@ -167,27 +167,35 @@ static const char qlcnic_gstrings_test[][ETH_GSTRING_LEN] = {
|
||||||
|
|
||||||
#define QLCNIC_TEST_LEN ARRAY_SIZE(qlcnic_gstrings_test)
|
#define QLCNIC_TEST_LEN ARRAY_SIZE(qlcnic_gstrings_test)
|
||||||
|
|
||||||
static inline int qlcnic_82xx_statistics(void)
|
static inline int qlcnic_82xx_statistics(struct qlcnic_adapter *adapter)
|
||||||
{
|
{
|
||||||
return ARRAY_SIZE(qlcnic_device_gstrings_stats) +
|
return ARRAY_SIZE(qlcnic_gstrings_stats) +
|
||||||
ARRAY_SIZE(qlcnic_83xx_mac_stats_strings);
|
ARRAY_SIZE(qlcnic_83xx_mac_stats_strings) +
|
||||||
|
QLCNIC_TX_STATS_LEN * adapter->drv_tx_rings;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int qlcnic_83xx_statistics(void)
|
static inline int qlcnic_83xx_statistics(struct qlcnic_adapter *adapter)
|
||||||
{
|
{
|
||||||
return ARRAY_SIZE(qlcnic_83xx_tx_stats_strings) +
|
return ARRAY_SIZE(qlcnic_gstrings_stats) +
|
||||||
|
ARRAY_SIZE(qlcnic_83xx_tx_stats_strings) +
|
||||||
ARRAY_SIZE(qlcnic_83xx_mac_stats_strings) +
|
ARRAY_SIZE(qlcnic_83xx_mac_stats_strings) +
|
||||||
ARRAY_SIZE(qlcnic_83xx_rx_stats_strings);
|
ARRAY_SIZE(qlcnic_83xx_rx_stats_strings) +
|
||||||
|
QLCNIC_TX_STATS_LEN * adapter->drv_tx_rings;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qlcnic_dev_statistics_len(struct qlcnic_adapter *adapter)
|
static int qlcnic_dev_statistics_len(struct qlcnic_adapter *adapter)
|
||||||
{
|
{
|
||||||
if (qlcnic_82xx_check(adapter))
|
int len = -1;
|
||||||
return qlcnic_82xx_statistics();
|
|
||||||
else if (qlcnic_83xx_check(adapter))
|
if (qlcnic_82xx_check(adapter)) {
|
||||||
return qlcnic_83xx_statistics();
|
len = qlcnic_82xx_statistics(adapter);
|
||||||
else
|
if (adapter->flags & QLCNIC_ESWITCH_ENABLED)
|
||||||
return -1;
|
len += ARRAY_SIZE(qlcnic_device_gstrings_stats);
|
||||||
|
} else if (qlcnic_83xx_check(adapter)) {
|
||||||
|
len = qlcnic_83xx_statistics(adapter);
|
||||||
|
}
|
||||||
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define QLCNIC_TX_INTR_NOT_CONFIGURED 0X78563412
|
#define QLCNIC_TX_INTR_NOT_CONFIGURED 0X78563412
|
||||||
|
|
@ -923,18 +931,13 @@ static int qlcnic_eeprom_test(struct net_device *dev)
|
||||||
|
|
||||||
static int qlcnic_get_sset_count(struct net_device *dev, int sset)
|
static int qlcnic_get_sset_count(struct net_device *dev, int sset)
|
||||||
{
|
{
|
||||||
int len;
|
|
||||||
|
|
||||||
struct qlcnic_adapter *adapter = netdev_priv(dev);
|
struct qlcnic_adapter *adapter = netdev_priv(dev);
|
||||||
switch (sset) {
|
switch (sset) {
|
||||||
case ETH_SS_TEST:
|
case ETH_SS_TEST:
|
||||||
return QLCNIC_TEST_LEN;
|
return QLCNIC_TEST_LEN;
|
||||||
case ETH_SS_STATS:
|
case ETH_SS_STATS:
|
||||||
len = qlcnic_dev_statistics_len(adapter) + QLCNIC_STATS_LEN;
|
return qlcnic_dev_statistics_len(adapter);
|
||||||
if ((adapter->flags & QLCNIC_ESWITCH_ENABLED) ||
|
|
||||||
qlcnic_83xx_check(adapter))
|
|
||||||
return len;
|
|
||||||
return qlcnic_82xx_statistics();
|
|
||||||
default:
|
default:
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
@ -1270,7 +1273,7 @@ static u64 *qlcnic_fill_stats(u64 *data, void *stats, int type)
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qlcnic_update_stats(struct qlcnic_adapter *adapter)
|
void qlcnic_update_stats(struct qlcnic_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct qlcnic_host_tx_ring *tx_ring;
|
struct qlcnic_host_tx_ring *tx_ring;
|
||||||
int ring;
|
int ring;
|
||||||
|
|
|
||||||
|
|
@ -2780,6 +2780,9 @@ static struct net_device_stats *qlcnic_get_stats(struct net_device *netdev)
|
||||||
struct qlcnic_adapter *adapter = netdev_priv(netdev);
|
struct qlcnic_adapter *adapter = netdev_priv(netdev);
|
||||||
struct net_device_stats *stats = &netdev->stats;
|
struct net_device_stats *stats = &netdev->stats;
|
||||||
|
|
||||||
|
if (test_bit(__QLCNIC_DEV_UP, &adapter->state))
|
||||||
|
qlcnic_update_stats(adapter);
|
||||||
|
|
||||||
stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts;
|
stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts;
|
||||||
stats->tx_packets = adapter->stats.xmitfinished;
|
stats->tx_packets = adapter->stats.xmitfinished;
|
||||||
stats->rx_bytes = adapter->stats.rxbytes + adapter->stats.lrobytes;
|
stats->rx_bytes = adapter->stats.rxbytes + adapter->stats.lrobytes;
|
||||||
|
|
|
||||||
|
|
@ -2070,7 +2070,8 @@ static int tile_net_tx(struct sk_buff *skb, struct net_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return subqueue id on this core (one per core). */
|
/* Return subqueue id on this core (one per core). */
|
||||||
static u16 tile_net_select_queue(struct net_device *dev, struct sk_buff *skb)
|
static u16 tile_net_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
return smp_processor_id();
|
return smp_processor_id();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -299,7 +299,7 @@ static netdev_tx_t macvlan_start_xmit(struct sk_buff *skb,
|
||||||
|
|
||||||
if (vlan->fwd_priv) {
|
if (vlan->fwd_priv) {
|
||||||
skb->dev = vlan->lowerdev;
|
skb->dev = vlan->lowerdev;
|
||||||
ret = dev_hard_start_xmit(skb, skb->dev, NULL, vlan->fwd_priv);
|
ret = dev_queue_xmit_accel(skb, vlan->fwd_priv);
|
||||||
} else {
|
} else {
|
||||||
ret = macvlan_queue_xmit(skb, dev);
|
ret = macvlan_queue_xmit(skb, dev);
|
||||||
}
|
}
|
||||||
|
|
@ -337,6 +337,8 @@ static const struct header_ops macvlan_hard_header_ops = {
|
||||||
.cache_update = eth_header_cache_update,
|
.cache_update = eth_header_cache_update,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct rtnl_link_ops macvlan_link_ops;
|
||||||
|
|
||||||
static int macvlan_open(struct net_device *dev)
|
static int macvlan_open(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct macvlan_dev *vlan = netdev_priv(dev);
|
struct macvlan_dev *vlan = netdev_priv(dev);
|
||||||
|
|
@ -352,7 +354,8 @@ static int macvlan_open(struct net_device *dev)
|
||||||
goto hash_add;
|
goto hash_add;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD) {
|
if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD &&
|
||||||
|
dev->rtnl_link_ops == &macvlan_link_ops) {
|
||||||
vlan->fwd_priv =
|
vlan->fwd_priv =
|
||||||
lowerdev->netdev_ops->ndo_dfwd_add_station(lowerdev, dev);
|
lowerdev->netdev_ops->ndo_dfwd_add_station(lowerdev, dev);
|
||||||
|
|
||||||
|
|
@ -361,10 +364,8 @@ static int macvlan_open(struct net_device *dev)
|
||||||
*/
|
*/
|
||||||
if (IS_ERR_OR_NULL(vlan->fwd_priv)) {
|
if (IS_ERR_OR_NULL(vlan->fwd_priv)) {
|
||||||
vlan->fwd_priv = NULL;
|
vlan->fwd_priv = NULL;
|
||||||
} else {
|
} else
|
||||||
dev->features &= ~NETIF_F_LLTX;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = -EBUSY;
|
err = -EBUSY;
|
||||||
|
|
@ -698,8 +699,7 @@ static netdev_features_t macvlan_fix_features(struct net_device *dev,
|
||||||
features = netdev_increment_features(vlan->lowerdev->features,
|
features = netdev_increment_features(vlan->lowerdev->features,
|
||||||
features,
|
features,
|
||||||
mask);
|
mask);
|
||||||
if (!vlan->fwd_priv)
|
features |= NETIF_F_LLTX;
|
||||||
features |= NETIF_F_LLTX;
|
|
||||||
|
|
||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1647,7 +1647,8 @@ static netdev_tx_t team_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16 team_select_queue(struct net_device *dev, struct sk_buff *skb)
|
static u16 team_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* This helper function exists to help dev_pick_tx get the correct
|
* This helper function exists to help dev_pick_tx get the correct
|
||||||
|
|
|
||||||
|
|
@ -364,7 +364,8 @@ static inline void tun_flow_save_rps_rxhash(struct tun_flow_entry *e, u32 hash)
|
||||||
* different rxq no. here. If we could not get rxhash, then we would
|
* different rxq no. here. If we could not get rxhash, then we would
|
||||||
* hope the rxq no. may help here.
|
* hope the rxq no. may help here.
|
||||||
*/
|
*/
|
||||||
static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb)
|
static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
struct tun_struct *tun = netdev_priv(dev);
|
struct tun_struct *tun = netdev_priv(dev);
|
||||||
struct tun_flow_entry *e;
|
struct tun_flow_entry *e;
|
||||||
|
|
|
||||||
|
|
@ -1244,7 +1244,7 @@ static int build_dma_sg(const struct sk_buff *skb, struct urb *urb)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
urb->num_sgs = num_sgs;
|
urb->num_sgs = num_sgs;
|
||||||
sg_init_table(urb->sg, urb->num_sgs);
|
sg_init_table(urb->sg, urb->num_sgs + 1);
|
||||||
|
|
||||||
sg_set_buf(&urb->sg[s++], skb->data, skb_headlen(skb));
|
sg_set_buf(&urb->sg[s++], skb->data, skb_headlen(skb));
|
||||||
total_len += skb_headlen(skb);
|
total_len += skb_headlen(skb);
|
||||||
|
|
|
||||||
|
|
@ -362,21 +362,27 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
|
||||||
{IWL_PCI_DEVICE(0x095B, 0x5310, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095B, 0x5310, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095B, 0x5302, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095B, 0x5302, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095B, 0x5210, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095B, 0x5210, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095B, 0x5012, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x5012, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095B, 0x500A, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x500A, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x5410, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x5410, iwl7265_2ac_cfg)},
|
||||||
|
{IWL_PCI_DEVICE(0x095A, 0x5400, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x1010, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x1010, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x5000, iwl7265_2n_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x5000, iwl7265_2n_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095B, 0x5200, iwl7265_2n_cfg)},
|
{IWL_PCI_DEVICE(0x095B, 0x5200, iwl7265_2n_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x5002, iwl7265_n_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x5002, iwl7265_n_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)},
|
{IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)},
|
||||||
|
{IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)},
|
||||||
|
{IWL_PCI_DEVICE(0x095A, 0x9510, iwl7265_2ac_cfg)},
|
||||||
|
{IWL_PCI_DEVICE(0x095A, 0x9310, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x9410, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x9410, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x5020, iwl7265_2n_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x5020, iwl7265_2n_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x502A, iwl7265_2n_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x502A, iwl7265_2n_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x5420, iwl7265_2n_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x5420, iwl7265_2n_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x5090, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x5090, iwl7265_2ac_cfg)},
|
||||||
|
{IWL_PCI_DEVICE(0x095A, 0x5190, iwl7265_2ac_cfg)},
|
||||||
|
{IWL_PCI_DEVICE(0x095A, 0x5590, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095B, 0x5290, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095B, 0x5290, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x5490, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x5490, iwl7265_2ac_cfg)},
|
||||||
#endif /* CONFIG_IWLMVM */
|
#endif /* CONFIG_IWLMVM */
|
||||||
|
|
|
||||||
|
|
@ -2018,7 +2018,7 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
|
||||||
(hwsim_flags & HWSIM_TX_STAT_ACK)) {
|
(hwsim_flags & HWSIM_TX_STAT_ACK)) {
|
||||||
if (skb->len >= 16) {
|
if (skb->len >= 16) {
|
||||||
hdr = (struct ieee80211_hdr *) skb->data;
|
hdr = (struct ieee80211_hdr *) skb->data;
|
||||||
mac80211_hwsim_monitor_ack(txi->rate_driver_data[0],
|
mac80211_hwsim_monitor_ack(data2->channel,
|
||||||
hdr->addr2);
|
hdr->addr2);
|
||||||
}
|
}
|
||||||
txi->flags |= IEEE80211_TX_STAT_ACK;
|
txi->flags |= IEEE80211_TX_STAT_ACK;
|
||||||
|
|
|
||||||
|
|
@ -747,7 +747,8 @@ static struct net_device_stats *mwifiex_get_stats(struct net_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16
|
static u16
|
||||||
mwifiex_netdev_select_wmm_queue(struct net_device *dev, struct sk_buff *skb)
|
mwifiex_netdev_select_wmm_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
skb->priority = cfg80211_classify8021d(skb, NULL);
|
skb->priority = cfg80211_classify8021d(skb, NULL);
|
||||||
return mwifiex_1d_to_wmm_queue[skb->priority];
|
return mwifiex_1d_to_wmm_queue[skb->priority];
|
||||||
|
|
|
||||||
|
|
@ -279,7 +279,9 @@ static acpi_status register_slot(acpi_handle handle, u32 lvl, void *data,
|
||||||
|
|
||||||
status = acpi_evaluate_integer(handle, "_ADR", NULL, &adr);
|
status = acpi_evaluate_integer(handle, "_ADR", NULL, &adr);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
acpi_handle_warn(handle, "can't evaluate _ADR (%#x)\n", status);
|
if (status != AE_NOT_FOUND)
|
||||||
|
acpi_handle_warn(handle,
|
||||||
|
"can't evaluate _ADR (%#x)\n", status);
|
||||||
return AE_OK;
|
return AE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -643,6 +645,24 @@ static void disable_slot(struct acpiphp_slot *slot)
|
||||||
slot->flags &= (~SLOT_ENABLED);
|
slot->flags &= (~SLOT_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool acpiphp_no_hotplug(acpi_handle handle)
|
||||||
|
{
|
||||||
|
struct acpi_device *adev = NULL;
|
||||||
|
|
||||||
|
acpi_bus_get_device(handle, &adev);
|
||||||
|
return adev && adev->flags.no_hotplug;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool slot_no_hotplug(struct acpiphp_slot *slot)
|
||||||
|
{
|
||||||
|
struct acpiphp_func *func;
|
||||||
|
|
||||||
|
list_for_each_entry(func, &slot->funcs, sibling)
|
||||||
|
if (acpiphp_no_hotplug(func_to_handle(func)))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get_slot_status - get ACPI slot status
|
* get_slot_status - get ACPI slot status
|
||||||
|
|
@ -701,7 +721,8 @@ static void trim_stale_devices(struct pci_dev *dev)
|
||||||
unsigned long long sta;
|
unsigned long long sta;
|
||||||
|
|
||||||
status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
|
status = acpi_evaluate_integer(handle, "_STA", NULL, &sta);
|
||||||
alive = ACPI_SUCCESS(status) && sta == ACPI_STA_ALL;
|
alive = (ACPI_SUCCESS(status) && sta == ACPI_STA_ALL)
|
||||||
|
|| acpiphp_no_hotplug(handle);
|
||||||
}
|
}
|
||||||
if (!alive) {
|
if (!alive) {
|
||||||
u32 v;
|
u32 v;
|
||||||
|
|
@ -741,8 +762,9 @@ static void acpiphp_check_bridge(struct acpiphp_bridge *bridge)
|
||||||
struct pci_dev *dev, *tmp;
|
struct pci_dev *dev, *tmp;
|
||||||
|
|
||||||
mutex_lock(&slot->crit_sect);
|
mutex_lock(&slot->crit_sect);
|
||||||
/* wake up all functions */
|
if (slot_no_hotplug(slot)) {
|
||||||
if (get_slot_status(slot) == ACPI_STA_ALL) {
|
; /* do nothing */
|
||||||
|
} else if (get_slot_status(slot) == ACPI_STA_ALL) {
|
||||||
/* remove stale devices if any */
|
/* remove stale devices if any */
|
||||||
list_for_each_entry_safe(dev, tmp, &bus->devices,
|
list_for_each_entry_safe(dev, tmp, &bus->devices,
|
||||||
bus_list)
|
bus_list)
|
||||||
|
|
|
||||||
|
|
@ -330,29 +330,32 @@ static int acpi_pci_find_device(struct device *dev, acpi_handle *handle)
|
||||||
static void pci_acpi_setup(struct device *dev)
|
static void pci_acpi_setup(struct device *dev)
|
||||||
{
|
{
|
||||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||||
acpi_handle handle = ACPI_HANDLE(dev);
|
struct acpi_device *adev = ACPI_COMPANION(dev);
|
||||||
struct acpi_device *adev;
|
|
||||||
|
|
||||||
if (acpi_bus_get_device(handle, &adev) || !adev->wakeup.flags.valid)
|
if (!adev)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pci_acpi_add_pm_notifier(adev, pci_dev);
|
||||||
|
if (!adev->wakeup.flags.valid)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
device_set_wakeup_capable(dev, true);
|
device_set_wakeup_capable(dev, true);
|
||||||
acpi_pci_sleep_wake(pci_dev, false);
|
acpi_pci_sleep_wake(pci_dev, false);
|
||||||
|
|
||||||
pci_acpi_add_pm_notifier(adev, pci_dev);
|
|
||||||
if (adev->wakeup.flags.run_wake)
|
if (adev->wakeup.flags.run_wake)
|
||||||
device_set_run_wake(dev, true);
|
device_set_run_wake(dev, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pci_acpi_cleanup(struct device *dev)
|
static void pci_acpi_cleanup(struct device *dev)
|
||||||
{
|
{
|
||||||
acpi_handle handle = ACPI_HANDLE(dev);
|
struct acpi_device *adev = ACPI_COMPANION(dev);
|
||||||
struct acpi_device *adev;
|
|
||||||
|
|
||||||
if (!acpi_bus_get_device(handle, &adev) && adev->wakeup.flags.valid) {
|
if (!adev)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pci_acpi_remove_pm_notifier(adev);
|
||||||
|
if (adev->wakeup.flags.valid) {
|
||||||
device_set_wakeup_capable(dev, false);
|
device_set_wakeup_capable(dev, false);
|
||||||
device_set_run_wake(dev, false);
|
device_set_run_wake(dev, false);
|
||||||
pci_acpi_remove_pm_notifier(adev);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,7 @@ config BATTERY_MAX17040
|
||||||
config BATTERY_MAX17042
|
config BATTERY_MAX17042
|
||||||
tristate "Maxim MAX17042/17047/17050/8997/8966 Fuel Gauge"
|
tristate "Maxim MAX17042/17047/17050/8997/8966 Fuel Gauge"
|
||||||
depends on I2C
|
depends on I2C
|
||||||
|
select REGMAP_I2C
|
||||||
help
|
help
|
||||||
MAX17042 is fuel-gauge systems for lithium-ion (Li+) batteries
|
MAX17042 is fuel-gauge systems for lithium-ion (Li+) batteries
|
||||||
in handheld and portable equipment. The MAX17042 is configured
|
in handheld and portable equipment. The MAX17042 is configured
|
||||||
|
|
|
||||||
|
|
@ -511,6 +511,10 @@ int power_supply_register(struct device *parent, struct power_supply *psy)
|
||||||
dev_set_drvdata(dev, psy);
|
dev_set_drvdata(dev, psy);
|
||||||
psy->dev = dev;
|
psy->dev = dev;
|
||||||
|
|
||||||
|
rc = dev_set_name(dev, "%s", psy->name);
|
||||||
|
if (rc)
|
||||||
|
goto dev_set_name_failed;
|
||||||
|
|
||||||
INIT_WORK(&psy->changed_work, power_supply_changed_work);
|
INIT_WORK(&psy->changed_work, power_supply_changed_work);
|
||||||
|
|
||||||
rc = power_supply_check_supplies(psy);
|
rc = power_supply_check_supplies(psy);
|
||||||
|
|
@ -524,10 +528,6 @@ int power_supply_register(struct device *parent, struct power_supply *psy)
|
||||||
if (rc)
|
if (rc)
|
||||||
goto wakeup_init_failed;
|
goto wakeup_init_failed;
|
||||||
|
|
||||||
rc = kobject_set_name(&dev->kobj, "%s", psy->name);
|
|
||||||
if (rc)
|
|
||||||
goto kobject_set_name_failed;
|
|
||||||
|
|
||||||
rc = device_add(dev);
|
rc = device_add(dev);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto device_add_failed;
|
goto device_add_failed;
|
||||||
|
|
@ -553,11 +553,11 @@ create_triggers_failed:
|
||||||
register_cooler_failed:
|
register_cooler_failed:
|
||||||
psy_unregister_thermal(psy);
|
psy_unregister_thermal(psy);
|
||||||
register_thermal_failed:
|
register_thermal_failed:
|
||||||
wakeup_init_failed:
|
|
||||||
device_del(dev);
|
device_del(dev);
|
||||||
kobject_set_name_failed:
|
|
||||||
device_add_failed:
|
device_add_failed:
|
||||||
|
wakeup_init_failed:
|
||||||
check_supplies_failed:
|
check_supplies_failed:
|
||||||
|
dev_set_name_failed:
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
success:
|
success:
|
||||||
return rc;
|
return rc;
|
||||||
|
|
|
||||||
|
|
@ -942,7 +942,7 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
tp->screen = tty3270_alloc_screen(tp->view.cols, tp->view.rows);
|
tp->screen = tty3270_alloc_screen(tp->view.rows, tp->view.cols);
|
||||||
if (IS_ERR(tp->screen)) {
|
if (IS_ERR(tp->screen)) {
|
||||||
rc = PTR_ERR(tp->screen);
|
rc = PTR_ERR(tp->screen);
|
||||||
raw3270_put_view(&tp->view);
|
raw3270_put_view(&tp->view);
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,8 @@ static INT bcm_close(struct net_device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16 bcm_select_queue(struct net_device *dev, struct sk_buff *skb)
|
static u16 bcm_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
return ClassifyPacket(netdev_priv(dev), skb);
|
return ClassifyPacket(netdev_priv(dev), skb);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -306,7 +306,8 @@ static netdev_tx_t xlr_net_start_xmit(struct sk_buff *skb,
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16 xlr_net_select_queue(struct net_device *ndev, struct sk_buff *skb)
|
static u16 xlr_net_select_queue(struct net_device *ndev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
return (u16)smp_processor_id();
|
return (u16)smp_processor_id();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -652,7 +652,8 @@ static unsigned int rtw_classify8021d(struct sk_buff *skb)
|
||||||
return dscp >> 5;
|
return dscp >> 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb)
|
static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||||
|
void *accel_priv)
|
||||||
{
|
{
|
||||||
struct adapter *padapter = rtw_netdev_priv(dev);
|
struct adapter *padapter = rtw_netdev_priv(dev);
|
||||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue