mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-10-29 23:28:52 +01:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
|
|
@ -0,0 +1,89 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2004 Cavium Networks
|
||||
*/
|
||||
#ifndef __ASM_MACH_CAVIUM_OCTEON_CPU_FEATURE_OVERRIDES_H
|
||||
#define __ASM_MACH_CAVIUM_OCTEON_CPU_FEATURE_OVERRIDES_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <asm/mipsregs.h>
|
||||
|
||||
/*
|
||||
* Cavium Octeons are MIPS64v2 processors
|
||||
*/
|
||||
#define cpu_dcache_line_size() 128
|
||||
#define cpu_icache_line_size() 128
|
||||
|
||||
|
||||
#define cpu_has_4kex 1
|
||||
#define cpu_has_3k_cache 0
|
||||
#define cpu_has_4k_cache 0
|
||||
#define cpu_has_tx39_cache 0
|
||||
#define cpu_has_counter 1
|
||||
#define cpu_has_watch 1
|
||||
#define cpu_has_divec 1
|
||||
#define cpu_has_vce 0
|
||||
#define cpu_has_cache_cdex_p 0
|
||||
#define cpu_has_cache_cdex_s 0
|
||||
#define cpu_has_prefetch 1
|
||||
|
||||
#define cpu_has_llsc 1
|
||||
/*
|
||||
* We Disable LL/SC on non SMP systems as it is faster to disable
|
||||
* interrupts for atomic access than a LL/SC.
|
||||
*/
|
||||
#ifdef CONFIG_SMP
|
||||
# define kernel_uses_llsc 1
|
||||
#else
|
||||
# define kernel_uses_llsc 0
|
||||
#endif
|
||||
#define cpu_has_vtag_icache 1
|
||||
#define cpu_has_dc_aliases 0
|
||||
#define cpu_has_ic_fills_f_dc 0
|
||||
#define cpu_has_64bits 1
|
||||
#define cpu_has_octeon_cache 1
|
||||
#define cpu_has_saa octeon_has_saa()
|
||||
#define cpu_has_mips32r1 0
|
||||
#define cpu_has_mips32r2 0
|
||||
#define cpu_has_mips64r1 0
|
||||
#define cpu_has_mips64r2 1
|
||||
#define cpu_has_dsp 0
|
||||
#define cpu_has_dsp2 0
|
||||
#define cpu_has_mipsmt 0
|
||||
#define cpu_has_vint 0
|
||||
#define cpu_has_veic 0
|
||||
#define cpu_hwrena_impl_bits 0xc0000000
|
||||
#define cpu_has_wsbh 1
|
||||
|
||||
#define cpu_has_rixi (cpu_data[0].cputype != CPU_CAVIUM_OCTEON)
|
||||
|
||||
#define ARCH_HAS_IRQ_PER_CPU 1
|
||||
#define ARCH_HAS_SPINLOCK_PREFETCH 1
|
||||
#define spin_lock_prefetch(x) prefetch(x)
|
||||
#define PREFETCH_STRIDE 128
|
||||
|
||||
#ifdef __OCTEON__
|
||||
/*
|
||||
* All gcc versions that have OCTEON support define __OCTEON__ and have the
|
||||
* __builtin_popcount support.
|
||||
*/
|
||||
#define ARCH_HAS_USABLE_BUILTIN_POPCOUNT 1
|
||||
#endif
|
||||
|
||||
static inline int octeon_has_saa(void)
|
||||
{
|
||||
int id;
|
||||
asm volatile ("mfc0 %0, $15,0" : "=r" (id));
|
||||
return id >= 0x000d0300;
|
||||
}
|
||||
|
||||
/*
|
||||
* The last 256MB are reserved for device to device mappings and the
|
||||
* BAR1 hole.
|
||||
*/
|
||||
#define MAX_DMA32_PFN (((1ULL << 32) - (1ULL << 28)) >> PAGE_SHIFT)
|
||||
|
||||
#endif
|
||||
67
arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
Normal file
67
arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2006 Ralf Baechle <ralf@linux-mips.org>
|
||||
*
|
||||
*
|
||||
* Similar to mach-generic/dma-coherence.h except
|
||||
* plat_device_is_coherent hard coded to return 1.
|
||||
*
|
||||
*/
|
||||
#ifndef __ASM_MACH_CAVIUM_OCTEON_DMA_COHERENCE_H
|
||||
#define __ASM_MACH_CAVIUM_OCTEON_DMA_COHERENCE_H
|
||||
|
||||
#include <linux/bug.h>
|
||||
|
||||
struct device;
|
||||
|
||||
extern void octeon_pci_dma_init(void);
|
||||
|
||||
static inline dma_addr_t plat_map_dma_mem(struct device *dev, void *addr,
|
||||
size_t size)
|
||||
{
|
||||
BUG();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline dma_addr_t plat_map_dma_mem_page(struct device *dev,
|
||||
struct page *page)
|
||||
{
|
||||
BUG();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned long plat_dma_addr_to_phys(struct device *dev,
|
||||
dma_addr_t dma_addr)
|
||||
{
|
||||
BUG();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr,
|
||||
size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
BUG();
|
||||
}
|
||||
|
||||
static inline int plat_dma_supported(struct device *dev, u64 mask)
|
||||
{
|
||||
BUG();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int plat_device_is_coherent(struct device *dev)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr);
|
||||
phys_addr_t dma_to_phys(struct device *dev, dma_addr_t daddr);
|
||||
|
||||
struct dma_map_ops;
|
||||
extern struct dma_map_ops *octeon_pci_dma_map_ops;
|
||||
extern char *octeon_swiotlb;
|
||||
|
||||
#endif /* __ASM_MACH_CAVIUM_OCTEON_DMA_COHERENCE_H */
|
||||
21
arch/mips/include/asm/mach-cavium-octeon/gpio.h
Normal file
21
arch/mips/include/asm/mach-cavium-octeon/gpio.h
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
#ifndef __ASM_MACH_CAVIUM_OCTEON_GPIO_H
|
||||
#define __ASM_MACH_CAVIUM_OCTEON_GPIO_H
|
||||
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
#define gpio_get_value __gpio_get_value
|
||||
#define gpio_set_value __gpio_set_value
|
||||
#define gpio_cansleep __gpio_cansleep
|
||||
#else
|
||||
int gpio_request(unsigned gpio, const char *label);
|
||||
void gpio_free(unsigned gpio);
|
||||
int gpio_direction_input(unsigned gpio);
|
||||
int gpio_direction_output(unsigned gpio, int value);
|
||||
int gpio_get_value(unsigned gpio);
|
||||
void gpio_set_value(unsigned gpio, int value);
|
||||
#endif
|
||||
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
#define gpio_to_irq __gpio_to_irq
|
||||
|
||||
#endif /* __ASM_MACH_GENERIC_GPIO_H */
|
||||
60
arch/mips/include/asm/mach-cavium-octeon/irq.h
Normal file
60
arch/mips/include/asm/mach-cavium-octeon/irq.h
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2004-2008 Cavium Networks
|
||||
*/
|
||||
#ifndef __OCTEON_IRQ_H__
|
||||
#define __OCTEON_IRQ_H__
|
||||
|
||||
#define NR_IRQS OCTEON_IRQ_LAST
|
||||
#define MIPS_CPU_IRQ_BASE OCTEON_IRQ_SW0
|
||||
|
||||
enum octeon_irq {
|
||||
/* 1 - 8 represent the 8 MIPS standard interrupt sources */
|
||||
OCTEON_IRQ_SW0 = 1,
|
||||
OCTEON_IRQ_SW1,
|
||||
/* CIU0, CUI2, CIU4 are 3, 4, 5 */
|
||||
OCTEON_IRQ_5 = 6,
|
||||
OCTEON_IRQ_PERF,
|
||||
OCTEON_IRQ_TIMER,
|
||||
/* sources in CIU_INTX_EN0 */
|
||||
OCTEON_IRQ_WORKQ0,
|
||||
OCTEON_IRQ_WDOG0 = OCTEON_IRQ_WORKQ0 + 64,
|
||||
OCTEON_IRQ_MBOX0 = OCTEON_IRQ_WDOG0 + 32,
|
||||
OCTEON_IRQ_MBOX1,
|
||||
OCTEON_IRQ_MBOX2,
|
||||
OCTEON_IRQ_MBOX3,
|
||||
OCTEON_IRQ_PCI_INT0,
|
||||
OCTEON_IRQ_PCI_INT1,
|
||||
OCTEON_IRQ_PCI_INT2,
|
||||
OCTEON_IRQ_PCI_INT3,
|
||||
OCTEON_IRQ_PCI_MSI0,
|
||||
OCTEON_IRQ_PCI_MSI1,
|
||||
OCTEON_IRQ_PCI_MSI2,
|
||||
OCTEON_IRQ_PCI_MSI3,
|
||||
|
||||
OCTEON_IRQ_TWSI,
|
||||
OCTEON_IRQ_TWSI2,
|
||||
OCTEON_IRQ_RML,
|
||||
OCTEON_IRQ_TIMER0,
|
||||
OCTEON_IRQ_TIMER1,
|
||||
OCTEON_IRQ_TIMER2,
|
||||
OCTEON_IRQ_TIMER3,
|
||||
OCTEON_IRQ_USB0,
|
||||
OCTEON_IRQ_USB1,
|
||||
#ifndef CONFIG_PCI_MSI
|
||||
OCTEON_IRQ_LAST = 127
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
/* 256 - 511 represent the MSI interrupts 0-255 */
|
||||
#define OCTEON_IRQ_MSI_BIT0 (256)
|
||||
|
||||
#define OCTEON_IRQ_MSI_LAST (OCTEON_IRQ_MSI_BIT0 + 255)
|
||||
#define OCTEON_IRQ_LAST (OCTEON_IRQ_MSI_LAST + 1)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
131
arch/mips/include/asm/mach-cavium-octeon/kernel-entry-init.h
Normal file
131
arch/mips/include/asm/mach-cavium-octeon/kernel-entry-init.h
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2005-2008 Cavium Networks, Inc
|
||||
*/
|
||||
#ifndef __ASM_MACH_CAVIUM_OCTEON_KERNEL_ENTRY_H
|
||||
#define __ASM_MACH_CAVIUM_OCTEON_KERNEL_ENTRY_H
|
||||
|
||||
|
||||
#define CP0_CYCLE_COUNTER $9, 6
|
||||
#define CP0_CVMCTL_REG $9, 7
|
||||
#define CP0_CVMMEMCTL_REG $11,7
|
||||
#define CP0_PRID_REG $15, 0
|
||||
#define CP0_PRID_OCTEON_PASS1 0x000d0000
|
||||
#define CP0_PRID_OCTEON_CN30XX 0x000d0200
|
||||
|
||||
.macro kernel_entry_setup
|
||||
# Registers set by bootloader:
|
||||
# (only 32 bits set by bootloader, all addresses are physical
|
||||
# addresses, and need to have the appropriate memory region set
|
||||
# by the kernel
|
||||
# a0 = argc
|
||||
# a1 = argv (kseg0 compat addr)
|
||||
# a2 = 1 if init core, zero otherwise
|
||||
# a3 = address of boot descriptor block
|
||||
.set push
|
||||
.set arch=octeon
|
||||
# Read the cavium mem control register
|
||||
dmfc0 v0, CP0_CVMMEMCTL_REG
|
||||
# Clear the lower 6 bits, the CVMSEG size
|
||||
dins v0, $0, 0, 6
|
||||
ori v0, CONFIG_CAVIUM_OCTEON_CVMSEG_SIZE
|
||||
dmtc0 v0, CP0_CVMMEMCTL_REG # Write the cavium mem control register
|
||||
dmfc0 v0, CP0_CVMCTL_REG # Read the cavium control register
|
||||
# Disable unaligned load/store support but leave HW fixup enabled
|
||||
# Needed for octeon specific memcpy
|
||||
or v0, v0, 0x5001
|
||||
xor v0, v0, 0x1001
|
||||
# Read the processor ID register
|
||||
mfc0 v1, CP0_PRID_REG
|
||||
# Disable instruction prefetching (Octeon Pass1 errata)
|
||||
or v0, v0, 0x2000
|
||||
# Skip reenable of prefetching for Octeon Pass1
|
||||
beq v1, CP0_PRID_OCTEON_PASS1, skip
|
||||
nop
|
||||
# Reenable instruction prefetching, not on Pass1
|
||||
xor v0, v0, 0x2000
|
||||
# Strip off pass number off of processor id
|
||||
srl v1, 8
|
||||
sll v1, 8
|
||||
# CN30XX needs some extra stuff turned off for better performance
|
||||
bne v1, CP0_PRID_OCTEON_CN30XX, skip
|
||||
nop
|
||||
# CN30XX Use random Icache replacement
|
||||
or v0, v0, 0x400
|
||||
# CN30XX Disable instruction prefetching
|
||||
or v0, v0, 0x2000
|
||||
skip:
|
||||
# First clear off CvmCtl[IPPCI] bit and move the performance
|
||||
# counters interrupt to IRQ 6
|
||||
li v1, ~(7 << 7)
|
||||
and v0, v0, v1
|
||||
ori v0, v0, (6 << 7)
|
||||
# Write the cavium control register
|
||||
dmtc0 v0, CP0_CVMCTL_REG
|
||||
sync
|
||||
# Flush dcache after config change
|
||||
cache 9, 0($0)
|
||||
# Get my core id
|
||||
rdhwr v0, $0
|
||||
# Jump the master to kernel_entry
|
||||
bne a2, zero, octeon_main_processor
|
||||
nop
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
#
|
||||
# All cores other than the master need to wait here for SMP bootstrap
|
||||
# to begin
|
||||
#
|
||||
|
||||
# This is the variable where the next core to boot os stored
|
||||
PTR_LA t0, octeon_processor_boot
|
||||
octeon_spin_wait_boot:
|
||||
# Get the core id of the next to be booted
|
||||
LONG_L t1, (t0)
|
||||
# Keep looping if it isn't me
|
||||
bne t1, v0, octeon_spin_wait_boot
|
||||
nop
|
||||
# Get my GP from the global variable
|
||||
PTR_LA t0, octeon_processor_gp
|
||||
LONG_L gp, (t0)
|
||||
# Get my SP from the global variable
|
||||
PTR_LA t0, octeon_processor_sp
|
||||
LONG_L sp, (t0)
|
||||
# Set the SP global variable to zero so the master knows we've started
|
||||
LONG_S zero, (t0)
|
||||
#ifdef __OCTEON__
|
||||
syncw
|
||||
syncw
|
||||
#else
|
||||
sync
|
||||
#endif
|
||||
# Jump to the normal Linux SMP entry point
|
||||
j smp_bootstrap
|
||||
nop
|
||||
#else /* CONFIG_SMP */
|
||||
|
||||
#
|
||||
# Someone tried to boot SMP with a non SMP kernel. All extra cores
|
||||
# will halt here.
|
||||
#
|
||||
octeon_wait_forever:
|
||||
wait
|
||||
b octeon_wait_forever
|
||||
nop
|
||||
|
||||
#endif /* CONFIG_SMP */
|
||||
octeon_main_processor:
|
||||
.set pop
|
||||
.endm
|
||||
|
||||
/*
|
||||
* Do SMP slave processor setup necessary before we can savely execute C code.
|
||||
*/
|
||||
.macro smp_slave_setup
|
||||
.endm
|
||||
|
||||
#endif /* __ASM_MACH_CAVIUM_OCTEON_KERNEL_ENTRY_H */
|
||||
24
arch/mips/include/asm/mach-cavium-octeon/spaces.h
Normal file
24
arch/mips/include/asm/mach-cavium-octeon/spaces.h
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2012 Cavium, Inc.
|
||||
*/
|
||||
#ifndef _ASM_MACH_CAVIUM_OCTEON_SPACES_H
|
||||
#define _ASM_MACH_CAVIUM_OCTEON_SPACES_H
|
||||
|
||||
#include <linux/const.h>
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
/* They are all the same and some OCTEON II cores cannot handle 0xa8.. */
|
||||
#define CAC_BASE _AC(0x8000000000000000, UL)
|
||||
#define UNCAC_BASE _AC(0x8000000000000000, UL)
|
||||
#define IO_BASE _AC(0x8000000000000000, UL)
|
||||
|
||||
|
||||
#endif /* CONFIG_64BIT */
|
||||
|
||||
#include <asm/mach-generic/spaces.h>
|
||||
|
||||
#endif /* _ASM_MACH_CAVIUM_OCTEON_SPACES_H */
|
||||
25
arch/mips/include/asm/mach-cavium-octeon/war.h
Normal file
25
arch/mips/include/asm/mach-cavium-octeon/war.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org>
|
||||
* Copyright (C) 2008 Cavium Networks <support@caviumnetworks.com>
|
||||
*/
|
||||
#ifndef __ASM_MIPS_MACH_CAVIUM_OCTEON_WAR_H
|
||||
#define __ASM_MIPS_MACH_CAVIUM_OCTEON_WAR_H
|
||||
|
||||
#define R4600_V1_INDEX_ICACHEOP_WAR 0
|
||||
#define R4600_V1_HIT_CACHEOP_WAR 0
|
||||
#define R4600_V2_HIT_CACHEOP_WAR 0
|
||||
#define R5432_CP0_INTERRUPT_WAR 0
|
||||
#define BCM1250_M3_WAR 0
|
||||
#define SIBYTE_1956_WAR 0
|
||||
#define MIPS4K_ICACHE_REFILL_WAR 0
|
||||
#define MIPS_CACHE_SYNC_WAR 0
|
||||
#define TX49XX_ICACHE_INDEX_INV_WAR 0
|
||||
#define ICACHE_REFILLS_WORKAROUND_WAR 0
|
||||
#define R10000_LLSC_WAR 0
|
||||
#define MIPS34K_MISSED_ITLB_WAR 0
|
||||
|
||||
#endif /* __ASM_MIPS_MACH_CAVIUM_OCTEON_WAR_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue