Merge branches 'amba', 'fixes', 'misc' and 'tauros2' into for-next
这个提交包含在:

@@ -23,7 +23,6 @@ generic-y += preempt.h
|
||||
generic-y += resource.h
|
||||
generic-y += rwsem.h
|
||||
generic-y += seccomp.h
|
||||
generic-y += sections.h
|
||||
generic-y += segment.h
|
||||
generic-y += sembuf.h
|
||||
generic-y += serial.h
|
||||
|
@@ -74,7 +74,7 @@ static inline uint32_t __div64_32(uint64_t *n, uint32_t base)
|
||||
static inline uint64_t __arch_xprod_64(uint64_t m, uint64_t n, bool bias)
|
||||
{
|
||||
unsigned long long res;
|
||||
unsigned int tmp = 0;
|
||||
register unsigned int tmp asm("ip") = 0;
|
||||
|
||||
if (!bias) {
|
||||
asm ( "umull %Q0, %R0, %Q1, %Q2\n\t"
|
||||
@@ -90,12 +90,12 @@ static inline uint64_t __arch_xprod_64(uint64_t m, uint64_t n, bool bias)
|
||||
: "r" (m), "r" (n)
|
||||
: "cc");
|
||||
} else {
|
||||
asm ( "umull %Q0, %R0, %Q1, %Q2\n\t"
|
||||
"cmn %Q0, %Q1\n\t"
|
||||
"adcs %R0, %R0, %R1\n\t"
|
||||
"adc %Q0, %3, #0"
|
||||
: "=&r" (res)
|
||||
: "r" (m), "r" (n), "r" (tmp)
|
||||
asm ( "umull %Q0, %R0, %Q2, %Q3\n\t"
|
||||
"cmn %Q0, %Q2\n\t"
|
||||
"adcs %R0, %R0, %R2\n\t"
|
||||
"adc %Q0, %1, #0"
|
||||
: "=&r" (res), "+&r" (tmp)
|
||||
: "r" (m), "r" (n)
|
||||
: "cc");
|
||||
}
|
||||
|
||||
|
@@ -134,6 +134,21 @@
|
||||
*/
|
||||
#define PLAT_PHYS_OFFSET UL(CONFIG_PHYS_OFFSET)
|
||||
|
||||
#ifdef CONFIG_XIP_KERNEL
|
||||
/*
|
||||
* When referencing data in RAM from the XIP region in a relative manner
|
||||
* with the MMU off, we need the relative offset between the two physical
|
||||
* addresses. The macro below achieves this, which is:
|
||||
* __pa(v_data) - __xip_pa(v_text)
|
||||
*/
|
||||
#define PHYS_RELATIVE(v_data, v_text) \
|
||||
(((v_data) - PAGE_OFFSET + PLAT_PHYS_OFFSET) - \
|
||||
((v_text) - XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR) + \
|
||||
CONFIG_XIP_PHYS_ADDR))
|
||||
#else
|
||||
#define PHYS_RELATIVE(v_data, v_text) ((v_data) - (v_text))
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/*
|
||||
@@ -273,14 +288,14 @@ static inline void *phys_to_virt(phys_addr_t x)
|
||||
#define __va(x) ((void *)__phys_to_virt((phys_addr_t)(x)))
|
||||
#define pfn_to_kaddr(pfn) __va((phys_addr_t)(pfn) << PAGE_SHIFT)
|
||||
|
||||
extern phys_addr_t (*arch_virt_to_idmap)(unsigned long x);
|
||||
extern unsigned long (*arch_virt_to_idmap)(unsigned long x);
|
||||
|
||||
/*
|
||||
* These are for systems that have a hardware interconnect supported alias of
|
||||
* physical memory for idmap purposes. Most cases should leave these
|
||||
* untouched.
|
||||
* untouched. Note: this can only return addresses less than 4GiB.
|
||||
*/
|
||||
static inline phys_addr_t __virt_to_idmap(unsigned long x)
|
||||
static inline unsigned long __virt_to_idmap(unsigned long x)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_MMU) && arch_virt_to_idmap)
|
||||
return arch_virt_to_idmap(x);
|
||||
@@ -303,20 +318,6 @@ static inline phys_addr_t __virt_to_idmap(unsigned long x)
|
||||
#define __bus_to_pfn(x) __phys_to_pfn(x)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_VIRT_TO_BUS
|
||||
#define virt_to_bus virt_to_bus
|
||||
static inline __deprecated unsigned long virt_to_bus(void *x)
|
||||
{
|
||||
return __virt_to_bus((unsigned long)x);
|
||||
}
|
||||
|
||||
#define bus_to_virt bus_to_virt
|
||||
static inline __deprecated void *bus_to_virt(unsigned long x)
|
||||
{
|
||||
return (void *)__bus_to_virt(x);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Conversion between a struct page and a physical address.
|
||||
*
|
||||
|
@@ -26,7 +26,12 @@ void __check_vmalloc_seq(struct mm_struct *mm);
|
||||
#ifdef CONFIG_CPU_HAS_ASID
|
||||
|
||||
void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk);
|
||||
#define init_new_context(tsk,mm) ({ atomic64_set(&(mm)->context.id, 0); 0; })
|
||||
static inline int
|
||||
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
||||
{
|
||||
atomic64_set(&mm->context.id, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARM_ERRATA_798181
|
||||
void a15_erratum_get_cpumask(int this_cpu, struct mm_struct *mm,
|
||||
@@ -85,7 +90,12 @@ static inline void finish_arch_post_lock_switch(void)
|
||||
|
||||
#endif /* CONFIG_MMU */
|
||||
|
||||
#define init_new_context(tsk,mm) 0
|
||||
static inline int
|
||||
init_new_context(struct task_struct *tsk, struct mm_struct *mm)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#endif /* CONFIG_CPU_HAS_ASID */
|
||||
|
||||
|
@@ -0,0 +1,8 @@
|
||||
#ifndef _ASM_ARM_SECTIONS_H
|
||||
#define _ASM_ARM_SECTIONS_H
|
||||
|
||||
#include <asm-generic/sections.h>
|
||||
|
||||
extern char _exiprom[];
|
||||
|
||||
#endif /* _ASM_ARM_SECTIONS_H */
|
@@ -15,10 +15,11 @@
|
||||
* Eg, if you have 2 banks of up to 64MB at 0x80000000, 0x84000000,
|
||||
* then MAX_PHYSMEM_BITS is 32, SECTION_SIZE_BITS is 26.
|
||||
*
|
||||
* Define these in your mach/memory.h.
|
||||
* These can be overridden in your mach/memory.h.
|
||||
*/
|
||||
#if !defined(SECTION_SIZE_BITS) || !defined(MAX_PHYSMEM_BITS)
|
||||
#error Sparsemem is not supported on this platform
|
||||
#if !defined(MAX_PHYSMEM_BITS) || !defined(SECTION_SIZE_BITS)
|
||||
#define MAX_PHYSMEM_BITS 36
|
||||
#define SECTION_SIZE_BITS 28
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
在新工单中引用
屏蔽一个用户