mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-11-01 00:28:51 +01:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
141
arch/cris/boot/rescue/kimagerescue.S
Normal file
141
arch/cris/boot/rescue/kimagerescue.S
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
/*
|
||||
* Rescue code to be prepended on a kimage and copied to the
|
||||
* rescue serial port.
|
||||
* This is called from the rescue code, it will copy received data to
|
||||
* 4004000 and after a timeout jump to it.
|
||||
*/
|
||||
|
||||
#define ASSEMBLER_MACROS_ONLY
|
||||
#include <arch/sv_addr_ag.h>
|
||||
|
||||
#define CODE_START 0x40004000
|
||||
#define CODE_LENGTH 784
|
||||
#define TIMEOUT_VALUE 1000
|
||||
|
||||
|
||||
#ifdef CONFIG_ETRAX_RESCUE_SER0
|
||||
#define SERXOFF R_SERIAL0_XOFF
|
||||
#define SERBAUD R_SERIAL0_BAUD
|
||||
#define SERRECC R_SERIAL0_REC_CTRL
|
||||
#define SERRDAT R_SERIAL0_REC_DATA
|
||||
#define SERSTAT R_SERIAL0_STATUS
|
||||
#endif
|
||||
#ifdef CONFIG_ETRAX_RESCUE_SER1
|
||||
#define SERXOFF R_SERIAL1_XOFF
|
||||
#define SERBAUD R_SERIAL1_BAUD
|
||||
#define SERRECC R_SERIAL1_REC_CTRL
|
||||
#define SERRDAT R_SERIAL1_REC_DATA
|
||||
#define SERSTAT R_SERIAL1_STATUS
|
||||
#endif
|
||||
#ifdef CONFIG_ETRAX_RESCUE_SER2
|
||||
#define SERXOFF R_SERIAL2_XOFF
|
||||
#define SERBAUD R_SERIAL2_BAUD
|
||||
#define SERRECC R_SERIAL2_REC_CTRL
|
||||
#define SERRDAT R_SERIAL2_REC_DATA
|
||||
#define SERSTAT R_SERIAL2_STATUS
|
||||
#endif
|
||||
#ifdef CONFIG_ETRAX_RESCUE_SER3
|
||||
#define SERXOFF R_SERIAL3_XOFF
|
||||
#define SERBAUD R_SERIAL3_BAUD
|
||||
#define SERRECC R_SERIAL3_REC_CTRL
|
||||
#define SERRDAT R_SERIAL3_REC_DATA
|
||||
#define SERSTAT R_SERIAL3_STATUS
|
||||
#endif
|
||||
|
||||
.text
|
||||
;; This is the entry point of the rescue code
|
||||
;; 0x80000000 if loaded in flash (as it should be)
|
||||
;; since etrax actually starts at address 2 when booting from flash, we
|
||||
;; put a nop (2 bytes) here first so we dont accidentally skip the di
|
||||
|
||||
nop
|
||||
di
|
||||
;; setup port PA and PB default initial directions and data
|
||||
;; (so we can flash LEDs, and so that DTR and others are set)
|
||||
|
||||
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DIR, $r0
|
||||
move.b $r0, [R_PORT_PA_DIR]
|
||||
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DATA, $r0
|
||||
move.b $r0, [R_PORT_PA_DATA]
|
||||
|
||||
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DIR, $r0
|
||||
move.b $r0, [R_PORT_PB_DIR]
|
||||
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DATA, $r0
|
||||
move.b $r0, [R_PORT_PB_DATA]
|
||||
|
||||
;; We need to setup the bus registers before we start using the DRAM
|
||||
#include "../../lib/dram_init.S"
|
||||
|
||||
;; Setup the stack to a suitably high address.
|
||||
;; We assume 8 MB is the minimum DRAM in an eLinux
|
||||
;; product and put the sp at the top for now.
|
||||
|
||||
move.d 0x40800000, $sp
|
||||
|
||||
;; setup the serial port at 115200 baud
|
||||
|
||||
moveq 0, $r0
|
||||
move.d $r0, [SERXOFF]
|
||||
|
||||
move.b 0x99, $r0
|
||||
move.b $r0, [SERBAUD] ; 115.2kbaud for both transmit
|
||||
; and receive
|
||||
|
||||
move.b 0x40, $r0 ; rec enable
|
||||
move.b $r0, [SERRECC]
|
||||
|
||||
|
||||
moveq 0, $r1 ; "timer" to clock out a LED red flash
|
||||
move.d CODE_START, $r3 ; destination counter
|
||||
move.d CODE_LENGTH, $r4 ; length
|
||||
move.d TIMEOUT_VALUE, $r5 ; "timeout" until jump
|
||||
|
||||
wait_ser:
|
||||
addq 1, $r1
|
||||
subq 1, $r5 ; decrease timeout
|
||||
beq jump_start ; timed out
|
||||
nop
|
||||
#ifndef CONFIG_ETRAX_NO_LEDS
|
||||
#ifdef CONFIG_ETRAX_PA_LEDS
|
||||
move.b CONFIG_ETRAX_DEF_R_PORT_PA_DATA, $r2
|
||||
#endif
|
||||
#ifdef CONFIG_ETRAX_PB_LEDS
|
||||
move.b CONFIG_ETRAX_DEF_R_PORT_PB_DATA, $r2
|
||||
#endif
|
||||
move.d (1 << CONFIG_ETRAX_LED1R) | (1 << CONFIG_ETRAX_LED2R), $r0
|
||||
btstq 16, $r1
|
||||
bpl 1f
|
||||
nop
|
||||
or.d $r0, $r2 ; set bit
|
||||
ba 2f
|
||||
nop
|
||||
1: not $r0 ; clear bit
|
||||
and.d $r0, $r2
|
||||
2:
|
||||
#ifdef CONFIG_ETRAX_PA_LEDS
|
||||
move.b $r2, [R_PORT_PA_DATA]
|
||||
#endif
|
||||
#ifdef CONFIG_ETRAX_PB_LEDS
|
||||
move.b $r2, [R_PORT_PB_DATA]
|
||||
#endif
|
||||
#endif
|
||||
|
||||
;; check if we got something on the serial port
|
||||
|
||||
move.b [SERSTAT], $r0
|
||||
btstq 0, $r0 ; data_avail
|
||||
bpl wait_ser
|
||||
nop
|
||||
|
||||
;; got something - copy the byte and loop
|
||||
|
||||
move.b [SERRDAT], $r0
|
||||
move.b $r0, [$r3+]
|
||||
move.d TIMEOUT_VALUE, $r5 ; reset "timeout"
|
||||
subq 1, $r4 ; decrease length
|
||||
bne wait_ser
|
||||
nop
|
||||
jump_start:
|
||||
;; jump into downloaded code
|
||||
|
||||
jump CODE_START
|
||||
Loading…
Add table
Add a link
Reference in a new issue