mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-10-29 15:28:50 +01:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
120
arch/mips/boot/compressed/Makefile
Normal file
120
arch/mips/boot/compressed/Makefile
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
#
|
||||
# This file is subject to the terms and conditions of the GNU General Public
|
||||
# License.
|
||||
#
|
||||
# Adapted for MIPS Pete Popov, Dan Malek
|
||||
#
|
||||
# Copyright (C) 1994 by Linus Torvalds
|
||||
# Adapted for PowerPC by Gary Thomas
|
||||
# modified by Cort (cort@cs.nmt.edu)
|
||||
#
|
||||
# Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University
|
||||
# Author: Wu Zhangjin <wuzhangjin@gmail.com>
|
||||
#
|
||||
|
||||
# set the default size of the mallocing area for decompressing
|
||||
BOOT_HEAP_SIZE := 0x400000
|
||||
|
||||
# Disable Function Tracer
|
||||
KBUILD_CFLAGS := $(shell echo $(KBUILD_CFLAGS) | sed -e "s/-pg//")
|
||||
|
||||
KBUILD_CFLAGS := $(filter-out -fstack-protector, $(KBUILD_CFLAGS))
|
||||
|
||||
KBUILD_CFLAGS := $(LINUXINCLUDE) $(KBUILD_CFLAGS) -D__KERNEL__ \
|
||||
-DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull"
|
||||
|
||||
KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \
|
||||
-DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \
|
||||
-DKERNEL_ENTRY=$(VMLINUX_ENTRY_ADDRESS)
|
||||
|
||||
targets := head.o decompress.o string.o dbg.o uart-16550.o uart-alchemy.o
|
||||
|
||||
# decompressor objects (linked with vmlinuz)
|
||||
vmlinuzobjs-y := $(obj)/head.o $(obj)/decompress.o $(obj)/string.o $(obj)/dbg.o
|
||||
|
||||
ifdef CONFIG_DEBUG_ZBOOT
|
||||
vmlinuzobjs-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o
|
||||
vmlinuzobjs-$(CONFIG_MIPS_ALCHEMY) += $(obj)/uart-alchemy.o
|
||||
endif
|
||||
|
||||
ifdef CONFIG_KERNEL_XZ
|
||||
vmlinuzobjs-y += $(obj)/../../lib/ashldi3.o
|
||||
endif
|
||||
|
||||
targets += vmlinux.bin
|
||||
OBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S
|
||||
$(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE
|
||||
$(call if_changed,objcopy)
|
||||
|
||||
tool_$(CONFIG_KERNEL_GZIP) = gzip
|
||||
tool_$(CONFIG_KERNEL_BZIP2) = bzip2
|
||||
tool_$(CONFIG_KERNEL_LZ4) = lz4
|
||||
tool_$(CONFIG_KERNEL_LZMA) = lzma
|
||||
tool_$(CONFIG_KERNEL_LZO) = lzo
|
||||
tool_$(CONFIG_KERNEL_XZ) = xzkern
|
||||
|
||||
targets += vmlinux.bin.z
|
||||
$(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE
|
||||
$(call if_changed,$(tool_y))
|
||||
|
||||
targets += piggy.o
|
||||
OBJCOPYFLAGS_piggy.o := --add-section=.image=$(obj)/vmlinux.bin.z \
|
||||
--set-section-flags=.image=contents,alloc,load,readonly,data
|
||||
$(obj)/piggy.o: $(obj)/dummy.o $(obj)/vmlinux.bin.z FORCE
|
||||
$(call if_changed,objcopy)
|
||||
|
||||
# Calculate the load address of the compressed kernel image
|
||||
hostprogs-y := calc_vmlinuz_load_addr
|
||||
|
||||
ifeq ($(CONFIG_MACH_JZ4740),y)
|
||||
VMLINUZ_LOAD_ADDRESS := 0x80600000
|
||||
else
|
||||
VMLINUZ_LOAD_ADDRESS = $(shell $(obj)/calc_vmlinuz_load_addr \
|
||||
$(obj)/vmlinux.bin $(VMLINUX_LOAD_ADDRESS))
|
||||
endif
|
||||
|
||||
vmlinuzobjs-y += $(obj)/piggy.o
|
||||
|
||||
quiet_cmd_zld = LD $@
|
||||
cmd_zld = $(LD) $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T $< $(vmlinuzobjs-y) -o $@
|
||||
quiet_cmd_strip = STRIP $@
|
||||
cmd_strip = $(STRIP) -s $@
|
||||
vmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr
|
||||
$(call cmd,zld)
|
||||
$(call cmd,strip)
|
||||
|
||||
#
|
||||
# Some DECstations need all possible sections of an ECOFF executable
|
||||
#
|
||||
ifdef CONFIG_MACH_DECSTATION
|
||||
e2eflag := -a
|
||||
endif
|
||||
|
||||
# elf2ecoff can only handle 32bit image
|
||||
hostprogs-y += ../elf2ecoff
|
||||
|
||||
ifdef CONFIG_32BIT
|
||||
VMLINUZ = vmlinuz
|
||||
else
|
||||
VMLINUZ = vmlinuz.32
|
||||
endif
|
||||
|
||||
quiet_cmd_32 = OBJCOPY $@
|
||||
cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@
|
||||
vmlinuz.32: vmlinuz
|
||||
$(call cmd,32)
|
||||
|
||||
quiet_cmd_ecoff = ECOFF $@
|
||||
cmd_ecoff = $< $(VMLINUZ) $@ $(e2eflag)
|
||||
vmlinuz.ecoff: $(obj)/../elf2ecoff $(VMLINUZ)
|
||||
$(call cmd,ecoff)
|
||||
|
||||
OBJCOPYFLAGS_vmlinuz.bin := $(OBJCOPYFLAGS) -O binary
|
||||
vmlinuz.bin: vmlinuz
|
||||
$(call cmd,objcopy)
|
||||
|
||||
OBJCOPYFLAGS_vmlinuz.srec := $(OBJCOPYFLAGS) -S -O srec
|
||||
vmlinuz.srec: vmlinuz
|
||||
$(call cmd,objcopy)
|
||||
|
||||
clean-files := $(objtree)/vmlinuz $(objtree)/vmlinuz.{32,ecoff,bin,srec}
|
||||
57
arch/mips/boot/compressed/calc_vmlinuz_load_addr.c
Normal file
57
arch/mips/boot/compressed/calc_vmlinuz_load_addr.c
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Copyright (C) 2010 "Wu Zhangjin" <wuzhangjin@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
unsigned long long vmlinux_size, vmlinux_load_addr, vmlinuz_load_addr;
|
||||
struct stat sb;
|
||||
|
||||
if (argc != 3) {
|
||||
fprintf(stderr, "Usage: %s <pathname> <vmlinux_load_addr>\n",
|
||||
argv[0]);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (stat(argv[1], &sb) == -1) {
|
||||
perror("stat");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
/* Convert hex characters to dec number */
|
||||
errno = 0;
|
||||
if (sscanf(argv[2], "%llx", &vmlinux_load_addr) != 1) {
|
||||
if (errno != 0)
|
||||
perror("sscanf");
|
||||
else
|
||||
fprintf(stderr, "No matching characters\n");
|
||||
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
vmlinux_size = (uint64_t)sb.st_size;
|
||||
vmlinuz_load_addr = vmlinux_load_addr + vmlinux_size;
|
||||
|
||||
/*
|
||||
* Align with 16 bytes: "greater than that used for any standard data
|
||||
* types by a MIPS compiler." -- See MIPS Run Linux (Second Edition).
|
||||
*/
|
||||
|
||||
vmlinuz_load_addr += (16 - vmlinux_size % 16);
|
||||
|
||||
printf("0x%llx\n", vmlinuz_load_addr);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
36
arch/mips/boot/compressed/dbg.c
Normal file
36
arch/mips/boot/compressed/dbg.c
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* MIPS-specific debug support for pre-boot environment
|
||||
*
|
||||
* NOTE: putc() is board specific, if your board have a 16550 compatible uart,
|
||||
* please select SYS_SUPPORTS_ZBOOT_UART16550 for your machine. othewise, you
|
||||
* need to implement your own putc().
|
||||
*/
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
void __weak putc(char c)
|
||||
{
|
||||
}
|
||||
|
||||
void puts(const char *s)
|
||||
{
|
||||
char c;
|
||||
while ((c = *s++) != '\0') {
|
||||
putc(c);
|
||||
if (c == '\n')
|
||||
putc('\r');
|
||||
}
|
||||
}
|
||||
|
||||
void puthex(unsigned long long val)
|
||||
{
|
||||
|
||||
unsigned char buf[10];
|
||||
int i;
|
||||
for (i = 7; i >= 0; i--) {
|
||||
buf[i] = "0123456789ABCDEF"[val & 0x0F];
|
||||
val >>= 4;
|
||||
}
|
||||
buf[8] = '\0';
|
||||
puts(buf);
|
||||
}
|
||||
114
arch/mips/boot/compressed/decompress.c
Normal file
114
arch/mips/boot/compressed/decompress.c
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
/*
|
||||
* Copyright 2001 MontaVista Software Inc.
|
||||
* Author: Matt Porter <mporter@mvista.com>
|
||||
*
|
||||
* Copyright (C) 2009 Lemote, Inc.
|
||||
* Author: Wu Zhangjin <wuzhangjin@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#include <asm/addrspace.h>
|
||||
|
||||
/*
|
||||
* These two variables specify the free mem region
|
||||
* that can be used for temporary malloc area
|
||||
*/
|
||||
unsigned long free_mem_ptr;
|
||||
unsigned long free_mem_end_ptr;
|
||||
|
||||
/* The linker tells us where the image is. */
|
||||
extern unsigned char __image_begin, __image_end;
|
||||
|
||||
/* debug interfaces */
|
||||
extern void puts(const char *s);
|
||||
extern void puthex(unsigned long long val);
|
||||
|
||||
void error(char *x)
|
||||
{
|
||||
puts("\n\n");
|
||||
puts(x);
|
||||
puts("\n\n -- System halted");
|
||||
|
||||
while (1)
|
||||
; /* Halt */
|
||||
}
|
||||
|
||||
/* activate the code for pre-boot environment */
|
||||
#define STATIC static
|
||||
|
||||
#ifdef CONFIG_KERNEL_GZIP
|
||||
#include "../../../../lib/decompress_inflate.c"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KERNEL_BZIP2
|
||||
#include "../../../../lib/decompress_bunzip2.c"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KERNEL_LZ4
|
||||
#include "../../../../lib/decompress_unlz4.c"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KERNEL_LZMA
|
||||
#include "../../../../lib/decompress_unlzma.c"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KERNEL_LZO
|
||||
#include "../../../../lib/decompress_unlzo.c"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KERNEL_XZ
|
||||
#include "../../../../lib/decompress_unxz.c"
|
||||
#endif
|
||||
|
||||
unsigned long __stack_chk_guard;
|
||||
|
||||
void __stack_chk_guard_setup(void)
|
||||
{
|
||||
__stack_chk_guard = 0x000a0dff;
|
||||
}
|
||||
|
||||
void __stack_chk_fail(void)
|
||||
{
|
||||
error("stack-protector: Kernel stack is corrupted\n");
|
||||
}
|
||||
|
||||
void decompress_kernel(unsigned long boot_heap_start)
|
||||
{
|
||||
unsigned long zimage_start, zimage_size;
|
||||
|
||||
__stack_chk_guard_setup();
|
||||
|
||||
zimage_start = (unsigned long)(&__image_begin);
|
||||
zimage_size = (unsigned long)(&__image_end) -
|
||||
(unsigned long)(&__image_begin);
|
||||
|
||||
puts("zimage at: ");
|
||||
puthex(zimage_start);
|
||||
puts(" ");
|
||||
puthex(zimage_size + zimage_start);
|
||||
puts("\n");
|
||||
|
||||
/* This area are prepared for mallocing when decompressing */
|
||||
free_mem_ptr = boot_heap_start;
|
||||
free_mem_end_ptr = boot_heap_start + BOOT_HEAP_SIZE;
|
||||
|
||||
/* Display standard Linux/MIPS boot prompt */
|
||||
puts("Uncompressing Linux at load address ");
|
||||
puthex(VMLINUX_LOAD_ADDRESS_ULL);
|
||||
puts("\n");
|
||||
|
||||
/* Decompress the kernel with according algorithm */
|
||||
decompress((char *)zimage_start, zimage_size, 0, 0,
|
||||
(void *)VMLINUX_LOAD_ADDRESS_ULL, 0, error);
|
||||
|
||||
/* FIXME: should we flush cache here? */
|
||||
puts("Now, booting the kernel...\n");
|
||||
}
|
||||
4
arch/mips/boot/compressed/dummy.c
Normal file
4
arch/mips/boot/compressed/dummy.c
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
int main(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
56
arch/mips/boot/compressed/head.S
Normal file
56
arch/mips/boot/compressed/head.S
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* 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) 1994, 1995 Waldorf Electronics
|
||||
* Written by Ralf Baechle and Andreas Busse
|
||||
* Copyright (C) 1995 - 1999 Ralf Baechle
|
||||
* Copyright (C) 1996 Paul M. Antoine
|
||||
* Modified for DECStation and hence R3000 support by Paul M. Antoine
|
||||
* Further modifications by David S. Miller and Harald Koerfgen
|
||||
* Copyright (C) 1999 Silicon Graphics, Inc.
|
||||
*/
|
||||
|
||||
#include <asm/asm.h>
|
||||
#include <asm/regdef.h>
|
||||
|
||||
.set noreorder
|
||||
.cprestore
|
||||
LEAF(start)
|
||||
start:
|
||||
/* Save boot rom start args */
|
||||
move s0, a0
|
||||
move s1, a1
|
||||
move s2, a2
|
||||
move s3, a3
|
||||
|
||||
/* Clear BSS */
|
||||
PTR_LA a0, _edata
|
||||
PTR_LA a2, _end
|
||||
1: sw zero, 0(a0)
|
||||
bne a2, a0, 1b
|
||||
addiu a0, a0, 4
|
||||
|
||||
PTR_LA a0, (.heap) /* heap address */
|
||||
PTR_LA sp, (.stack + 8192) /* stack address */
|
||||
|
||||
PTR_LA ra, 2f
|
||||
PTR_LA k0, decompress_kernel
|
||||
jr k0
|
||||
nop
|
||||
2:
|
||||
move a0, s0
|
||||
move a1, s1
|
||||
move a2, s2
|
||||
move a3, s3
|
||||
PTR_LI k0, KERNEL_ENTRY
|
||||
jr k0
|
||||
nop
|
||||
3:
|
||||
b 3b
|
||||
nop
|
||||
END(start)
|
||||
|
||||
.comm .heap,BOOT_HEAP_SIZE,4
|
||||
.comm .stack,4096*2,4
|
||||
53
arch/mips/boot/compressed/ld.script
Normal file
53
arch/mips/boot/compressed/ld.script
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* ld.script for compressed kernel support of MIPS
|
||||
*
|
||||
* Copyright (C) 2009 Lemote Inc.
|
||||
* Author: Wu Zhangjin <wuzhanjing@gmail.com>
|
||||
* Copyright (C) 2010 "Wu Zhangjin" <wuzhanjing@gmail.com>
|
||||
*/
|
||||
|
||||
OUTPUT_ARCH(mips)
|
||||
ENTRY(start)
|
||||
PHDRS {
|
||||
text PT_LOAD FLAGS(7); /* RWX */
|
||||
}
|
||||
SECTIONS
|
||||
{
|
||||
/* Text and read-only data */
|
||||
/* . = VMLINUZ_LOAD_ADDRESS; */
|
||||
.text : {
|
||||
*(.text)
|
||||
*(.rodata)
|
||||
}: text
|
||||
/* End of text section */
|
||||
|
||||
/* Writable data */
|
||||
.data : {
|
||||
*(.data)
|
||||
/* Put the compressed image here */
|
||||
__image_begin = .;
|
||||
*(.image)
|
||||
__image_end = .;
|
||||
CONSTRUCTORS
|
||||
}
|
||||
. = ALIGN(16);
|
||||
_edata = .;
|
||||
/* End of data section */
|
||||
|
||||
/* BSS */
|
||||
.bss : {
|
||||
*(.bss)
|
||||
}
|
||||
. = ALIGN(16);
|
||||
_end = .;
|
||||
|
||||
/* Sections to be discarded */
|
||||
/DISCARD/ : {
|
||||
*(.MIPS.options)
|
||||
*(.options)
|
||||
*(.pdr)
|
||||
*(.reginfo)
|
||||
*(.comment)
|
||||
*(.note)
|
||||
}
|
||||
}
|
||||
28
arch/mips/boot/compressed/string.c
Normal file
28
arch/mips/boot/compressed/string.c
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* arch/mips/boot/compressed/string.c
|
||||
*
|
||||
* Very small subset of simple string routines
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
void *memcpy(void *dest, const void *src, size_t n)
|
||||
{
|
||||
int i;
|
||||
const char *s = src;
|
||||
char *d = dest;
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
d[i] = s[i];
|
||||
return dest;
|
||||
}
|
||||
|
||||
void *memset(void *s, int c, size_t n)
|
||||
{
|
||||
int i;
|
||||
char *ss = s;
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
ss[i] = c;
|
||||
return s;
|
||||
}
|
||||
63
arch/mips/boot/compressed/uart-16550.c
Normal file
63
arch/mips/boot/compressed/uart-16550.c
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* 16550 compatible uart based serial debug support for zboot
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/serial_reg.h>
|
||||
|
||||
#include <asm/addrspace.h>
|
||||
|
||||
#if defined(CONFIG_MACH_LOONGSON) || defined(CONFIG_MIPS_MALTA)
|
||||
#define UART_BASE 0x1fd003f8
|
||||
#define PORT(offset) (CKSEG1ADDR(UART_BASE) + (offset))
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_AR7
|
||||
#include <ar7.h>
|
||||
#define PORT(offset) (CKSEG1ADDR(AR7_REGS_UART0) + (4 * offset))
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MACH_JZ4740
|
||||
#include <asm/mach-jz4740/base.h>
|
||||
#define PORT(offset) (CKSEG1ADDR(JZ4740_UART0_BASE_ADDR) + (4 * offset))
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_XLR
|
||||
#define UART0_BASE 0x1EF14000
|
||||
#define PORT(offset) (CKSEG1ADDR(UART0_BASE) + (4 * offset))
|
||||
#define IOTYPE unsigned int
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_XLP
|
||||
#define UART0_BASE 0x18030100
|
||||
#define PORT(offset) (CKSEG1ADDR(UART0_BASE) + (4 * offset))
|
||||
#define IOTYPE unsigned int
|
||||
#endif
|
||||
|
||||
#ifndef IOTYPE
|
||||
#define IOTYPE char
|
||||
#endif
|
||||
|
||||
#ifndef PORT
|
||||
#error please define the serial port address for your own machine
|
||||
#endif
|
||||
|
||||
static inline unsigned int serial_in(int offset)
|
||||
{
|
||||
return *((volatile IOTYPE *)PORT(offset)) & 0xFF;
|
||||
}
|
||||
|
||||
static inline void serial_out(int offset, int value)
|
||||
{
|
||||
*((volatile IOTYPE *)PORT(offset)) = value & 0xFF;
|
||||
}
|
||||
|
||||
void putc(char c)
|
||||
{
|
||||
int timeout = 1000000;
|
||||
|
||||
while (((serial_in(UART_LSR) & UART_LSR_THRE) == 0) && (timeout-- > 0))
|
||||
;
|
||||
|
||||
serial_out(UART_TX, c);
|
||||
}
|
||||
6
arch/mips/boot/compressed/uart-alchemy.c
Normal file
6
arch/mips/boot/compressed/uart-alchemy.c
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#include <asm/mach-au1x00/au1000.h>
|
||||
|
||||
void putc(char c)
|
||||
{
|
||||
alchemy_uart_putchar(AU1000_UART0_PHYS_ADDR, c);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue