]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'u-boot-ti/master' into 'u-boot-arm/master'
authorAlbert ARIBAUD <albert.u.boot@aribaud.net>
Fri, 16 May 2014 14:49:50 +0000 (16:49 +0200)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Fri, 16 May 2014 14:49:50 +0000 (16:49 +0200)
77 files changed:
arch/arm/cpu/arm1136/start.S
arch/arm/cpu/arm1176/start.S
arch/arm/cpu/arm720t/start.S
arch/arm/cpu/arm720t/tegra-common/cpu.c
arch/arm/cpu/arm720t/tegra30/cpu.c
arch/arm/cpu/arm920t/ep93xx/u-boot.lds
arch/arm/cpu/arm920t/start.S
arch/arm/cpu/arm926ejs/mxs/start.S
arch/arm/cpu/arm926ejs/spear/start.S
arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds
arch/arm/cpu/arm926ejs/start.S
arch/arm/cpu/arm946es/cpu.c
arch/arm/cpu/arm946es/start.S
arch/arm/cpu/arm_intcm/start.S
arch/arm/cpu/armv7/exynos/pinmux.c
arch/arm/cpu/armv7/socfpga/lowlevel_init.S
arch/arm/cpu/armv7/start.S
arch/arm/cpu/armv7/zynq/u-boot.lds
arch/arm/cpu/pxa/cpuinfo.c
arch/arm/cpu/pxa/start.S
arch/arm/cpu/sa1100/cpu.c
arch/arm/cpu/sa1100/start.S
arch/arm/cpu/tegra-common/pinmux-common.c
arch/arm/cpu/u-boot-spl.lds
arch/arm/cpu/u-boot.lds
arch/arm/dts/exynos4210-origen.dts
arch/arm/dts/exynos4210-trats.dts
arch/arm/dts/exynos4210-universal_c210.dts
arch/arm/dts/exynos4412-trats2.dts
arch/arm/include/asm/arch-exynos/cpu.h
arch/arm/include/asm/arch-exynos/gpio.h
arch/arm/include/asm/arch-s5pc1xx/gpio.h
arch/arm/include/asm/arch-tegra/gpio.h
arch/arm/include/asm/arch-tegra/pinmux.h
arch/arm/include/asm/arch-tegra/tegra_mmc.h
arch/arm/include/asm/arch-tegra114/pinmux.h
arch/arm/include/asm/arch-tegra124/pinmux.h
arch/arm/include/asm/arch-tegra20/pinmux.h
arch/arm/include/asm/arch-tegra30/pinmux.h
arch/arm/lib/Makefile
arch/arm/lib/cache.c
arch/arm/lib/vectors.S [new file with mode: 0644]
board/compulab/cm_t335/u-boot.lds
board/freescale/mx31ads/u-boot.lds
board/nvidia/jetson-tk1/jetson-tk1.c
board/nvidia/jetson-tk1/pinmux-config-jetson-tk1.h
board/nvidia/venice2/pinmux-config-venice2.h
board/nvidia/venice2/venice2.c
board/samsung/arndale/arndale.c
board/samsung/common/misc.c
board/samsung/goni/goni.c
board/samsung/smdk5250/exynos5-dt.c
board/samsung/smdk5250/smdk5250.c
board/samsung/smdk5420/smdk5420.c
board/samsung/smdkc100/smdkc100.c
board/samsung/smdkv310/smdkv310.c
board/samsung/trats/trats.c
board/samsung/trats2/trats2.c
board/samsung/universal_c210/universal.c
board/ti/am335x/u-boot.lds
boards.cfg
drivers/gpio/s5p_gpio.c
drivers/gpio/tegra_gpio.c
drivers/mmc/tegra_mmc.c
include/configs/beaver.h
include/configs/cardhu.h
include/configs/exynos5-dt.h
include/configs/s5p_goni.h
include/configs/s5pc210_universal.h
include/configs/smdk5250.h
include/configs/smdk5420.h
include/configs/smdkv310.h
include/configs/snow.h
include/configs/tegra-common.h
include/configs/trats.h
include/configs/trats2.h
include/samsung/misc.h

index 3e2358e132b0d37af789da5d7b2004df4c1070b7..1cfcca9fa6d3cb32355d628982d959f351f409c2 100644 (file)
 #include <asm-offsets.h>
 #include <config.h>
 #include <version.h>
-.globl _start
-_start: b      reset
-#ifdef CONFIG_SPL_BUILD
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
 
-_hang:
-       .word   do_hang
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678      /* now 16*4=64 */
-#else
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-
-_undefined_instruction: .word undefined_instruction
-_software_interrupt:   .word software_interrupt
-_prefetch_abort:       .word prefetch_abort
-_data_abort:           .word data_abort
-_not_used:             .word not_used
-_irq:                  .word irq
-_fiq:                  .word fiq
-_pad:                  .word 0x12345678 /* now 16*4=64 */
-#endif /* CONFIG_SPL_BUILD */
-.global _end_vect
-_end_vect:
-
-       .balignl 16,0xdeadbeef
 /*
  *************************************************************************
  *
@@ -70,26 +29,7 @@ _end_vect:
  *************************************************************************
  */
 
-#ifdef CONFIG_USE_IRQ
-/* IRQ stack memory (calculated at run-time) */
-.globl IRQ_STACK_START
-IRQ_STACK_START:
-       .word   0x0badc0de
-
-/* IRQ stack memory (calculated at run-time) */
-.globl FIQ_STACK_START
-FIQ_STACK_START:
-       .word 0x0badc0de
-#endif
-
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
-
-/*
- * the actual reset code
- */
+       .globl  reset
 
 reset:
        /*
@@ -152,195 +92,3 @@ cpu_init_crit:
        mov     lr, ip          /* restore link */
        mov     pc, lr          /* back to my caller */
 #endif /* CONFIG_SKIP_LOWLEVEL_INIT */
-
-#ifndef CONFIG_SPL_BUILD
-/*
- *************************************************************************
- *
- * Interrupt handling
- *
- *************************************************************************
- */
-@
-@ IRQ stack frame.
-@
-#define S_FRAME_SIZE   72
-
-#define S_OLD_R0       68
-#define S_PSR          64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-#define MODE_SVC 0x13
-#define I_BIT   0x80
-
-/*
- * use bad_save_user_regs for abort/prefetch/undef/swi ...
- * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
- */
-
-       .macro  bad_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE           @ carve out a frame on current user stack
-       stmia   sp, {r0 - r12}                  @ Save user registers (now in svc mode) r0-r12
-
-       ldr     r2, IRQ_STACK_START_IN          @ set base 2 words into abort stack
-       ldmia   r2, {r2 - r3}                   @ get values for "aborted" pc and cpsr (into parm regs)
-       add     r0, sp, #S_FRAME_SIZE           @ grab pointer to old stack
-
-       add     r5, sp, #S_SP
-       mov     r1, lr
-       stmia   r5, {r0 - r3}                   @ save sp_SVC, lr_SVC, pc, cpsr
-       mov     r0, sp                          @ save current stack into r0 (param register)
-       .endm
-
-       .macro  irq_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       add     r8, sp, #S_PC                   @ !!!! R8 NEEDS to be saved !!!! a reserved stack spot would be good.
-       stmdb   r8, {sp, lr}^                   @ Calling SP, LR
-       str     lr, [r8, #0]                    @ Save calling PC
-       mrs     r6, spsr
-       str     r6, [r8, #4]                    @ Save CPSR
-       str     r0, [r8, #8]                    @ Save OLD_R0
-       mov     r0, sp
-       .endm
-
-       .macro  irq_restore_user_regs
-       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
-       mov     r0, r0
-       ldr     lr, [sp, #S_PC]                 @ Get PC
-       add     sp, sp, #S_FRAME_SIZE
-       subs    pc, lr, #4                      @ return & move spsr_svc into cpsr
-       .endm
-
-       .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack (enter in banked mode)
-
-       str     lr, [r13]                       @ save caller lr in position 0 of saved stack
-       mrs     lr, spsr                        @ get the spsr
-       str     lr, [r13, #4]                   @ save spsr in position 1 of saved stack
-
-       mov     r13, #MODE_SVC                  @ prepare SVC-Mode
-       @ msr   spsr_c, r13
-       msr     spsr, r13                       @ switch modes, make sure moves will execute
-       mov     lr, pc                          @ capture return pc
-       movs    pc, lr                          @ jump to next instruction & switch modes.
-       .endm
-
-       .macro get_bad_stack_swi
-       sub     r13, r13, #4                    @ space on current stack for scratch reg.
-       str     r0, [r13]                       @ save R0's value.
-       ldr     r0, IRQ_STACK_START_IN          @ get data regions start
-       str     lr, [r0]                        @ save caller lr in position 0 of saved stack
-       mrs     lr, spsr                        @ get the spsr
-       str     lr, [r0, #4]                    @ save spsr in position 1 of saved stack
-       ldr     lr, [r0]                        @ restore lr
-       ldr     r0, [r13]                       @ restore r0
-       add     r13, r13, #4                    @ pop stack entry
-       .endm
-
-       .macro get_irq_stack                    @ setup IRQ stack
-       ldr     sp, IRQ_STACK_START
-       .endm
-
-       .macro get_fiq_stack                    @ setup FIQ stack
-       ldr     sp, FIQ_STACK_START
-       .endm
-#endif /* CONFIG_SPL_BUILD */
-
-/*
- * exception handlers
- */
-#ifdef CONFIG_SPL_BUILD
-       .align  5
-do_hang:
-       bl      hang                            /* hang and never return */
-#else  /* !CONFIG_SPL_BUILD */
-       .align  5
-undefined_instruction:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_undefined_instruction
-
-       .align  5
-software_interrupt:
-       get_bad_stack_swi
-       bad_save_user_regs
-       bl      do_software_interrupt
-
-       .align  5
-prefetch_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_prefetch_abort
-
-       .align  5
-data_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_data_abort
-
-       .align  5
-not_used:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_not_used
-
-#ifdef CONFIG_USE_IRQ
-
-       .align  5
-irq:
-       get_irq_stack
-       irq_save_user_regs
-       bl      do_irq
-       irq_restore_user_regs
-
-       .align  5
-fiq:
-       get_fiq_stack
-       /* someone ought to write a more effiction fiq_save_user_regs */
-       irq_save_user_regs
-       bl      do_fiq
-       irq_restore_user_regs
-
-#else
-
-       .align  5
-irq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_irq
-
-       .align  5
-fiq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_fiq
-
-#endif
-       .align 5
-.global arm1136_cache_flush
-arm1136_cache_flush:
-#if !defined(CONFIG_SYS_ICACHE_OFF)
-               mcr     p15, 0, r1, c7, c5, 0   @ invalidate I cache
-#endif
-#if !defined(CONFIG_SYS_DCACHE_OFF)
-               mcr     p15, 0, r1, c7, c14, 0  @ invalidate D cache
-#endif
-               mov     pc, lr                  @ back to caller
-#endif /* CONFIG_SPL_BUILD */
index ce620115d4d2963a2a5886d5e38244a901efffae..0704bdde27e07b944510f7ac9b3739c63f5fbb83 100644 (file)
 #define CONFIG_SYS_PHY_UBOOT_BASE      CONFIG_SYS_UBOOT_BASE
 #endif
 
-/*
- *************************************************************************
- *
- * Jump vector table as in table 3.1 in [1]
- *
- *************************************************************************
- */
-
-.globl _start
-_start: b      reset
-#ifndef CONFIG_SPL_BUILD
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-
-_undefined_instruction:
-       .word undefined_instruction
-_software_interrupt:
-       .word software_interrupt
-_prefetch_abort:
-       .word prefetch_abort
-_data_abort:
-       .word data_abort
-_not_used:
-       .word not_used
-_irq:
-       .word irq
-_fiq:
-       .word fiq
-_pad:
-       .word 0x12345678 /* now 16*4=64 */
-#else
-       . = _start + 64
-#endif
-
-.global _end_vect
-_end_vect:
-       .balignl 16,0xdeadbeef
 /*
  *************************************************************************
  *
@@ -77,14 +35,7 @@ _end_vect:
  *************************************************************************
  */
 
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
-
-/*
- * the actual reset code
- */
+       .globl reset
 
 reset:
        /*
@@ -182,150 +133,3 @@ skip_tcmdisable:
 c_runtime_cpu_setup:
 
        mov     pc, lr
-
-#ifndef CONFIG_SPL_BUILD
-/*
- *************************************************************************
- *
- * Interrupt handling
- *
- *************************************************************************
- */
-@
-@ IRQ stack frame.
-@
-#define S_FRAME_SIZE   72
-
-#define S_OLD_R0       68
-#define S_PSR          64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-#define MODE_SVC 0x13
-#define I_BIT   0x80
-
-/*
- * use bad_save_user_regs for abort/prefetch/undef/swi ...
- */
-
-       .macro  bad_save_user_regs
-       /* carve out a frame on current user stack */
-       sub     sp, sp, #S_FRAME_SIZE
-       /* Save user registers (now in svc mode) r0-r12 */
-       stmia   sp, {r0 - r12}
-
-       ldr     r2, IRQ_STACK_START_IN
-       /* get values for "aborted" pc and cpsr (into parm regs) */
-       ldmia   r2, {r2 - r3}
-       /* grab pointer to old stack */
-       add     r0, sp, #S_FRAME_SIZE
-
-       add     r5, sp, #S_SP
-       mov     r1, lr
-       /* save sp_SVC, lr_SVC, pc, cpsr */
-       stmia   r5, {r0 - r3}
-       /* save current stack into r0 (param register) */
-       mov     r0, sp
-       .endm
-
-       .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack
-
-       /* save caller lr in position 0 of saved stack */
-       str     lr, [r13]
-       /* get the spsr */
-       mrs     lr, spsr
-       /* save spsr in position 1 of saved stack */
-       str     lr, [r13, #4]
-
-       /* prepare SVC-Mode */
-       mov     r13, #MODE_SVC
-       @ msr   spsr_c, r13
-       /* switch modes, make sure moves will execute */
-       msr     spsr, r13
-       /* capture return pc */
-       mov     lr, pc
-       /* jump to next instruction & switch modes. */
-       movs    pc, lr
-       .endm
-
-       .macro get_bad_stack_swi
-       /* space on current stack for scratch reg. */
-       sub     r13, r13, #4
-       /* save R0's value. */
-       str     r0, [r13]
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack
-       /* save caller lr in position 0 of saved stack */
-       str     lr, [r0]
-       /* get the spsr */
-       mrs     lr, spsr
-       /* save spsr in position 1 of saved stack */
-       str     lr, [r0, #4]
-       /* restore lr */
-       ldr     lr, [r0]
-       /* restore r0 */
-       ldr     r0, [r13]
-       /* pop stack entry */
-       add     r13, r13, #4
-       .endm
-
-/*
- * exception handlers
- */
-       .align  5
-undefined_instruction:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_undefined_instruction
-
-       .align  5
-software_interrupt:
-       get_bad_stack_swi
-       bad_save_user_regs
-       bl      do_software_interrupt
-
-       .align  5
-prefetch_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_prefetch_abort
-
-       .align  5
-data_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_data_abort
-
-       .align  5
-not_used:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_not_used
-
-       .align  5
-irq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_irq
-
-       .align  5
-fiq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_fiq
-#endif /* CONFIG_SPL_BUILD */
index 1a34842690358c3c485f0d08dbc30d8a134a188b..01c85be64b1a5861628459fee3deab99fb868a81 100644 (file)
 #include <version.h>
 #include <asm/hardware.h>
 
-/*
- *************************************************************************
- *
- * Jump vector table as in table 3.1 in [1]
- *
- *************************************************************************
- */
-
-
-.globl _start
-_start: b      reset
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-
-#ifdef CONFIG_SPL_BUILD
-_undefined_instruction: .word _undefined_instruction
-_software_interrupt:   .word _software_interrupt
-_prefetch_abort:       .word _prefetch_abort
-_data_abort:           .word _data_abort
-_not_used:             .word _not_used
-_irq:                  .word _irq
-_fiq:                  .word _fiq
-_pad:                  .word 0x12345678 /* now 16*4=64 */
-#else
-_undefined_instruction: .word undefined_instruction
-_software_interrupt:   .word software_interrupt
-_prefetch_abort:       .word prefetch_abort
-_data_abort:           .word data_abort
-_not_used:             .word not_used
-_irq:                  .word irq
-_fiq:                  .word fiq
-_pad:                  .word 0x12345678 /* now 16*4=64 */
-#endif /* CONFIG_SPL_BUILD */
-
-       .balignl 16,0xdeadbeef
-
-
 /*
  *************************************************************************
  *
@@ -67,26 +25,7 @@ _pad:                        .word 0x12345678 /* now 16*4=64 */
  *************************************************************************
  */
 
-#ifdef CONFIG_USE_IRQ
-/* IRQ stack memory (calculated at run-time) */
-.globl IRQ_STACK_START
-IRQ_STACK_START:
-       .word   0x0badc0de
-
-/* IRQ stack memory (calculated at run-time) */
-.globl FIQ_STACK_START
-FIQ_STACK_START:
-       .word 0x0badc0de
-#endif
-
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
-
-/*
- * the actual reset code
- */
+       .globl  reset
 
 reset:
        /*
@@ -139,169 +78,3 @@ cpu_init_crit:
 
        mov     pc, lr
 #endif /* CONFIG_SKIP_LOWLEVEL_INIT */
-
-
-#ifndef CONFIG_SPL_BUILD
-/*
- *************************************************************************
- *
- * Interrupt handling
- *
- *************************************************************************
- */
-
-@
-@ IRQ stack frame.
-@
-#define S_FRAME_SIZE   72
-
-#define S_OLD_R0       68
-#define S_PSR          64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-#define MODE_SVC 0x13
-#define I_BIT   0x80
-
-/*
- * use bad_save_user_regs for abort/prefetch/undef/swi ...
- * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
- */
-
-       .macro  bad_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       add     r8, sp, #S_PC
-
-       ldr     r2, IRQ_STACK_START_IN
-       ldmia   r2, {r2 - r4}                   @ get pc, cpsr, old_r0
-       add     r0, sp, #S_FRAME_SIZE           @ restore sp_SVC
-
-       add     r5, sp, #S_SP
-       mov     r1, lr
-       stmia   r5, {r0 - r4}                   @ save sp_SVC, lr_SVC, pc, cpsr, old_r
-       mov     r0, sp
-       .endm
-
-       .macro  irq_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       add     r8, sp, #S_PC
-       stmdb   r8, {sp, lr}^                   @ Calling SP, LR
-       str     lr, [r8, #0]                    @ Save calling PC
-       mrs     r6, spsr
-       str     r6, [r8, #4]                    @ Save CPSR
-       str     r0, [r8, #8]                    @ Save OLD_R0
-       mov     r0, sp
-       .endm
-
-       .macro  irq_restore_user_regs
-       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
-       mov     r0, r0
-       ldr     lr, [sp, #S_PC]                 @ Get PC
-       add     sp, sp, #S_FRAME_SIZE
-       subs    pc, lr, #4                      @ return & move spsr_svc into cpsr
-       .endm
-
-       .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack
-
-       str     lr, [r13]                       @ save caller lr / spsr
-       mrs     lr, spsr
-       str     lr, [r13, #4]
-
-       mov     r13, #MODE_SVC                  @ prepare SVC-Mode
-       msr     spsr_c, r13
-       mov     lr, pc
-       movs    pc, lr
-       .endm
-
-       .macro get_irq_stack                    @ setup IRQ stack
-       ldr     sp, IRQ_STACK_START
-       .endm
-
-       .macro get_fiq_stack                    @ setup FIQ stack
-       ldr     sp, FIQ_STACK_START
-       .endm
-
-/*
- * exception handlers
- */
-       .align  5
-undefined_instruction:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_undefined_instruction
-
-       .align  5
-software_interrupt:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_software_interrupt
-
-       .align  5
-prefetch_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_prefetch_abort
-
-       .align  5
-data_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_data_abort
-
-       .align  5
-not_used:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_not_used
-
-#ifdef CONFIG_USE_IRQ
-
-       .align  5
-irq:
-       get_irq_stack
-       irq_save_user_regs
-       bl      do_irq
-       irq_restore_user_regs
-
-       .align  5
-fiq:
-       get_fiq_stack
-       /* someone ought to write a more effiction fiq_save_user_regs */
-       irq_save_user_regs
-       bl      do_fiq
-       irq_restore_user_regs
-
-#else
-
-       .align  5
-irq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_irq
-
-       .align  5
-fiq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_fiq
-
-#endif
-#endif /* CONFIG_SPL_BUILD */
index 168f525ec7c88417be358e162cb4f24ca6ed7864..c6f3b029a16e3b8c9a729cd2ac35b08a2d0a10a8 100644 (file)
@@ -82,7 +82,7 @@ struct clk_pll_table tegra_pll_x_table[TEGRA_SOC_CNT][CLOCK_OSC_FREQ_COUNT] = {
                { .n = 600, .m = 13, .p = 0, .cpcon = 12 }, /* OSC: 26.0 MHz */
        },
        /*
-        * T30: 1.4 GHz
+        * T30: 600 MHz
         *
         * Register   Field  Bits   Width
         * ------------------------------
@@ -92,10 +92,10 @@ struct clk_pll_table tegra_pll_x_table[TEGRA_SOC_CNT][CLOCK_OSC_FREQ_COUNT] = {
         * PLLX_MISC  cpcon  11: 8    4
         */
        {
-               { .n = 862, .m =  8, .p = 0, .cpcon = 8 }, /* OSC: 13.0 MHz */
-               { .n = 583, .m =  8, .p = 0, .cpcon = 4 }, /* OSC: 19.2 MHz */
-               { .n = 700, .m =  6, .p = 0, .cpcon = 8 }, /* OSC: 12.0 MHz */
-               { .n = 700, .m = 13, .p = 0, .cpcon = 8 }, /* OSC: 26.0 MHz */
+               { .n = 600, .m = 13, .p = 0, .cpcon = 8 }, /* OSC: 13.0 MHz */
+               { .n = 500, .m = 16, .p = 0, .cpcon = 8 }, /* OSC: 19.2 MHz */
+               { .n = 600, .m = 12, .p = 0, .cpcon = 8 }, /* OSC: 12.0 MHz */
+               { .n = 600, .m = 26, .p = 0, .cpcon = 8 }, /* OSC: 26.0 MHz */
        },
        /*
         * T114: 700 MHz
index a80648389c7cc14d1bf064aa93b04ea703a0d87e..9003902e3ff704c6244ff1cc0e804fd577c3ad1b 100644 (file)
@@ -41,10 +41,18 @@ void tegra_i2c_ll_write_data(uint data, uint config)
        writel(config, &reg->cnfg);
 }
 
+#define TPS62366A_I2C_ADDR             0xC0
+#define TPS62366A_SET1_REG             0x01
+#define TPS62366A_SET1_DATA            (0x4600 | TPS62366A_SET1_REG)
+
+#define TPS62361B_I2C_ADDR             0xC0
+#define TPS62361B_SET3_REG             0x03
+#define TPS62361B_SET3_DATA            (0x4600 | TPS62361B_SET3_REG)
+
 #define TPS65911_I2C_ADDR              0x5A
 #define TPS65911_VDDCTRL_OP_REG                0x28
 #define TPS65911_VDDCTRL_SR_REG                0x27
-#define TPS65911_VDDCTRL_OP_DATA       (0x2300 | TPS65911_VDDCTRL_OP_REG)
+#define TPS65911_VDDCTRL_OP_DATA       (0x2400 | TPS65911_VDDCTRL_OP_REG)
 #define TPS65911_VDDCTRL_SR_DATA       (0x0100 | TPS65911_VDDCTRL_SR_REG)
 #define I2C_SEND_2_BYTES               0x0A02
 
@@ -58,9 +66,20 @@ static void enable_cpu_power_rail(void)
        reg |= CPUPWRREQ_OE;
        writel(reg, &pmc->pmc_cntrl);
 
+       /* Set VDD_CORE to 1.200V. */
+#ifdef CONFIG_TEGRA_VDD_CORE_TPS62366A_SET1
+       tegra_i2c_ll_write_addr(TPS62366A_I2C_ADDR, 2);
+       tegra_i2c_ll_write_data(TPS62366A_SET1_DATA, I2C_SEND_2_BYTES);
+#endif
+#ifdef CONFIG_TEGRA_VDD_CORE_TPS62361B_SET3
+       tegra_i2c_ll_write_addr(TPS62361B_I2C_ADDR, 2);
+       tegra_i2c_ll_write_data(TPS62361B_SET3_DATA, I2C_SEND_2_BYTES);
+#endif
+       udelay(1000);
+
        /*
         * Bring up CPU VDD via the TPS65911x PMIC on the DVC I2C bus.
-        * First set VDD to 1.4V, then enable the VDD regulator.
+        * First set VDD to 1.0125V, then enable the VDD regulator.
         */
        tegra_i2c_ll_write_addr(TPS65911_I2C_ADDR, 2);
        tegra_i2c_ll_write_data(TPS65911_VDDCTRL_OP_DATA, I2C_SEND_2_BYTES);
index 96994043e438cf570e03cd09cde9ff807311dd35..623a635208c6b90761a269227cf7fae46c62e1c0 100644 (file)
@@ -16,7 +16,8 @@ SECTIONS
        .text      :
        {
                *(.__image_copy_start)
-         arch/arm/cpu/arm920t/start.o  (.text*)
+               *(.vectors)
+               arch/arm/cpu/arm920t/start.o    (.text*)
                /* the EP93xx expects to find the pattern 'CRUS' at 0x1000 */
          . = 0x1000;
          LONG(0x53555243)
index 7bf094aec133cae3738543e8b20a990cb376d5e6..07404502c829eb1ad4eb05cb602a41603fa37447 100644 (file)
 #include <common.h>
 #include <config.h>
 
-/*
- *************************************************************************
- *
- * Jump vector table as in table 3.1 in [1]
- *
- *************************************************************************
- */
-
-
-.globl _start
-_start:        b       start_code
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-
-_undefined_instruction:        .word undefined_instruction
-_software_interrupt:   .word software_interrupt
-_prefetch_abort:       .word prefetch_abort
-_data_abort:           .word data_abort
-_not_used:             .word not_used
-_irq:                  .word irq
-_fiq:                  .word fiq
-
-       .balignl 16,0xdeadbeef
-
-
 /*
  *************************************************************************
  *
@@ -55,28 +25,9 @@ _fiq:                        .word fiq
  *************************************************************************
  */
 
-#ifdef CONFIG_USE_IRQ
-/* IRQ stack memory (calculated at run-time) */
-.globl IRQ_STACK_START
-IRQ_STACK_START:
-       .word   0x0badc0de
-
-/* IRQ stack memory (calculated at run-time) */
-.globl FIQ_STACK_START
-FIQ_STACK_START:
-       .word 0x0badc0de
-#endif
-
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
+       .globl  reset
 
-/*
- * the actual start code
- */
-
-start_code:
+reset:
        /*
         * set the cpu to SVC32 mode
         */
@@ -196,166 +147,3 @@ cpu_init_crit:
        mov     lr, ip
        mov     pc, lr
 #endif /* CONFIG_SKIP_LOWLEVEL_INIT */
-
-/*
- *************************************************************************
- *
- * Interrupt handling
- *
- *************************************************************************
- */
-
-@
-@ IRQ stack frame.
-@
-#define S_FRAME_SIZE   72
-
-#define S_OLD_R0       68
-#define S_PSR          64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-#define MODE_SVC       0x13
-#define I_BIT          0x80
-
-/*
- * use bad_save_user_regs for abort/prefetch/undef/swi ...
- * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
- */
-
-       .macro  bad_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       ldr     r2, IRQ_STACK_START_IN
-       ldmia   r2, {r2 - r3}                   @ get pc, cpsr
-       add     r0, sp, #S_FRAME_SIZE           @ restore sp_SVC
-
-       add     r5, sp, #S_SP
-       mov     r1, lr
-       stmia   r5, {r0 - r3}                   @ save sp_SVC, lr_SVC, pc, cpsr
-       mov     r0, sp
-       .endm
-
-       .macro  irq_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       add     r7, sp, #S_PC
-       stmdb   r7, {sp, lr}^                   @ Calling SP, LR
-       str     lr, [r7, #0]                    @ Save calling PC
-       mrs     r6, spsr
-       str     r6, [r7, #4]                    @ Save CPSR
-       str     r0, [r7, #8]                    @ Save OLD_R0
-       mov     r0, sp
-       .endm
-
-       .macro  irq_restore_user_regs
-       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
-       mov     r0, r0
-       ldr     lr, [sp, #S_PC]                 @ Get PC
-       add     sp, sp, #S_FRAME_SIZE
-       /* return & move spsr_svc into cpsr */
-       subs    pc, lr, #4
-       .endm
-
-       .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack
-
-       str     lr, [r13]                       @ save caller lr / spsr
-       mrs     lr, spsr
-       str     lr, [r13, #4]
-
-       mov     r13, #MODE_SVC                  @ prepare SVC-Mode
-       @ msr   spsr_c, r13
-       msr     spsr, r13
-       mov     lr, pc
-       movs    pc, lr
-       .endm
-
-       .macro get_irq_stack                    @ setup IRQ stack
-       ldr     sp, IRQ_STACK_START
-       .endm
-
-       .macro get_fiq_stack                    @ setup FIQ stack
-       ldr     sp, FIQ_STACK_START
-       .endm
-
-/*
- * exception handlers
- */
-       .align  5
-undefined_instruction:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_undefined_instruction
-
-       .align  5
-software_interrupt:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_software_interrupt
-
-       .align  5
-prefetch_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_prefetch_abort
-
-       .align  5
-data_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_data_abort
-
-       .align  5
-not_used:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_not_used
-
-#ifdef CONFIG_USE_IRQ
-
-       .align  5
-irq:
-       get_irq_stack
-       irq_save_user_regs
-       bl      do_irq
-       irq_restore_user_regs
-
-       .align  5
-fiq:
-       get_fiq_stack
-       /* someone ought to write a more effiction fiq_save_user_regs */
-       irq_save_user_regs
-       bl      do_fiq
-       irq_restore_user_regs
-
-#else
-
-       .align  5
-irq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_irq
-
-       .align  5
-fiq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_fiq
-
-#endif
index 34a0fcb462f44539af65a13a8ce0b40e1ff79c99..9b60436539573848730f93f0374f43a0dd519170 100644 (file)
 #include <common.h>
 #include <version.h>
 
-/*
- *************************************************************************
- *
- * Jump vector table as in table 3.1 in [1]
- *
- *************************************************************************
- */
-
-
-.globl _start
-_start:
-       b       reset
-       b       undefined_instruction
-       b       software_interrupt
-       b       prefetch_abort
-       b       data_abort
-       b       not_used
-       b       irq
-       b       fiq
-
-/*
- * Vector table, located at address 0x20.
- * This table allows the code running AFTER SPL, the U-Boot, to install it's
- * interrupt handlers here. The problem is that the U-Boot is loaded into RAM,
- * including it's interrupt vectoring table and the table at 0x0 is still the
- * SPLs. So if interrupt happens in U-Boot, the SPLs interrupt vectoring table
- * is still used.
- */
-_vt_reset:
-       .word   _reset
-_vt_undefined_instruction:
-       .word   _hang
-_vt_software_interrupt:
-       .word   _hang
-_vt_prefetch_abort:
-       .word   _hang
-_vt_data_abort:
-       .word   _hang
-_vt_not_used:
-       .word   _reset
-_vt_irq:
-       .word   _hang
-_vt_fiq:
-       .word   _hang
-
-reset:
-       ldr     pc, _vt_reset
-undefined_instruction:
-       ldr     pc, _vt_undefined_instruction
-software_interrupt:
-       ldr     pc, _vt_software_interrupt
-prefetch_abort:
-       ldr     pc, _vt_prefetch_abort
-data_abort:
-       ldr     pc, _vt_data_abort
-not_used:
-       ldr     pc, _vt_not_used
-irq:
-       ldr     pc, _vt_irq
-fiq:
-       ldr     pc, _vt_fiq
-
-       .balignl 16,0xdeadbeef
-
 /*
  *************************************************************************
  *
@@ -101,28 +37,8 @@ fiq:
  *************************************************************************
  */
 
-#ifdef CONFIG_USE_IRQ
-/* IRQ stack memory (calculated at run-time) */
-.globl IRQ_STACK_START
-IRQ_STACK_START:
-       .word   0x0badc0de
-
-/* IRQ stack memory (calculated at run-time) */
-.globl FIQ_STACK_START
-FIQ_STACK_START:
-       .word 0x0badc0de
-#endif
-
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
-
-/*
- * the actual reset code
- */
-
-_reset:
+       .globl  reset
+reset:
        /*
         * If the CPU is configured in "Wait JTAG connection mode", the stack
         * pointer is not configured and is zero. This will cause crash when
@@ -179,7 +95,3 @@ _reset:
        mov r0, #0
 
        bx      lr
-
-_hang:
-1:
-       bl      1b                              /* hang and never return */
index 7dbd5dbf99e8c6e216cc50e789ec7f103e0ecaea..290ac2e5617dc19cb93bf2d197d633bb02de02d6 100644 (file)
 
 #include <config.h>
 
-.globl _start
-_start:
-       b       reset
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-
-_undefined_instruction:
-_software_interrupt:
-_prefetch_abort:
-_data_abort:
-_not_used:
-_irq:
-_fiq:
-       .word infinite_loop
-
-infinite_loop:
-       b       infinite_loop
-
 /*
  *************************************************************************
  *
@@ -53,9 +30,7 @@ infinite_loop:
  *************************************************************************
  */
 
-/*
- * the actual reset code
- */
+       .globl  reset
 
 reset:
 /*
index b6d0f65b66b4f69ec540b023e2f4b36a27c9402d..c7ee19912f86f0e374473a32270befc2701b973b 100644 (file)
@@ -21,6 +21,7 @@ SECTIONS
        . = ALIGN(4);
        .text   :
        {
+               *(.vectors)
                arch/arm/cpu/arm926ejs/spear/start.o    (.text*)
                *(.text*)
        }
index 0717327050d06200a2871da2bcccfb290a45d1d7..8eb249475e473bbbca5888fd61d9cb1aa9dbb7ae 100644 (file)
 #include <common.h>
 #include <version.h>
 
-/*
- *************************************************************************
- *
- * Jump vector table as in table 3.1 in [1]
- *
- *************************************************************************
- */
-
-
-#ifdef CONFIG_SYS_DV_NOR_BOOT_CFG
-.globl _start
-_start:
-.globl _NOR_BOOT_CFG
-_NOR_BOOT_CFG:
-       .word   CONFIG_SYS_DV_NOR_BOOT_CFG
-       b       reset
-#else
-.globl _start
-_start:
-       b       reset
-#endif
-#ifdef CONFIG_SPL_BUILD
-/* No exception handlers in preloader */
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-
-_hang:
-       .word   do_hang
-/* pad to 64 byte boundary */
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-#else
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-
-_undefined_instruction:
-       .word undefined_instruction
-_software_interrupt:
-       .word software_interrupt
-_prefetch_abort:
-       .word prefetch_abort
-_data_abort:
-       .word data_abort
-_not_used:
-       .word not_used
-_irq:
-       .word irq
-_fiq:
-       .word fiq
-
-#endif /* CONFIG_SPL_BUILD */
-       .balignl 16,0xdeadbeef
-
-
 /*
  *************************************************************************
  *
@@ -102,26 +33,7 @@ _fiq:
  *************************************************************************
  */
 
-#ifdef CONFIG_USE_IRQ
-/* IRQ stack memory (calculated at run-time) */
-.globl IRQ_STACK_START
-IRQ_STACK_START:
-       .word   0x0badc0de
-
-/* IRQ stack memory (calculated at run-time) */
-.globl FIQ_STACK_START
-FIQ_STACK_START:
-       .word 0x0badc0de
-#endif
-
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
-
-/*
- * the actual reset code
- */
+       .globl  reset
 
 reset:
        /*
@@ -198,175 +110,3 @@ flush_dcache:
        mov     lr, ip          /* restore link */
        mov     pc, lr          /* back to my caller */
 #endif /* CONFIG_SKIP_LOWLEVEL_INIT */
-
-#ifndef CONFIG_SPL_BUILD
-/*
- *************************************************************************
- *
- * Interrupt handling
- *
- *************************************************************************
- */
-
-@
-@ IRQ stack frame.
-@
-#define S_FRAME_SIZE   72
-
-#define S_OLD_R0       68
-#define S_PSR          64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-#define MODE_SVC 0x13
-#define I_BIT   0x80
-
-/*
- * use bad_save_user_regs for abort/prefetch/undef/swi ...
- * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
- */
-
-       .macro  bad_save_user_regs
-       @ carve out a frame on current user stack
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}  @ Save user registers (now in svc mode) r0-r12
-       ldr     r2, IRQ_STACK_START_IN
-       @ get values for "aborted" pc and cpsr (into parm regs)
-       ldmia   r2, {r2 - r3}
-       add     r0, sp, #S_FRAME_SIZE           @ grab pointer to old stack
-       add     r5, sp, #S_SP
-       mov     r1, lr
-       stmia   r5, {r0 - r3}   @ save sp_SVC, lr_SVC, pc, cpsr
-       mov     r0, sp          @ save current stack into r0 (param register)
-       .endm
-
-       .macro  irq_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       @ !!!! R8 NEEDS to be saved !!!! a reserved stack spot would be good.
-       add     r8, sp, #S_PC
-       stmdb   r8, {sp, lr}^           @ Calling SP, LR
-       str     lr, [r8, #0]            @ Save calling PC
-       mrs     r6, spsr
-       str     r6, [r8, #4]            @ Save CPSR
-       str     r0, [r8, #8]            @ Save OLD_R0
-       mov     r0, sp
-       .endm
-
-       .macro  irq_restore_user_regs
-       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
-       mov     r0, r0
-       ldr     lr, [sp, #S_PC]                 @ Get PC
-       add     sp, sp, #S_FRAME_SIZE
-       subs    pc, lr, #4              @ return & move spsr_svc into cpsr
-       .endm
-
-       .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack
-
-       str     lr, [r13]       @ save caller lr in position 0 of saved stack
-       mrs     lr, spsr        @ get the spsr
-       str     lr, [r13, #4]   @ save spsr in position 1 of saved stack
-       mov     r13, #MODE_SVC  @ prepare SVC-Mode
-       @ msr   spsr_c, r13
-       msr     spsr, r13       @ switch modes, make sure moves will execute
-       mov     lr, pc          @ capture return pc
-       movs    pc, lr          @ jump to next instruction & switch modes.
-       .endm
-
-       .macro get_irq_stack                    @ setup IRQ stack
-       ldr     sp, IRQ_STACK_START
-       .endm
-
-       .macro get_fiq_stack                    @ setup FIQ stack
-       ldr     sp, FIQ_STACK_START
-       .endm
-#endif /* CONFIG_SPL_BUILD */
-
-/*
- * exception handlers
- */
-#ifdef CONFIG_SPL_BUILD
-       .align  5
-do_hang:
-1:
-       bl      1b                              /* hang and never return */
-#else  /* !CONFIG_SPL_BUILD */
-       .align  5
-undefined_instruction:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_undefined_instruction
-
-       .align  5
-software_interrupt:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_software_interrupt
-
-       .align  5
-prefetch_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_prefetch_abort
-
-       .align  5
-data_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_data_abort
-
-       .align  5
-not_used:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_not_used
-
-#ifdef CONFIG_USE_IRQ
-
-       .align  5
-irq:
-       get_irq_stack
-       irq_save_user_regs
-       bl      do_irq
-       irq_restore_user_regs
-
-       .align  5
-fiq:
-       get_fiq_stack
-       /* someone ought to write a more effiction fiq_save_user_regs */
-       irq_save_user_regs
-       bl      do_fiq
-       irq_restore_user_regs
-
-#else
-
-       .align  5
-irq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_irq
-
-       .align  5
-fiq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_fiq
-
-#endif
-#endif /* CONFIG_SPL_BUILD */
index 0c8d92d737a28f59a597ebf82310d7b5ea9e2f4f..e20e5a89aa407d01282d307fa8a27f720cc983f6 100644 (file)
@@ -16,6 +16,7 @@
 #include <common.h>
 #include <command.h>
 #include <asm/system.h>
+#include <asm/io.h>
 
 static void cache_flush(void);
 
@@ -51,3 +52,15 @@ static void cache_flush (void)
        asm ("mcr p15, 0, %0, c7, c5, 0": :"r" (i));
        asm ("mcr p15, 0, %0, c7, c6, 0": :"r" (i));
 }
+
+#ifndef CONFIG_INTEGRATOR
+
+__attribute__((noreturn)) void reset_cpu(ulong addr __attribute__((unused)))
+{
+       writew(0x0, 0xfffece10);
+       writew(0x8, 0xfffece10);
+       for (;;)
+               ;
+}
+
+#endif /* #ifdef CONFIG_INTEGRATOR */
index 7d5014583626db38228f533913687c4e6df55b7f..41123716a7430c702d8d80749f9dc9cc69ec7301 100644 (file)
 #include <config.h>
 #include <version.h>
 
-/*
- *************************************************************************
- *
- * Jump vector table as in table 3.1 in [1]
- *
- *************************************************************************
- */
-
-
-.globl _start
-_start:
-       b       reset
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-
-_undefined_instruction:
-       .word undefined_instruction
-_software_interrupt:
-       .word software_interrupt
-_prefetch_abort:
-       .word prefetch_abort
-_data_abort:
-       .word data_abort
-_not_used:
-       .word not_used
-_irq:
-       .word irq
-_fiq:
-       .word fiq
-
-       .balignl 16,0xdeadbeef
-
-_vectors_end:
-
 /*
  *************************************************************************
  *
@@ -71,26 +32,7 @@ _vectors_end:
  *************************************************************************
  */
 
-#ifdef CONFIG_USE_IRQ
-/* IRQ stack memory (calculated at run-time) */
-.globl IRQ_STACK_START
-IRQ_STACK_START:
-       .word   0x0badc0de
-
-/* IRQ stack memory (calculated at run-time) */
-.globl FIQ_STACK_START
-FIQ_STACK_START:
-       .word 0x0badc0de
-#endif
-
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
-
-/*
- * the actual reset code
- */
+       .globl  reset
 
 reset:
        /*
@@ -157,189 +99,3 @@ cpu_init_crit:
        mov     lr, ip          /* restore link */
        mov     pc, lr          /* back to my caller */
 #endif
-/*
- *************************************************************************
- *
- * Interrupt handling
- *
- *************************************************************************
- */
-
-@
-@ IRQ stack frame.
-@
-#define S_FRAME_SIZE   72
-
-#define S_OLD_R0       68
-#define S_PSR          64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-#define MODE_SVC 0x13
-#define I_BIT   0x80
-
-/*
- * use bad_save_user_regs for abort/prefetch/undef/swi ...
- * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
- */
-
-       .macro  bad_save_user_regs
-       @ carve out a frame on current user stack
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}  @ Save user registers (now in svc mode) r0-r12
-
-       ldr     r2, IRQ_STACK_START_IN
-       @ get values for "aborted" pc and cpsr (into parm regs)
-       ldmia   r2, {r2 - r3}
-       add     r0, sp, #S_FRAME_SIZE           @ grab pointer to old stack
-       add     r5, sp, #S_SP
-       mov     r1, lr
-       stmia   r5, {r0 - r3}   @ save sp_SVC, lr_SVC, pc, cpsr
-       mov     r0, sp          @ save current stack into r0 (param register)
-       .endm
-
-       .macro  irq_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       @ !!!! R8 NEEDS to be saved !!!! a reserved stack spot would be good.
-       add     r8, sp, #S_PC
-       stmdb   r8, {sp, lr}^           @ Calling SP, LR
-       str     lr, [r8, #0]            @ Save calling PC
-       mrs     r6, spsr
-       str     r6, [r8, #4]            @ Save CPSR
-       str     r0, [r8, #8]            @ Save OLD_R0
-       mov     r0, sp
-       .endm
-
-       .macro  irq_restore_user_regs
-       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
-       mov     r0, r0
-       ldr     lr, [sp, #S_PC]                 @ Get PC
-       add     sp, sp, #S_FRAME_SIZE
-       subs    pc, lr, #4              @ return & move spsr_svc into cpsr
-       .endm
-
-       .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack
-
-       str     lr, [r13]       @ save caller lr in position 0 of saved stack
-       mrs     lr, spsr        @ get the spsr
-       str     lr, [r13, #4]   @ save spsr in position 1 of saved stack
-       mov     r13, #MODE_SVC  @ prepare SVC-Mode
-       @ msr   spsr_c, r13
-       msr     spsr, r13       @ switch modes, make sure moves will execute
-       mov     lr, pc          @ capture return pc
-       movs    pc, lr          @ jump to next instruction & switch modes.
-       .endm
-
-       .macro get_irq_stack                    @ setup IRQ stack
-       ldr     sp, IRQ_STACK_START
-       .endm
-
-       .macro get_fiq_stack                    @ setup FIQ stack
-       ldr     sp, FIQ_STACK_START
-       .endm
-
-/*
- * exception handlers
- */
-       .align  5
-undefined_instruction:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_undefined_instruction
-
-       .align  5
-software_interrupt:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_software_interrupt
-
-       .align  5
-prefetch_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_prefetch_abort
-
-       .align  5
-data_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_data_abort
-
-       .align  5
-not_used:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_not_used
-
-#ifdef CONFIG_USE_IRQ
-
-       .align  5
-irq:
-       get_irq_stack
-       irq_save_user_regs
-       bl      do_irq
-       irq_restore_user_regs
-
-       .align  5
-fiq:
-       get_fiq_stack
-       /* someone ought to write a more effiction fiq_save_user_regs */
-       irq_save_user_regs
-       bl      do_fiq
-       irq_restore_user_regs
-
-#else
-
-       .align  5
-irq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_irq
-
-       .align  5
-fiq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_fiq
-
-#endif
-
-# ifdef CONFIG_INTEGRATOR
-
-       /* Satisfied by general board level routine */
-
-#else
-
-       .align  5
-.globl reset_cpu
-reset_cpu:
-
-       ldr     r1, rstctl1     /* get clkm1 reset ctl */
-       mov     r3, #0x0
-       strh    r3, [r1]        /* clear it */
-       mov     r3, #0x8
-       strh    r3, [r1]        /* force dsp+arm reset */
-_loop_forever:
-       b       _loop_forever
-
-rstctl1:
-       .word   0xfffece10
-
-#endif /* #ifdef CONFIG_INTEGRATOR */
index 7404ea734816b9d7e7c5dd4acfe6342bc2071dac..c0c07b6a11a1038f331a68a02f05e60ce07a3362 100644 (file)
 #include <config.h>
 #include <version.h>
 
-/*
- *************************************************************************
- *
- * Jump vector table
- *
- *************************************************************************
- */
-
-.globl _start
-_start:
-       b       reset
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-
-_undefined_instruction:
-       .word undefined_instruction
-_software_interrupt:
-       .word software_interrupt
-_prefetch_abort:
-       .word prefetch_abort
-_data_abort:
-       .word data_abort
-_not_used:
-       .word not_used
-_irq:
-       .word irq
-_fiq:
-       .word fiq
-
-       .balignl 16,0xdeadbeef
-
 /*
  *************************************************************************
  *
@@ -67,26 +31,7 @@ _fiq:
  *************************************************************************
  */
 
-#ifdef CONFIG_USE_IRQ
-/* IRQ stack memory (calculated at run-time) */
-.globl IRQ_STACK_START
-IRQ_STACK_START:
-       .word   0x0badc0de
-
-/* IRQ stack memory (calculated at run-time) */
-.globl FIQ_STACK_START
-FIQ_STACK_START:
-       .word 0x0badc0de
-#endif
-
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
-
-/*
- * the actual reset code
- */
+       .globl  reset
 
 reset:
        /*
@@ -132,174 +77,3 @@ cpu_init_crit:
         */
        mov     pc, lr          /* back to my caller */
 #endif
-/*
- *************************************************************************
- *
- * Interrupt handling
- *
- *************************************************************************
- */
-
-@
-@ IRQ stack frame.
-@
-#define S_FRAME_SIZE   72
-
-#define S_OLD_R0       68
-#define S_PSR          64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-#define MODE_SVC 0x13
-#define I_BIT   0x80
-
-/*
- * use bad_save_user_regs for abort/prefetch/undef/swi ...
- * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
- */
-
-       .macro  bad_save_user_regs
-       @ carve out a frame on current user stack
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}  @ Save user registers (now in svc mode) r0-r12
-
-       ldr     r2, IRQ_STACK_START_IN
-       @ get values for "aborted" pc and cpsr (into parm regs)
-       ldmia   r2, {r2 - r3}
-       add     r0, sp, #S_FRAME_SIZE           @ grab pointer to old stack
-       add     r5, sp, #S_SP
-       mov     r1, lr
-       stmia   r5, {r0 - r3}   @ save sp_SVC, lr_SVC, pc, cpsr
-       mov     r0, sp          @ save current stack into r0 (param register)
-       .endm
-
-       .macro  irq_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       @ !!!! R8 NEEDS to be saved !!!! a reserved stack spot would be good.
-       add     r8, sp, #S_PC
-       stmdb   r8, {sp, lr}^           @ Calling SP, LR
-       str     lr, [r8, #0]            @ Save calling PC
-       mrs     r6, spsr
-       str     r6, [r8, #4]            @ Save CPSR
-       str     r0, [r8, #8]            @ Save OLD_R0
-       mov     r0, sp
-       .endm
-
-       .macro  irq_restore_user_regs
-       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
-       mov     r0, r0
-       ldr     lr, [sp, #S_PC]                 @ Get PC
-       add     sp, sp, #S_FRAME_SIZE
-       subs    pc, lr, #4              @ return & move spsr_svc into cpsr
-       .endm
-
-       .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack
-
-       str     lr, [r13]       @ save caller lr in position 0 of saved stack
-       mrs     lr, spsr        @ get the spsr
-       str     lr, [r13, #4]   @ save spsr in position 1 of saved stack
-       mov     r13, #MODE_SVC  @ prepare SVC-Mode
-       @ msr   spsr_c, r13
-       msr     spsr, r13       @ switch modes, make sure moves will execute
-       mov     lr, pc          @ capture return pc
-       movs    pc, lr          @ jump to next instruction & switch modes.
-       .endm
-
-       .macro get_irq_stack                    @ setup IRQ stack
-       ldr     sp, IRQ_STACK_START
-       .endm
-
-       .macro get_fiq_stack                    @ setup FIQ stack
-       ldr     sp, FIQ_STACK_START
-       .endm
-
-/*
- * exception handlers
- */
-       .align  5
-.globl undefined_instruction
-undefined_instruction:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_undefined_instruction
-
-       .align  5
-.globl software_interrupt
-software_interrupt:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_software_interrupt
-
-       .align  5
-.globl prefetch_abort
-prefetch_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_prefetch_abort
-
-       .align  5
-.globl data_abort
-data_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_data_abort
-
-       .align  5
-.globl not_used
-not_used:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_not_used
-
-#ifdef CONFIG_USE_IRQ
-       .align  5
-.globl irq
-irq:
-       get_irq_stack
-       irq_save_user_regs
-       bl      do_irq
-       irq_restore_user_regs
-
-       .align  5
-.globl fiq
-fiq:
-       get_fiq_stack
-       /* someone ought to write a more effiction fiq_save_user_regs */
-       irq_save_user_regs
-       bl      do_fiq
-       irq_restore_user_regs
-
-#else
-
-       .align  5
-.globl irq
-irq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_irq
-
-       .align  5
-.globl fiq
-fiq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_fiq
-
-#endif
index 9edb47502c411b4b6f500e25ffca6a6753d579de..ee7c2e5a4be5b755cc38d434a12204868630a263 100644 (file)
 
 static void exynos5_uart_config(int peripheral)
 {
-       struct exynos5_gpio_part1 *gpio1 =
-               (struct exynos5_gpio_part1 *) samsung_get_base_gpio_part1();
-       struct s5p_gpio_bank *bank;
        int i, start, count;
 
        switch (peripheral) {
        case PERIPH_ID_UART0:
-               bank = &gpio1->a0;
-               start = 0;
+               start = EXYNOS5_GPIO_A00;
                count = 4;
                break;
        case PERIPH_ID_UART1:
-               bank = &gpio1->d0;
-               start = 0;
+               start = EXYNOS5_GPIO_D00;
                count = 4;
                break;
        case PERIPH_ID_UART2:
-               bank = &gpio1->a1;
-               start = 0;
+               start = EXYNOS5_GPIO_A10;
                count = 4;
                break;
        case PERIPH_ID_UART3:
-               bank = &gpio1->a1;
-               start = 4;
+               start = EXYNOS5_GPIO_A14;
                count = 2;
                break;
        default:
@@ -44,37 +37,30 @@ static void exynos5_uart_config(int peripheral)
                return;
        }
        for (i = start; i < start + count; i++) {
-               s5p_gpio_set_pull(bank, i, GPIO_PULL_NONE);
-               s5p_gpio_cfg_pin(bank, i, GPIO_FUNC(0x2));
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
+               gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
        }
 }
 
 static void exynos5420_uart_config(int peripheral)
 {
-       struct exynos5420_gpio_part1 *gpio1 =
-               (struct exynos5420_gpio_part1 *)samsung_get_base_gpio_part1();
-       struct s5p_gpio_bank *bank;
        int i, start, count;
 
        switch (peripheral) {
        case PERIPH_ID_UART0:
-               bank = &gpio1->a0;
-               start = 0;
+               start = EXYNOS5420_GPIO_A00;
                count = 4;
                break;
        case PERIPH_ID_UART1:
-               bank = &gpio1->a0;
-               start = 4;
+               start = EXYNOS5420_GPIO_A04;
                count = 4;
                break;
        case PERIPH_ID_UART2:
-               bank = &gpio1->a1;
-               start = 0;
+               start = EXYNOS5420_GPIO_A10;
                count = 4;
                break;
        case PERIPH_ID_UART3:
-               bank = &gpio1->a1;
-               start = 4;
+               start = EXYNOS5420_GPIO_A14;
                count = 2;
                break;
        default:
@@ -83,64 +69,59 @@ static void exynos5420_uart_config(int peripheral)
        }
 
        for (i = start; i < start + count; i++) {
-               s5p_gpio_set_pull(bank, i, GPIO_PULL_NONE);
-               s5p_gpio_cfg_pin(bank, i, GPIO_FUNC(0x2));
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
+               gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
        }
 }
 
 static int exynos5_mmc_config(int peripheral, int flags)
 {
-       struct exynos5_gpio_part1 *gpio1 =
-               (struct exynos5_gpio_part1 *) samsung_get_base_gpio_part1();
-       struct s5p_gpio_bank *bank, *bank_ext;
-       int i, start = 0, gpio_func = 0;
+       int i, start, start_ext, gpio_func = 0;
 
        switch (peripheral) {
        case PERIPH_ID_SDMMC0:
-               bank = &gpio1->c0;
-               bank_ext = &gpio1->c1;
-               start = 0;
-               gpio_func = GPIO_FUNC(0x2);
+               start = EXYNOS5_GPIO_C00;
+               start_ext = EXYNOS5_GPIO_C10;
+               gpio_func = S5P_GPIO_FUNC(0x2);
                break;
        case PERIPH_ID_SDMMC1:
-               bank = &gpio1->c2;
-               bank_ext = NULL;
+               start = EXYNOS5_GPIO_C20;
+               start_ext = 0;
                break;
        case PERIPH_ID_SDMMC2:
-               bank = &gpio1->c3;
-               bank_ext = &gpio1->c4;
-               start = 3;
-               gpio_func = GPIO_FUNC(0x3);
+               start = EXYNOS5_GPIO_C30;
+               start_ext = EXYNOS5_GPIO_C43;
+               gpio_func = S5P_GPIO_FUNC(0x3);
                break;
        case PERIPH_ID_SDMMC3:
-               bank = &gpio1->c4;
-               bank_ext = NULL;
+               start = EXYNOS5_GPIO_C40;
+               start_ext = 0;
                break;
        default:
                debug("%s: invalid peripheral %d", __func__, peripheral);
                return -1;
        }
-       if ((flags & PINMUX_FLAG_8BIT_MODE) && !bank_ext) {
+       if ((flags & PINMUX_FLAG_8BIT_MODE) && !start_ext) {
                debug("SDMMC device %d does not support 8bit mode",
                                peripheral);
                return -1;
        }
        if (flags & PINMUX_FLAG_8BIT_MODE) {
-               for (i = start; i <= (start + 3); i++) {
-                       s5p_gpio_cfg_pin(bank_ext, i, gpio_func);
-                       s5p_gpio_set_pull(bank_ext, i, GPIO_PULL_UP);
-                       s5p_gpio_set_drv(bank_ext, i, GPIO_DRV_4X);
+               for (i = start_ext; i <= (start_ext + 3); i++) {
+                       gpio_cfg_pin(i, gpio_func);
+                       gpio_set_pull(i, S5P_GPIO_PULL_UP);
+                       gpio_set_drv(i, S5P_GPIO_DRV_4X);
                }
        }
-       for (i = 0; i < 2; i++) {
-               s5p_gpio_cfg_pin(bank, i, GPIO_FUNC(0x2));
-               s5p_gpio_set_pull(bank, i, GPIO_PULL_NONE);
-               s5p_gpio_set_drv(bank, i, GPIO_DRV_4X);
+       for (i = start; i < (start + 2); i++) {
+               gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
+               gpio_set_drv(i, S5P_GPIO_DRV_4X);
        }
-       for (i = 3; i <= 6; i++) {
-               s5p_gpio_cfg_pin(bank, i, GPIO_FUNC(0x2));
-               s5p_gpio_set_pull(bank, i, GPIO_PULL_UP);
-               s5p_gpio_set_drv(bank, i, GPIO_DRV_4X);
+       for (i = (start + 3); i <= (start + 6); i++) {
+               gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
+               gpio_set_pull(i, S5P_GPIO_PULL_UP);
+               gpio_set_drv(i, S5P_GPIO_DRV_4X);
        }
 
        return 0;
@@ -148,26 +129,20 @@ static int exynos5_mmc_config(int peripheral, int flags)
 
 static int exynos5420_mmc_config(int peripheral, int flags)
 {
-       struct exynos5420_gpio_part3 *gpio3 =
-               (struct exynos5420_gpio_part3 *)samsung_get_base_gpio_part3();
-       struct s5p_gpio_bank *bank = NULL, *bank_ext = NULL;
-       int i, start;
+       int i, start = 0, start_ext = 0;
 
        switch (peripheral) {
        case PERIPH_ID_SDMMC0:
-               bank = &gpio3->c0;
-               bank_ext = &gpio3->c3;
-               start = 0;
+               start = EXYNOS5420_GPIO_C00;
+               start_ext = EXYNOS5420_GPIO_C30;
                break;
        case PERIPH_ID_SDMMC1:
-               bank = &gpio3->c1;
-               bank_ext = &gpio3->d1;
-               start = 4;
+               start = EXYNOS5420_GPIO_C10;
+               start_ext = EXYNOS5420_GPIO_D14;
                break;
        case PERIPH_ID_SDMMC2:
-               bank = &gpio3->c2;
-               bank_ext = NULL;
-               start = 0;
+               start = EXYNOS5420_GPIO_C20;
+               start_ext = 0;
                break;
        default:
                start = 0;
@@ -175,41 +150,41 @@ static int exynos5420_mmc_config(int peripheral, int flags)
                return -1;
        }
 
-       if ((flags & PINMUX_FLAG_8BIT_MODE) && !bank_ext) {
+       if ((flags & PINMUX_FLAG_8BIT_MODE) && !start_ext) {
                debug("SDMMC device %d does not support 8bit mode",
                      peripheral);
                return -1;
        }
 
        if (flags & PINMUX_FLAG_8BIT_MODE) {
-               for (i = start; i <= (start + 3); i++) {
-                       s5p_gpio_cfg_pin(bank_ext, i, GPIO_FUNC(0x2));
-                       s5p_gpio_set_pull(bank_ext, i, GPIO_PULL_UP);
-                       s5p_gpio_set_drv(bank_ext, i, GPIO_DRV_4X);
+               for (i = start_ext; i <= (start_ext + 3); i++) {
+                       gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
+                       gpio_set_pull(i, S5P_GPIO_PULL_UP);
+                       gpio_set_drv(i, S5P_GPIO_DRV_4X);
                }
        }
 
-       for (i = 0; i < 3; i++) {
+       for (i = start; i < (start + 3); i++) {
                /*
                 * MMC0 is intended to be used for eMMC. The
                 * card detect pin is used as a VDDEN signal to
                 * power on the eMMC. The 5420 iROM makes
                 * this same assumption.
                 */
-               if ((peripheral == PERIPH_ID_SDMMC0) && (i == 2)) {
-                       s5p_gpio_set_value(bank, i, 1);
-                       s5p_gpio_cfg_pin(bank, i, GPIO_OUTPUT);
+               if ((peripheral == PERIPH_ID_SDMMC0) && (i == (start + 2))) {
+                       gpio_set_value(i, 1);
+                       gpio_cfg_pin(i, S5P_GPIO_OUTPUT);
                } else {
-                       s5p_gpio_cfg_pin(bank, i, GPIO_FUNC(0x2));
+                       gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
                }
-               s5p_gpio_set_pull(bank, i, GPIO_PULL_NONE);
-               s5p_gpio_set_drv(bank, i, GPIO_DRV_4X);
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
+               gpio_set_drv(i, S5P_GPIO_DRV_4X);
        }
 
-       for (i = 3; i <= 6; i++) {
-               s5p_gpio_cfg_pin(bank, i, GPIO_FUNC(0x2));
-               s5p_gpio_set_pull(bank, i, GPIO_PULL_UP);
-               s5p_gpio_set_drv(bank, i, GPIO_DRV_4X);
+       for (i = (start + 3); i <= (start + 6); i++) {
+               gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
+               gpio_set_pull(i, S5P_GPIO_PULL_UP);
+               gpio_set_drv(i, S5P_GPIO_DRV_4X);
        }
 
        return 0;
@@ -217,8 +192,6 @@ static int exynos5420_mmc_config(int peripheral, int flags)
 
 static void exynos5_sromc_config(int flags)
 {
-       struct exynos5_gpio_part1 *gpio1 =
-               (struct exynos5_gpio_part1 *) samsung_get_base_gpio_part1();
        int i;
 
        /*
@@ -236,13 +209,13 @@ static void exynos5_sromc_config(int flags)
         * GPY1[2]      SROM_WAIT(2)
         * GPY1[3]      EBI_DATA_RDn(2)
         */
-       s5p_gpio_cfg_pin(&gpio1->y0, (flags & PINMUX_FLAG_BANK),
-                               GPIO_FUNC(2));
-       s5p_gpio_cfg_pin(&gpio1->y0, 4, GPIO_FUNC(2));
-       s5p_gpio_cfg_pin(&gpio1->y0, 5, GPIO_FUNC(2));
+       gpio_cfg_pin(EXYNOS5_GPIO_Y00 + (flags & PINMUX_FLAG_BANK),
+                    S5P_GPIO_FUNC(2));
+       gpio_cfg_pin(EXYNOS5_GPIO_Y04, S5P_GPIO_FUNC(2));
+       gpio_cfg_pin(EXYNOS5_GPIO_Y05, S5P_GPIO_FUNC(2));
 
        for (i = 0; i < 4; i++)
-               s5p_gpio_cfg_pin(&gpio1->y1, i, GPIO_FUNC(2));
+               gpio_cfg_pin(EXYNOS5_GPIO_Y10 + i, S5P_GPIO_FUNC(2));
 
        /*
         * EBI: 8 Addrss Lines
@@ -277,108 +250,101 @@ static void exynos5_sromc_config(int flags)
         * GPY6[7]      EBI_DATA[15](2)
         */
        for (i = 0; i < 8; i++) {
-               s5p_gpio_cfg_pin(&gpio1->y3, i, GPIO_FUNC(2));
-               s5p_gpio_set_pull(&gpio1->y3, i, GPIO_PULL_UP);
+               gpio_cfg_pin(EXYNOS5_GPIO_Y30 + i, S5P_GPIO_FUNC(2));
+               gpio_set_pull(EXYNOS5_GPIO_Y30 + i, S5P_GPIO_PULL_UP);
 
-               s5p_gpio_cfg_pin(&gpio1->y5, i, GPIO_FUNC(2));
-               s5p_gpio_set_pull(&gpio1->y5, i, GPIO_PULL_UP);
+               gpio_cfg_pin(EXYNOS5_GPIO_Y50 + i, S5P_GPIO_FUNC(2));
+               gpio_set_pull(EXYNOS5_GPIO_Y50 + i, S5P_GPIO_PULL_UP);
 
-               s5p_gpio_cfg_pin(&gpio1->y6, i, GPIO_FUNC(2));
-               s5p_gpio_set_pull(&gpio1->y6, i, GPIO_PULL_UP);
+               gpio_cfg_pin(EXYNOS5_GPIO_Y60 + i, S5P_GPIO_FUNC(2));
+               gpio_set_pull(EXYNOS5_GPIO_Y60 + i, S5P_GPIO_PULL_UP);
        }
 }
 
 static void exynos5_i2c_config(int peripheral, int flags)
 {
-
-       struct exynos5_gpio_part1 *gpio1 =
-               (struct exynos5_gpio_part1 *) samsung_get_base_gpio_part1();
-
        switch (peripheral) {
        case PERIPH_ID_I2C0:
-               s5p_gpio_cfg_pin(&gpio1->b3, 0, GPIO_FUNC(0x2));
-               s5p_gpio_cfg_pin(&gpio1->b3, 1, GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5_GPIO_B30, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5_GPIO_B31, S5P_GPIO_FUNC(0x2));
                break;
        case PERIPH_ID_I2C1:
-               s5p_gpio_cfg_pin(&gpio1->b3, 2, GPIO_FUNC(0x2));
-               s5p_gpio_cfg_pin(&gpio1->b3, 3, GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5_GPIO_B32, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5_GPIO_B33, S5P_GPIO_FUNC(0x2));
                break;
        case PERIPH_ID_I2C2:
-               s5p_gpio_cfg_pin(&gpio1->a0, 6, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->a0, 7, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5_GPIO_A06, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5_GPIO_A07, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C3:
-               s5p_gpio_cfg_pin(&gpio1->a1, 2, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->a1, 3, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5_GPIO_A12, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5_GPIO_A13, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C4:
-               s5p_gpio_cfg_pin(&gpio1->a2, 0, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->a2, 1, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5_GPIO_A20, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5_GPIO_A21, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C5:
-               s5p_gpio_cfg_pin(&gpio1->a2, 2, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->a2, 3, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5_GPIO_A22, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5_GPIO_A23, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C6:
-               s5p_gpio_cfg_pin(&gpio1->b1, 3, GPIO_FUNC(0x4));
-               s5p_gpio_cfg_pin(&gpio1->b1, 4, GPIO_FUNC(0x4));
+               gpio_cfg_pin(EXYNOS5_GPIO_B13, S5P_GPIO_FUNC(0x4));
+               gpio_cfg_pin(EXYNOS5_GPIO_B14, S5P_GPIO_FUNC(0x4));
                break;
        case PERIPH_ID_I2C7:
-               s5p_gpio_cfg_pin(&gpio1->b2, 2, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->b2, 3, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5_GPIO_B22, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5_GPIO_B23, S5P_GPIO_FUNC(0x3));
                break;
        }
 }
 
 static void exynos5420_i2c_config(int peripheral)
 {
-       struct exynos5420_gpio_part1 *gpio1 =
-               (struct exynos5420_gpio_part1 *)samsung_get_base_gpio_part1();
-
        switch (peripheral) {
        case PERIPH_ID_I2C0:
-               s5p_gpio_cfg_pin(&gpio1->b3, 0, GPIO_FUNC(0x2));
-               s5p_gpio_cfg_pin(&gpio1->b3, 1, GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B30, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B31, S5P_GPIO_FUNC(0x2));
                break;
        case PERIPH_ID_I2C1:
-               s5p_gpio_cfg_pin(&gpio1->b3, 2, GPIO_FUNC(0x2));
-               s5p_gpio_cfg_pin(&gpio1->b3, 3, GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B32, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B33, S5P_GPIO_FUNC(0x2));
                break;
        case PERIPH_ID_I2C2:
-               s5p_gpio_cfg_pin(&gpio1->a0, 6, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->a0, 7, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5420_GPIO_A06, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5420_GPIO_A07, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C3:
-               s5p_gpio_cfg_pin(&gpio1->a1, 2, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->a1, 3, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5420_GPIO_A12, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5420_GPIO_A13, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C4:
-               s5p_gpio_cfg_pin(&gpio1->a2, 0, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->a2, 1, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5420_GPIO_A20, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5420_GPIO_A21, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C5:
-               s5p_gpio_cfg_pin(&gpio1->a2, 2, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->a2, 3, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5420_GPIO_A22, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5420_GPIO_A23, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C6:
-               s5p_gpio_cfg_pin(&gpio1->b1, 3, GPIO_FUNC(0x4));
-               s5p_gpio_cfg_pin(&gpio1->b1, 4, GPIO_FUNC(0x4));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B13, S5P_GPIO_FUNC(0x4));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B14, S5P_GPIO_FUNC(0x4));
                break;
        case PERIPH_ID_I2C7:
-               s5p_gpio_cfg_pin(&gpio1->b2, 2, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->b2, 3, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B22, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B23, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C8:
-               s5p_gpio_cfg_pin(&gpio1->b3, 4, GPIO_FUNC(0x2));
-               s5p_gpio_cfg_pin(&gpio1->b3, 5, GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B34, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B35, S5P_GPIO_FUNC(0x2));
                break;
        case PERIPH_ID_I2C9:
-               s5p_gpio_cfg_pin(&gpio1->b3, 6, GPIO_FUNC(0x2));
-               s5p_gpio_cfg_pin(&gpio1->b3, 7, GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B36, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B37, S5P_GPIO_FUNC(0x2));
                break;
        case PERIPH_ID_I2C10:
-               s5p_gpio_cfg_pin(&gpio1->b4, 0, GPIO_FUNC(0x2));
-               s5p_gpio_cfg_pin(&gpio1->b4, 1, GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B40, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS5420_GPIO_B41, S5P_GPIO_FUNC(0x2));
                break;
        }
 }
@@ -386,19 +352,15 @@ static void exynos5420_i2c_config(int peripheral)
 static void exynos5_i2s_config(int peripheral)
 {
        int i;
-       struct exynos5_gpio_part1 *gpio1 =
-               (struct exynos5_gpio_part1 *)samsung_get_base_gpio_part1();
-       struct exynos5_gpio_part4 *gpio4 =
-               (struct exynos5_gpio_part4 *)samsung_get_base_gpio_part4();
 
        switch (peripheral) {
        case PERIPH_ID_I2S0:
                for (i = 0; i < 5; i++)
-                       s5p_gpio_cfg_pin(&gpio4->z, i, GPIO_FUNC(0x02));
+                       gpio_cfg_pin(EXYNOS5_GPIO_Z0 + i, S5P_GPIO_FUNC(0x02));
                break;
        case PERIPH_ID_I2S1:
                for (i = 0; i < 5; i++)
-                       s5p_gpio_cfg_pin(&gpio1->b0, i, GPIO_FUNC(0x02));
+                       gpio_cfg_pin(EXYNOS5_GPIO_B00 + i, S5P_GPIO_FUNC(0x02));
                break;
        }
 }
@@ -406,75 +368,57 @@ static void exynos5_i2s_config(int peripheral)
 void exynos5_spi_config(int peripheral)
 {
        int cfg = 0, pin = 0, i;
-       struct s5p_gpio_bank *bank = NULL;
-       struct exynos5_gpio_part1 *gpio1 =
-               (struct exynos5_gpio_part1 *) samsung_get_base_gpio_part1();
-       struct exynos5_gpio_part2 *gpio2 =
-               (struct exynos5_gpio_part2 *) samsung_get_base_gpio_part2();
 
        switch (peripheral) {
        case PERIPH_ID_SPI0:
-               bank = &gpio1->a2;
-               cfg = GPIO_FUNC(0x2);
-               pin = 0;
+               cfg = S5P_GPIO_FUNC(0x2);
+               pin = EXYNOS5_GPIO_A20;
                break;
        case PERIPH_ID_SPI1:
-               bank = &gpio1->a2;
-               cfg = GPIO_FUNC(0x2);
-               pin = 4;
+               cfg = S5P_GPIO_FUNC(0x2);
+               pin = EXYNOS5_GPIO_A24;
                break;
        case PERIPH_ID_SPI2:
-               bank = &gpio1->b1;
-               cfg = GPIO_FUNC(0x5);
-               pin = 1;
+               cfg = S5P_GPIO_FUNC(0x5);
+               pin = EXYNOS5_GPIO_B11;
                break;
        case PERIPH_ID_SPI3:
-               bank = &gpio2->f1;
-               cfg = GPIO_FUNC(0x2);
-               pin = 0;
+               cfg = S5P_GPIO_FUNC(0x2);
+               pin = EXYNOS5_GPIO_F10;
                break;
        case PERIPH_ID_SPI4:
                for (i = 0; i < 2; i++) {
-                       s5p_gpio_cfg_pin(&gpio2->f0, i + 2, GPIO_FUNC(0x4));
-                       s5p_gpio_cfg_pin(&gpio2->e0, i + 4, GPIO_FUNC(0x4));
+                       gpio_cfg_pin(EXYNOS5_GPIO_F02 + i, S5P_GPIO_FUNC(0x4));
+                       gpio_cfg_pin(EXYNOS5_GPIO_E04 + i, S5P_GPIO_FUNC(0x4));
                }
                break;
        }
        if (peripheral != PERIPH_ID_SPI4) {
                for (i = pin; i < pin + 4; i++)
-                       s5p_gpio_cfg_pin(bank, i, cfg);
+                       gpio_cfg_pin(i, cfg);
        }
 }
 
 void exynos5420_spi_config(int peripheral)
 {
        int cfg, pin, i;
-       struct s5p_gpio_bank *bank = NULL;
-       struct exynos5420_gpio_part1 *gpio1 =
-               (struct exynos5420_gpio_part1 *)samsung_get_base_gpio_part1();
-       struct exynos5420_gpio_part4 *gpio4 =
-               (struct exynos5420_gpio_part4 *)samsung_get_base_gpio_part4();
 
        switch (peripheral) {
        case PERIPH_ID_SPI0:
-               bank = &gpio1->a2;
-               cfg = GPIO_FUNC(0x2);
-               pin = 0;
+               pin = EXYNOS5420_GPIO_A20;
+               cfg = S5P_GPIO_FUNC(0x2);
                break;
        case PERIPH_ID_SPI1:
-               bank = &gpio1->a2;
-               cfg = GPIO_FUNC(0x2);
-               pin = 4;
+               pin = EXYNOS5420_GPIO_A24;
+               cfg = S5P_GPIO_FUNC(0x2);
                break;
        case PERIPH_ID_SPI2:
-               bank = &gpio1->b1;
-               cfg = GPIO_FUNC(0x5);
-               pin = 1;
+               pin = EXYNOS5420_GPIO_B11;
+               cfg = S5P_GPIO_FUNC(0x5);
                break;
        case PERIPH_ID_SPI3:
-               bank = &gpio4->f1;
-               cfg = GPIO_FUNC(0x2);
-               pin = 0;
+               pin = EXYNOS5420_GPIO_F10;
+               cfg = S5P_GPIO_FUNC(0x2);
                break;
        case PERIPH_ID_SPI4:
                cfg = 0;
@@ -489,11 +433,13 @@ void exynos5420_spi_config(int peripheral)
 
        if (peripheral != PERIPH_ID_SPI4) {
                for (i = pin; i < pin + 4; i++)
-                       s5p_gpio_cfg_pin(bank, i, cfg);
+                       gpio_cfg_pin(i, cfg);
        } else {
                for (i = 0; i < 2; i++) {
-                       s5p_gpio_cfg_pin(&gpio4->f0, i + 2, GPIO_FUNC(0x4));
-                       s5p_gpio_cfg_pin(&gpio4->e0, i + 4, GPIO_FUNC(0x4));
+                       gpio_cfg_pin(EXYNOS5420_GPIO_F02 + i,
+                                    S5P_GPIO_FUNC(0x4));
+                       gpio_cfg_pin(EXYNOS5420_GPIO_E04 + i,
+                                    S5P_GPIO_FUNC(0x4));
                }
        }
 }
@@ -588,76 +534,70 @@ static int exynos5420_pinmux_config(int peripheral, int flags)
 
 static void exynos4_i2c_config(int peripheral, int flags)
 {
-       struct exynos4_gpio_part1 *gpio1 =
-               (struct exynos4_gpio_part1 *) samsung_get_base_gpio_part1();
-
        switch (peripheral) {
        case PERIPH_ID_I2C0:
-               s5p_gpio_cfg_pin(&gpio1->d1, 0, GPIO_FUNC(0x2));
-               s5p_gpio_cfg_pin(&gpio1->d1, 1, GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS4_GPIO_D10, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS4_GPIO_D11, S5P_GPIO_FUNC(0x2));
                break;
        case PERIPH_ID_I2C1:
-               s5p_gpio_cfg_pin(&gpio1->d1, 2, GPIO_FUNC(0x2));
-               s5p_gpio_cfg_pin(&gpio1->d1, 3, GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS4_GPIO_D12, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS4_GPIO_D13, S5P_GPIO_FUNC(0x2));
                break;
        case PERIPH_ID_I2C2:
-               s5p_gpio_cfg_pin(&gpio1->a0, 6, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->a0, 7, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4_GPIO_A06, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4_GPIO_A07, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C3:
-               s5p_gpio_cfg_pin(&gpio1->a1, 2, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->a1, 3, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4_GPIO_A12, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4_GPIO_A13, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C4:
-               s5p_gpio_cfg_pin(&gpio1->b, 2, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->b, 3, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4_GPIO_B2, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4_GPIO_B3, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C5:
-               s5p_gpio_cfg_pin(&gpio1->b, 6, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->b, 7, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4_GPIO_B6, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4_GPIO_B7, S5P_GPIO_FUNC(0x3));
                break;
        case PERIPH_ID_I2C6:
-               s5p_gpio_cfg_pin(&gpio1->c1, 3, GPIO_FUNC(0x4));
-               s5p_gpio_cfg_pin(&gpio1->c1, 4, GPIO_FUNC(0x4));
+               gpio_cfg_pin(EXYNOS4_GPIO_C13, S5P_GPIO_FUNC(0x4));
+               gpio_cfg_pin(EXYNOS4_GPIO_C14, S5P_GPIO_FUNC(0x4));
                break;
        case PERIPH_ID_I2C7:
-               s5p_gpio_cfg_pin(&gpio1->d0, 2, GPIO_FUNC(0x3));
-               s5p_gpio_cfg_pin(&gpio1->d0, 3, GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4_GPIO_D02, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4_GPIO_D03, S5P_GPIO_FUNC(0x3));
                break;
        }
 }
 
 static int exynos4_mmc_config(int peripheral, int flags)
 {
-       struct exynos4_gpio_part2 *gpio2 =
-               (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
-       struct s5p_gpio_bank *bank, *bank_ext;
-       int i;
+       int i, start = 0, start_ext = 0;
 
        switch (peripheral) {
        case PERIPH_ID_SDMMC0:
-               bank = &gpio2->k0;
-               bank_ext = &gpio2->k1;
+               start = EXYNOS4_GPIO_K00;
+               start_ext = EXYNOS4_GPIO_K13;
                break;
        case PERIPH_ID_SDMMC2:
-               bank = &gpio2->k2;
-               bank_ext = &gpio2->k3;
+               start = EXYNOS4_GPIO_K20;
+               start_ext = EXYNOS4_GPIO_K33;
                break;
        default:
                return -1;
        }
-       for (i = 0; i < 7; i++) {
-               if (i == 2)
+       for (i = start; i < (start + 7); i++) {
+               if (i == (start + 2))
                        continue;
-               s5p_gpio_cfg_pin(bank, i,  GPIO_FUNC(0x2));
-               s5p_gpio_set_pull(bank, i, GPIO_PULL_NONE);
-               s5p_gpio_set_drv(bank, i, GPIO_DRV_4X);
+               gpio_cfg_pin(i,  S5P_GPIO_FUNC(0x2));
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
+               gpio_set_drv(i, S5P_GPIO_DRV_4X);
        }
        if (flags & PINMUX_FLAG_8BIT_MODE) {
-               for (i = 3; i < 7; i++) {
-                       s5p_gpio_cfg_pin(bank_ext, i,  GPIO_FUNC(0x3));
-                       s5p_gpio_set_pull(bank_ext, i, GPIO_PULL_NONE);
-                       s5p_gpio_set_drv(bank_ext, i, GPIO_DRV_4X);
+               for (i = start_ext; i < (start_ext + 4); i++) {
+                       gpio_cfg_pin(i,  S5P_GPIO_FUNC(0x3));
+                       gpio_set_pull(i, S5P_GPIO_PULL_NONE);
+                       gpio_set_drv(i, S5P_GPIO_DRV_4X);
                }
        }
 
@@ -666,41 +606,138 @@ static int exynos4_mmc_config(int peripheral, int flags)
 
 static void exynos4_uart_config(int peripheral)
 {
-       struct exynos4_gpio_part1 *gpio1 =
-               (struct exynos4_gpio_part1 *)samsung_get_base_gpio_part1();
-       struct s5p_gpio_bank *bank;
        int i, start, count;
 
        switch (peripheral) {
        case PERIPH_ID_UART0:
-               bank = &gpio1->a0;
-               start = 0;
+               start = EXYNOS4_GPIO_A00;
                count = 4;
                break;
        case PERIPH_ID_UART1:
-               bank = &gpio1->a0;
-               start = 4;
+               start = EXYNOS4_GPIO_A04;
                count = 4;
                break;
        case PERIPH_ID_UART2:
-               bank = &gpio1->a1;
-               start = 0;
+               start = EXYNOS4_GPIO_A10;
                count = 4;
                break;
        case PERIPH_ID_UART3:
-               bank = &gpio1->a1;
-               start = 4;
+               start = EXYNOS4_GPIO_A14;
                count = 2;
                break;
        default:
                debug("%s: invalid peripheral %d", __func__, peripheral);
                return;
        }
-       for (i = start; i < start + count; i++) {
-               s5p_gpio_set_pull(bank, i, GPIO_PULL_NONE);
-               s5p_gpio_cfg_pin(bank, i, GPIO_FUNC(0x2));
+       for (i = start; i < (start + count); i++) {
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
+               gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
+       }
+}
+
+static void exynos4x12_i2c_config(int peripheral, int flags)
+{
+       switch (peripheral) {
+       case PERIPH_ID_I2C0:
+               gpio_cfg_pin(EXYNOS4X12_GPIO_D10, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS4X12_GPIO_D11, S5P_GPIO_FUNC(0x2));
+               break;
+       case PERIPH_ID_I2C1:
+               gpio_cfg_pin(EXYNOS4X12_GPIO_D12, S5P_GPIO_FUNC(0x2));
+               gpio_cfg_pin(EXYNOS4X12_GPIO_D13, S5P_GPIO_FUNC(0x2));
+               break;
+       case PERIPH_ID_I2C2:
+               gpio_cfg_pin(EXYNOS4X12_GPIO_A06, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4X12_GPIO_A07, S5P_GPIO_FUNC(0x3));
+               break;
+       case PERIPH_ID_I2C3:
+               gpio_cfg_pin(EXYNOS4X12_GPIO_A12, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4X12_GPIO_A13, S5P_GPIO_FUNC(0x3));
+               break;
+       case PERIPH_ID_I2C4:
+               gpio_cfg_pin(EXYNOS4X12_GPIO_B2, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4X12_GPIO_B3, S5P_GPIO_FUNC(0x3));
+               break;
+       case PERIPH_ID_I2C5:
+               gpio_cfg_pin(EXYNOS4X12_GPIO_B6, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4X12_GPIO_B7, S5P_GPIO_FUNC(0x3));
+               break;
+       case PERIPH_ID_I2C6:
+               gpio_cfg_pin(EXYNOS4X12_GPIO_C13, S5P_GPIO_FUNC(0x4));
+               gpio_cfg_pin(EXYNOS4X12_GPIO_C14, S5P_GPIO_FUNC(0x4));
+               break;
+       case PERIPH_ID_I2C7:
+               gpio_cfg_pin(EXYNOS4X12_GPIO_D02, S5P_GPIO_FUNC(0x3));
+               gpio_cfg_pin(EXYNOS4X12_GPIO_D03, S5P_GPIO_FUNC(0x3));
+               break;
+       }
+}
+
+static int exynos4x12_mmc_config(int peripheral, int flags)
+{
+       int i, start = 0, start_ext = 0;
+
+       switch (peripheral) {
+       case PERIPH_ID_SDMMC0:
+               start = EXYNOS4X12_GPIO_K00;
+               start_ext = EXYNOS4X12_GPIO_K13;
+               break;
+       case PERIPH_ID_SDMMC2:
+               start = EXYNOS4X12_GPIO_K20;
+               start_ext = EXYNOS4X12_GPIO_K33;
+               break;
+       default:
+               return -1;
        }
+       for (i = start; i < (start + 7); i++) {
+               if (i == (start + 2))
+                       continue;
+               gpio_cfg_pin(i,  S5P_GPIO_FUNC(0x2));
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
+               gpio_set_drv(i, S5P_GPIO_DRV_4X);
+       }
+       if (flags & PINMUX_FLAG_8BIT_MODE) {
+               for (i = start_ext; i < (start_ext + 4); i++) {
+                       gpio_cfg_pin(i,  S5P_GPIO_FUNC(0x3));
+                       gpio_set_pull(i, S5P_GPIO_PULL_NONE);
+                       gpio_set_drv(i, S5P_GPIO_DRV_4X);
+               }
+       }
+
+       return 0;
 }
+
+static void exynos4x12_uart_config(int peripheral)
+{
+       int i, start, count;
+
+       switch (peripheral) {
+       case PERIPH_ID_UART0:
+               start = EXYNOS4X12_GPIO_A00;
+               count = 4;
+               break;
+       case PERIPH_ID_UART1:
+               start = EXYNOS4X12_GPIO_A04;
+               count = 4;
+               break;
+       case PERIPH_ID_UART2:
+               start = EXYNOS4X12_GPIO_A10;
+               count = 4;
+               break;
+       case PERIPH_ID_UART3:
+               start = EXYNOS4X12_GPIO_A14;
+               count = 2;
+               break;
+       default:
+               debug("%s: invalid peripheral %d", __func__, peripheral);
+               return;
+       }
+       for (i = start; i < (start + count); i++) {
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
+               gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
+       }
+}
+
 static int exynos4_pinmux_config(int peripheral, int flags)
 {
        switch (peripheral) {
@@ -736,6 +773,41 @@ static int exynos4_pinmux_config(int peripheral, int flags)
        return 0;
 }
 
+static int exynos4x12_pinmux_config(int peripheral, int flags)
+{
+       switch (peripheral) {
+       case PERIPH_ID_UART0:
+       case PERIPH_ID_UART1:
+       case PERIPH_ID_UART2:
+       case PERIPH_ID_UART3:
+               exynos4x12_uart_config(peripheral);
+               break;
+       case PERIPH_ID_I2C0:
+       case PERIPH_ID_I2C1:
+       case PERIPH_ID_I2C2:
+       case PERIPH_ID_I2C3:
+       case PERIPH_ID_I2C4:
+       case PERIPH_ID_I2C5:
+       case PERIPH_ID_I2C6:
+       case PERIPH_ID_I2C7:
+               exynos4x12_i2c_config(peripheral, flags);
+               break;
+       case PERIPH_ID_SDMMC0:
+       case PERIPH_ID_SDMMC2:
+               return exynos4x12_mmc_config(peripheral, flags);
+       case PERIPH_ID_SDMMC1:
+       case PERIPH_ID_SDMMC3:
+       case PERIPH_ID_SDMMC4:
+               debug("SDMMC device %d not implemented\n", peripheral);
+               return -1;
+       default:
+               debug("%s: invalid peripheral %d", __func__, peripheral);
+               return -1;
+       }
+
+       return 0;
+}
+
 int exynos_pinmux_config(int peripheral, int flags)
 {
        if (cpu_is_exynos5()) {
@@ -744,11 +816,14 @@ int exynos_pinmux_config(int peripheral, int flags)
                else if (proid_is_exynos5250())
                        return exynos5_pinmux_config(peripheral, flags);
        } else if (cpu_is_exynos4()) {
-               return exynos4_pinmux_config(peripheral, flags);
-       } else {
-               debug("pinmux functionality not supported\n");
+               if (proid_is_exynos4412())
+                       return exynos4x12_pinmux_config(peripheral, flags);
+               else
+                       return exynos4_pinmux_config(peripheral, flags);
        }
 
+       debug("pinmux functionality not supported\n");
+
        return -1;
 }
 
@@ -787,7 +862,7 @@ int pinmux_decode_periph_id(const void *blob, int node)
                return  exynos5_pinmux_decode_periph_id(blob, node);
        else if (cpu_is_exynos4())
                return  exynos4_pinmux_decode_periph_id(blob, node);
-       else
-               return PERIPH_ID_NONE;
+
+       return PERIPH_ID_NONE;
 }
 #endif
index 1caaa2759f3f3bfbe347e5f4c689fb78a429bf9a..2f2e9fcc7c89e4809e247bc61bb06bc968dcee35 100644 (file)
 /* Save the parameter pass in by previous boot loader */
 .global save_boot_params
 save_boot_params:
-       /* save the parameter here */
-
-       /*
-        * Setup stack for exception, which is located
-        * at the end of on-chip RAM. We don't expect exception prior to
-        * relocation and if that happens, we won't worry -- it will overide
-        * global data region as the code will goto reset. After relocation,
-        * this region won't be used by other part of program.
-        * Hence it is safe.
-        */
-       ldr     r0, =(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_RAM_SIZE)
-       ldr     r1, =IRQ_STACK_START_IN
-       str     r0, [r1]
-
+       /* no parameter to save */
        bx      lr
 
 
index 27be451a89d5d39eed7e9809c04853954661b9dc..fedd7c8f7e00d0427405173849e6c0743d6b886f 100644 (file)
 #include <asm/system.h>
 #include <linux/linkage.h>
 
-.globl _start
-_start: b      reset
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-#ifdef CONFIG_SPL_BUILD
-_undefined_instruction: .word _undefined_instruction
-_software_interrupt:   .word _software_interrupt
-_prefetch_abort:       .word _prefetch_abort
-_data_abort:           .word _data_abort
-_not_used:             .word _not_used
-_irq:                  .word _irq
-_fiq:                  .word _fiq
-_pad:                  .word 0x12345678 /* now 16*4=64 */
-#else
-.globl _undefined_instruction
-_undefined_instruction: .word undefined_instruction
-.globl _software_interrupt
-_software_interrupt:   .word software_interrupt
-.globl _prefetch_abort
-_prefetch_abort:       .word prefetch_abort
-.globl _data_abort
-_data_abort:           .word data_abort
-.globl _not_used
-_not_used:             .word not_used
-.globl _irq
-_irq:                  .word irq
-.globl _fiq
-_fiq:                  .word fiq
-_pad:                  .word 0x12345678 /* now 16*4=64 */
-#endif /* CONFIG_SPL_BUILD */
-
-.global _end_vect
-_end_vect:
-
-       .balignl 16,0xdeadbeef
 /*************************************************************************
  *
  * Startup Code (reset vector)
@@ -70,26 +30,7 @@ _end_vect:
  *
  *************************************************************************/
 
-#ifdef CONFIG_USE_IRQ
-/* IRQ stack memory (calculated at run-time) */
-.globl IRQ_STACK_START
-IRQ_STACK_START:
-       .word   0x0badc0de
-
-/* IRQ stack memory (calculated at run-time) */
-.globl FIQ_STACK_START
-FIQ_STACK_START:
-       .word 0x0badc0de
-#endif
-
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
-
-/*
- * the actual reset code
- */
+       .globl  reset
 
 reset:
        bl      save_boot_params
@@ -250,195 +191,3 @@ ENTRY(cpu_init_crit)
        b       lowlevel_init           @ go setup pll,mux,memory
 ENDPROC(cpu_init_crit)
 #endif
-
-#ifndef CONFIG_SPL_BUILD
-/*
- *************************************************************************
- *
- * Interrupt handling
- *
- *************************************************************************
- */
-@
-@ IRQ stack frame.
-@
-#define S_FRAME_SIZE   72
-
-#define S_OLD_R0       68
-#define S_PSR          64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-#define MODE_SVC 0x13
-#define I_BIT   0x80
-
-/*
- * use bad_save_user_regs for abort/prefetch/undef/swi ...
- * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
- */
-
-       .macro  bad_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE           @ carve out a frame on current
-                                               @ user stack
-       stmia   sp, {r0 - r12}                  @ Save user registers (now in
-                                               @ svc mode) r0-r12
-       ldr     r2, IRQ_STACK_START_IN          @ set base 2 words into abort
-                                               @ stack
-       ldmia   r2, {r2 - r3}                   @ get values for "aborted" pc
-                                               @ and cpsr (into parm regs)
-       add     r0, sp, #S_FRAME_SIZE           @ grab pointer to old stack
-
-       add     r5, sp, #S_SP
-       mov     r1, lr
-       stmia   r5, {r0 - r3}                   @ save sp_SVC, lr_SVC, pc, cpsr
-       mov     r0, sp                          @ save current stack into r0
-                                               @ (param register)
-       .endm
-
-       .macro  irq_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       add     r8, sp, #S_PC                   @ !! R8 NEEDS to be saved !!
-                                               @ a reserved stack spot would
-                                               @ be good.
-       stmdb   r8, {sp, lr}^                   @ Calling SP, LR
-       str     lr, [r8, #0]                    @ Save calling PC
-       mrs     r6, spsr
-       str     r6, [r8, #4]                    @ Save CPSR
-       str     r0, [r8, #8]                    @ Save OLD_R0
-       mov     r0, sp
-       .endm
-
-       .macro  irq_restore_user_regs
-       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
-       mov     r0, r0
-       ldr     lr, [sp, #S_PC]                 @ Get PC
-       add     sp, sp, #S_FRAME_SIZE
-       subs    pc, lr, #4                      @ return & move spsr_svc into
-                                               @ cpsr
-       .endm
-
-       .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack (enter
-                                               @ in banked mode)
-
-       str     lr, [r13]                       @ save caller lr in position 0
-                                               @ of saved stack
-       mrs     lr, spsr                        @ get the spsr
-       str     lr, [r13, #4]                   @ save spsr in position 1 of
-                                               @ saved stack
-
-       mov     r13, #MODE_SVC                  @ prepare SVC-Mode
-       @ msr   spsr_c, r13
-       msr     spsr, r13                       @ switch modes, make sure
-                                               @ moves will execute
-       mov     lr, pc                          @ capture return pc
-       movs    pc, lr                          @ jump to next instruction &
-                                               @ switch modes.
-       .endm
-
-       .macro get_bad_stack_swi
-       sub     r13, r13, #4                    @ space on current stack for
-                                               @ scratch reg.
-       str     r0, [r13]                       @ save R0's value.
-       ldr     r0, IRQ_STACK_START_IN          @ get data regions start
-                                               @ spots for abort stack
-       str     lr, [r0]                        @ save caller lr in position 0
-                                               @ of saved stack
-       mrs     lr, spsr                        @ get the spsr
-       str     lr, [r0, #4]                    @ save spsr in position 1 of
-                                               @ saved stack
-       ldr     lr, [r0]                        @ restore lr
-       ldr     r0, [r13]                       @ restore r0
-       add     r13, r13, #4                    @ pop stack entry
-       .endm
-
-       .macro get_irq_stack                    @ setup IRQ stack
-       ldr     sp, IRQ_STACK_START
-       .endm
-
-       .macro get_fiq_stack                    @ setup FIQ stack
-       ldr     sp, FIQ_STACK_START
-       .endm
-
-/*
- * exception handlers
- */
-       .align  5
-undefined_instruction:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_undefined_instruction
-
-       .align  5
-software_interrupt:
-       get_bad_stack_swi
-       bad_save_user_regs
-       bl      do_software_interrupt
-
-       .align  5
-prefetch_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_prefetch_abort
-
-       .align  5
-data_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_data_abort
-
-       .align  5
-not_used:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_not_used
-
-#ifdef CONFIG_USE_IRQ
-
-       .align  5
-irq:
-       get_irq_stack
-       irq_save_user_regs
-       bl      do_irq
-       irq_restore_user_regs
-
-       .align  5
-fiq:
-       get_fiq_stack
-       /* someone ought to write a more effective fiq_save_user_regs */
-       irq_save_user_regs
-       bl      do_fiq
-       irq_restore_user_regs
-
-#else
-
-       .align  5
-irq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_irq
-
-       .align  5
-fiq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_fiq
-
-#endif /* CONFIG_USE_IRQ */
-#endif /* CONFIG_SPL_BUILD */
index f2a59659881850ddf03ef5904a5dfdd42906e89d..69500a64e2ac17bcc17c86f4701b1213f0ddacdb 100644 (file)
@@ -88,7 +88,7 @@ SECTIONS
        }
 
        /*
-        * Zynq needs to discard more sections because the user
+        * Zynq needs to discard these sections because the user
         * is expected to pass this image on to tools for boot.bin
         * generation that require them to be dropped.
         */
index 9d16079956235d156f0d1c57727487813eb7a924..17d8be5b5b1c1025902012d87015764ed080764d 100644 (file)
 #include <errno.h>
 #include <linux/compiler.h>
 
+#ifdef CONFIG_CPU_PXA25X
+#if ((CONFIG_SYS_INIT_SP_ADDR) != 0xfffff800)
+#error "Init SP address must be set to 0xfffff800 for PXA250"
+#endif
+#endif
+
 #define        CPU_MASK_PXA_PRODID     0x000003f0
 #define        CPU_MASK_PXA_REVID      0x0000000f
 
index ae0d13ce8fe449fb72c59f7b4df1504e7e1f5800..c77d51e6d8dd6006a452610a70ee622f1bad4849 100644 (file)
 #include <config.h>
 #include <version.h>
 
-#ifdef CONFIG_CPU_PXA25X
-#if ((CONFIG_SYS_INIT_SP_ADDR) != 0xfffff800)
-#error "Init SP address must be set to 0xfffff800 for PXA250"
-#endif
-#endif
-
-.globl _start
-_start: b      reset
-#ifdef CONFIG_SPL_BUILD
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-       ldr     pc, _hang
-
-_hang:
-       .word   do_hang
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678
-       .word   0x12345678      /* now 16*4=64 */
-#else
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-
-_undefined_instruction: .word undefined_instruction
-_software_interrupt:   .word software_interrupt
-_prefetch_abort:       .word prefetch_abort
-_data_abort:           .word data_abort
-_not_used:             .word not_used
-_irq:                  .word irq
-_fiq:                  .word fiq
-_pad:                  .word 0x12345678 /* now 16*4=64 */
-#endif /* CONFIG_SPL_BUILD */
-.global _end_vect
-_end_vect:
-
-       .balignl 16,0xdeadbeef
 /*
  *************************************************************************
  *
@@ -84,26 +36,7 @@ _end_vect:
  *************************************************************************
  */
 
-#ifdef CONFIG_USE_IRQ
-/* IRQ stack memory (calculated at run-time) */
-.globl IRQ_STACK_START
-IRQ_STACK_START:
-       .word   0x0badc0de
-
-/* IRQ stack memory (calculated at run-time) */
-.globl FIQ_STACK_START
-FIQ_STACK_START:
-       .word 0x0badc0de
-#endif
-
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
-
-/*
- * the actual reset code
- */
+       .globl  reset
 
 reset:
        /*
@@ -174,190 +107,6 @@ cpu_init_crit:
        mov     pc, lr          /* back to my caller */
 #endif /* !CONFIG_SKIP_LOWLEVEL_INIT || CONFIG_CPU_PXA25X */
 
-#ifndef CONFIG_SPL_BUILD
-/*
- *************************************************************************
- *
- * Interrupt handling
- *
- *************************************************************************
- */
-@
-@ IRQ stack frame.
-@
-#define S_FRAME_SIZE   72
-
-#define S_OLD_R0       68
-#define S_PSR          64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-#define MODE_SVC 0x13
-#define I_BIT   0x80
-
-/*
- * use bad_save_user_regs for abort/prefetch/undef/swi ...
- * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
- */
-
-       .macro  bad_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE           @ carve out a frame on current user stack
-       stmia   sp, {r0 - r12}                  @ Save user registers (now in svc mode) r0-r12
-
-       ldr     r2, IRQ_STACK_START_IN          @ set base 2 words into abort stack
-       ldmia   r2, {r2 - r3}                   @ get values for "aborted" pc and cpsr (into parm regs)
-       add     r0, sp, #S_FRAME_SIZE           @ grab pointer to old stack
-
-       add     r5, sp, #S_SP
-       mov     r1, lr
-       stmia   r5, {r0 - r3}                   @ save sp_SVC, lr_SVC, pc, cpsr
-       mov     r0, sp                          @ save current stack into r0 (param register)
-       .endm
-
-       .macro  irq_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       add     r8, sp, #S_PC                   @ !!!! R8 NEEDS to be saved !!!! a reserved stack spot would be good.
-       stmdb   r8, {sp, lr}^                   @ Calling SP, LR
-       str     lr, [r8, #0]                    @ Save calling PC
-       mrs     r6, spsr
-       str     r6, [r8, #4]                    @ Save CPSR
-       str     r0, [r8, #8]                    @ Save OLD_R0
-       mov     r0, sp
-       .endm
-
-       .macro  irq_restore_user_regs
-       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
-       mov     r0, r0
-       ldr     lr, [sp, #S_PC]                 @ Get PC
-       add     sp, sp, #S_FRAME_SIZE
-       subs    pc, lr, #4                      @ return & move spsr_svc into cpsr
-       .endm
-
-       .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack (enter in banked mode)
-
-       str     lr, [r13]                       @ save caller lr in position 0 of saved stack
-       mrs     lr, spsr                        @ get the spsr
-       str     lr, [r13, #4]                   @ save spsr in position 1 of saved stack
-
-       mov     r13, #MODE_SVC                  @ prepare SVC-Mode
-       @ msr   spsr_c, r13
-       msr     spsr, r13                       @ switch modes, make sure moves will execute
-       mov     lr, pc                          @ capture return pc
-       movs    pc, lr                          @ jump to next instruction & switch modes.
-       .endm
-
-       .macro get_bad_stack_swi
-       sub     r13, r13, #4                    @ space on current stack for scratch reg.
-       str     r0, [r13]                       @ save R0's value.
-       ldr     r0, IRQ_STACK_START_IN          @ get data regions start
-       str     lr, [r0]                        @ save caller lr in position 0 of saved stack
-       mrs     lr, spsr                        @ get the spsr
-       str     lr, [r0, #4]                    @ save spsr in position 1 of saved stack
-       ldr     lr, [r0]                        @ restore lr
-       ldr     r0, [r13]                       @ restore r0
-       add     r13, r13, #4                    @ pop stack entry
-       .endm
-
-       .macro get_irq_stack                    @ setup IRQ stack
-       ldr     sp, IRQ_STACK_START
-       .endm
-
-       .macro get_fiq_stack                    @ setup FIQ stack
-       ldr     sp, FIQ_STACK_START
-       .endm
-#endif /* CONFIG_SPL_BUILD */
-
-/*
- * exception handlers
- */
-#ifdef CONFIG_SPL_BUILD
-       .align  5
-do_hang:
-       bl      hang                            /* hang and never return */
-#else  /* !CONFIG_SPL_BUILD */
-       .align  5
-undefined_instruction:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_undefined_instruction
-
-       .align  5
-software_interrupt:
-       get_bad_stack_swi
-       bad_save_user_regs
-       bl      do_software_interrupt
-
-       .align  5
-prefetch_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_prefetch_abort
-
-       .align  5
-data_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_data_abort
-
-       .align  5
-not_used:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_not_used
-
-#ifdef CONFIG_USE_IRQ
-
-       .align  5
-irq:
-       get_irq_stack
-       irq_save_user_regs
-       bl      do_irq
-       irq_restore_user_regs
-
-       .align  5
-fiq:
-       get_fiq_stack
-       /* someone ought to write a more effiction fiq_save_user_regs */
-       irq_save_user_regs
-       bl      do_fiq
-       irq_restore_user_regs
-
-#else
-
-       .align  5
-irq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_irq
-
-       .align  5
-fiq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_fiq
-
-#endif
-       .align 5
-#endif /* CONFIG_SPL_BUILD */
-
-
 /*
  * Enable MMU to use DCache as DRAM.
  *
index 6651898de235925b824f09cc409d80505650f7ac..4c9752a1c82b8829e9e2c0fed30457a532037cf9 100644 (file)
@@ -17,6 +17,7 @@
 #include <common.h>
 #include <command.h>
 #include <asm/system.h>
+#include <asm/io.h>
 
 #ifdef CONFIG_USE_IRQ
 DECLARE_GLOBAL_DATA_PTR;
@@ -52,3 +53,16 @@ static void cache_flush (void)
 
        asm ("mcr p15, 0, %0, c7, c5, 0": :"r" (i));
 }
+
+#define RST_BASE 0x90030000
+#define RSRR   0x00
+#define RCSR   0x04
+
+__attribute__((noreturn)) void reset_cpu(ulong addr __attribute__((unused)))
+{
+       /* repeat endlessly */
+       while (1) {
+               writel(0, RST_BASE + RCSR);
+               writel(1, RST_BASE + RSRR);
+       }
+}
index bf80937a7c7b42f5d8a82ed388f8fd389b4580ed..78e0cb88681d5be5d5b859388abca201221c0ae5 100644 (file)
 #include <config.h>
 #include <version.h>
 
-/*
- *************************************************************************
- *
- * Jump vector table as in table 3.1 in [1]
- *
- *************************************************************************
- */
-
-
-.globl _start
-_start:        b       reset
-       ldr     pc, _undefined_instruction
-       ldr     pc, _software_interrupt
-       ldr     pc, _prefetch_abort
-       ldr     pc, _data_abort
-       ldr     pc, _not_used
-       ldr     pc, _irq
-       ldr     pc, _fiq
-
-_undefined_instruction:        .word undefined_instruction
-_software_interrupt:   .word software_interrupt
-_prefetch_abort:       .word prefetch_abort
-_data_abort:           .word data_abort
-_not_used:             .word not_used
-_irq:                  .word irq
-_fiq:                  .word fiq
-
-       .balignl 16,0xdeadbeef
-
-
 /*
  *************************************************************************
  *
@@ -56,26 +26,7 @@ _fiq:                        .word fiq
  *************************************************************************
  */
 
-#ifdef CONFIG_USE_IRQ
-/* IRQ stack memory (calculated at run-time) */
-.globl IRQ_STACK_START
-IRQ_STACK_START:
-       .word   0x0badc0de
-
-/* IRQ stack memory (calculated at run-time) */
-.globl FIQ_STACK_START
-FIQ_STACK_START:
-       .word 0x0badc0de
-#endif
-
-/* IRQ stack memory (calculated at run-time) + 8 bytes */
-.globl IRQ_STACK_START_IN
-IRQ_STACK_START_IN:
-       .word   0x0badc0de
-
-/*
- * the actual reset code
- */
+       .globl  reset
 
 reset:
        /*
@@ -173,177 +124,3 @@ cpu_init_crit:
        mcr     p15, 0, r0, c8, c7, 0   /* flush v4 TLB */
 
        mov     pc, lr
-
-
-/*
- *************************************************************************
- *
- * Interrupt handling
- *
- *************************************************************************
- */
-
-@
-@ IRQ stack frame.
-@
-#define S_FRAME_SIZE   72
-
-#define S_OLD_R0       68
-#define S_PSR          64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-#define MODE_SVC 0x13
-#define I_BIT   0x80
-
-/*
- * use bad_save_user_regs for abort/prefetch/undef/swi ...
- * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
- */
-
-       .macro  bad_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       add     r8, sp, #S_PC
-
-       ldr     r2, IRQ_STACK_START_IN
-       ldmia   r2, {r2 - r4}                   @ get pc, cpsr, old_r0
-       add     r0, sp, #S_FRAME_SIZE           @ restore sp_SVC
-
-       add     r5, sp, #S_SP
-       mov     r1, lr
-       stmia   r5, {r0 - r4}                   @ save sp_SVC, lr_SVC, pc, cpsr, old_r
-       mov     r0, sp
-       .endm
-
-       .macro  irq_save_user_regs
-       sub     sp, sp, #S_FRAME_SIZE
-       stmia   sp, {r0 - r12}                  @ Calling r0-r12
-       add     r8, sp, #S_PC
-       stmdb   r8, {sp, lr}^                   @ Calling SP, LR
-       str     lr, [r8, #0]                    @ Save calling PC
-       mrs     r6, spsr
-       str     r6, [r8, #4]                    @ Save CPSR
-       str     r0, [r8, #8]                    @ Save OLD_R0
-       mov     r0, sp
-       .endm
-
-       .macro  irq_restore_user_regs
-       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
-       mov     r0, r0
-       ldr     lr, [sp, #S_PC]                 @ Get PC
-       add     sp, sp, #S_FRAME_SIZE
-       subs    pc, lr, #4                      @ return & move spsr_svc into cpsr
-       .endm
-
-       .macro get_bad_stack
-       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack
-
-       str     lr, [r13]                       @ save caller lr / spsr
-       mrs     lr, spsr
-       str     lr, [r13, #4]
-
-       mov     r13, #MODE_SVC                  @ prepare SVC-Mode
-       msr     spsr_c, r13
-       mov     lr, pc
-       movs    pc, lr
-       .endm
-
-       .macro get_irq_stack                    @ setup IRQ stack
-       ldr     sp, IRQ_STACK_START
-       .endm
-
-       .macro get_fiq_stack                    @ setup FIQ stack
-       ldr     sp, FIQ_STACK_START
-       .endm
-
-/*
- * exception handlers
- */
-       .align  5
-undefined_instruction:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_undefined_instruction
-
-       .align  5
-software_interrupt:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_software_interrupt
-
-       .align  5
-prefetch_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_prefetch_abort
-
-       .align  5
-data_abort:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_data_abort
-
-       .align  5
-not_used:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_not_used
-
-#ifdef CONFIG_USE_IRQ
-
-       .align  5
-irq:
-       get_irq_stack
-       irq_save_user_regs
-       bl      do_irq
-       irq_restore_user_regs
-
-       .align  5
-fiq:
-       get_fiq_stack
-       /* someone ought to write a more effiction fiq_save_user_regs */
-       irq_save_user_regs
-       bl      do_fiq
-       irq_restore_user_regs
-
-#else
-
-       .align  5
-irq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_irq
-
-       .align  5
-fiq:
-       get_bad_stack
-       bad_save_user_regs
-       bl      do_fiq
-
-#endif
-
-       .align  5
-.globl reset_cpu
-reset_cpu:
-       ldr     r0, RST_BASE
-       mov     r1, #0x0                        @ set bit 3-0 ...
-       str     r1, [r0, #RCSR]                 @ ... to clear in RCSR
-       mov     r1, #0x1
-       str     r1, [r0, #RSRR]                 @ and perform reset
-       b       reset_cpu                       @ silly, but repeat endlessly
index d62618cd0f618230fd01a85766e949e6a61a1554..6e3ab0c14ca2b477451d1b8b0bd7004938daff00 100644 (file)
 #define IO_RESET_SHIFT 8
 #define RCV_SEL_SHIFT  9
 
+#if !defined(CONFIG_TEGRA20) && !defined(CONFIG_TEGRA30)
+/* This register/field only exists on Tegra114 and later */
+#define APB_MISC_PP_PINMUX_GLOBAL_0 0x40
+#define CLAMP_INPUTS_WHEN_TRISTATED 1
+
+void pinmux_set_tristate_input_clamping(void)
+{
+       u32 *reg = _R(APB_MISC_PP_PINMUX_GLOBAL_0);
+       u32 val;
+
+       val = readl(reg);
+       val |= CLAMP_INPUTS_WHEN_TRISTATED;
+       writel(val, reg);
+}
+#endif
+
 void pinmux_set_func(enum pmux_pingrp pin, enum pmux_func func)
 {
        u32 *reg = MUX_REG(pin);
        int i, mux = -1;
        u32 val;
 
+       if (func == PMUX_FUNC_DEFAULT)
+               return;
+
        /* Error check on pin and func */
        assert(pmux_pingrp_isvalid(pin));
        assert(pmux_func_isvalid(func));
index 3e886680e87c68c1696c7a2c4af99c0c5cf77f88..4beddf08e76722251b9d77182c7fc9bef508c314 100644 (file)
@@ -18,6 +18,7 @@ SECTIONS
        .text :
        {
                __image_copy_start = .;
+               *(.vectors)
                CPUDIR/start.o (.text*)
                *(.text*)
        }
index 33c1f99fc09c9b03ea57006b8483f3f918776004..a7728e0a2de2b9c6e452f19830b7b52d3a1fc355 100644 (file)
@@ -18,6 +18,7 @@ SECTIONS
        .text :
        {
                *(.__image_copy_start)
+               *(.vectors)
                CPUDIR/start.o (.text*)
                *(.text*)
        }
index 5c9d2aed680b86a1a6e57f03a720b0a7356cd84e..15059d22022738954eea77af7f8e30b07bd8696e 100644 (file)
        sdhci@12530000 {
                samsung,bus-width = <4>;
                samsung,timing = <1 2 3>;
-               cd-gpios = <&gpio 0x2008002 0>;
+               cd-gpios = <&gpio 0xA2 0>;
        };
 
        sdhci@12540000 {
                status = "disabled";
        };
-};
\ No newline at end of file
+};
index 992e0234c9f9d44bc732bd8de8a90ed18d962c29..0ff69393b758621eb5d9d953cce61269ca2d5fba 100644 (file)
        sdhci@12510000 {
                samsung,bus-width = <8>;
                samsung,timing = <1 3 3>;
-               pwr-gpios = <&gpio 0x2008002 0>;
+               pwr-gpios = <&gpio 0xA2 0>;
        };
 
        sdhci@12520000 {
        sdhci@12530000 {
                samsung,bus-width = <4>;
                samsung,timing = <1 2 3>;
-               cd-gpios = <&gpio 0x20c6004 0>;
+               cd-gpios = <&gpio 0x39C 0>;
        };
 
        sdhci@12540000 {
                status = "disabled";
        };
-};
\ No newline at end of file
+};
index 1cdd981d6dfcc137c5e71a26c3e1f0b410877aae..6941906aaa353b3a2ebcd5bb405a824937fc5a72 100644 (file)
@@ -24,7 +24,7 @@
        sdhci@12510000 {
                samsung,bus-width = <8>;
                samsung,timing = <1 3 3>;
-               pwr-gpios = <&gpio 0x2008002 0>;
+               pwr-gpios = <&gpio 0xA2 0>;
        };
 
        sdhci@12520000 {
@@ -34,7 +34,7 @@
        sdhci@12530000 {
                samsung,bus-width = <4>;
                samsung,timing = <1 2 3>;
-               cd-gpios = <&gpio 0x20c6004 0>;
+               cd-gpios = <&gpio 0x39C 0>;
        };
 
        sdhci@12540000 {
index 7d32067fdda0b2ebfb8fedf432ee3cdf376f20dc..1596f8328abbfe06a946cf363ef31b61396968f9 100644 (file)
        sdhci@12510000 {
                samsung,bus-width = <8>;
                samsung,timing = <1 3 3>;
-               pwr-gpios = <&gpio 0x2004002 0>;
+               pwr-gpios = <&gpio 0xB2 0>;
        };
 
        sdhci@12520000 {
        sdhci@12530000 {
                samsung,bus-width = <4>;
                samsung,timing = <1 2 3>;
-               cd-gpios = <&gpio 0x20C6004 0>;
+               cd-gpios = <&gpio 0x3BC 0>;
        };
 
        sdhci@12540000 {
index fdf73b507a60d7816d3e5744c66b86d827a6dda3..ba717146f51bf8589f68c5e8ed3ff23675c117b4 100644 (file)
@@ -98,7 +98,7 @@
 #define EXYNOS5_I2C_SPACING            0x10000
 
 #define EXYNOS5_AUDIOSS_BASE           0x03810000
-#define EXYNOS5_GPIO_PART4_BASE                0x03860000
+#define EXYNOS5_GPIO_PART8_BASE                0x03860000
 #define EXYNOS5_PRO_ID                 0x10000000
 #define EXYNOS5_CLOCK_BASE             0x10010000
 #define EXYNOS5_POWER_BASE             0x10040000
 #define EXYNOS5_WATCHDOG_BASE          0x101D0000
 #define EXYNOS5_ACE_SFR_BASE           0x10830000
 #define EXYNOS5_DMC_PHY_BASE           0x10C00000
-#define EXYNOS5_GPIO_PART3_BASE                0x10D10000
+#define EXYNOS5_GPIO_PART5_BASE                0x10D10000
+#define EXYNOS5_GPIO_PART6_BASE                0x10D10060
+#define EXYNOS5_GPIO_PART7_BASE                0x10D100C0
 #define EXYNOS5_DMC_CTRL_BASE          0x10DD0000
 #define EXYNOS5_GPIO_PART1_BASE                0x11400000
+#define EXYNOS5_GPIO_PART2_BASE                0x114002E0
+#define EXYNOS5_GPIO_PART3_BASE                0x11400C00
 #define EXYNOS5_MIPI_DSIM_BASE         0x11D00000
 #define EXYNOS5_USB_HOST_XHCI_BASE     0x12000000
 #define EXYNOS5_USB3PHY_BASE           0x12100000
 #define EXYNOS5_I2S_BASE               0x12D60000
 #define EXYNOS5_PWMTIMER_BASE          0x12DD0000
 #define EXYNOS5_SPI_ISP_BASE           0x131A0000
-#define EXYNOS5_GPIO_PART2_BASE                0x13400000
+#define EXYNOS5_GPIO_PART4_BASE                0x13400000
 #define EXYNOS5_FIMD_BASE              0x14400000
 #define EXYNOS5_DP_BASE                        0x145B0000
 
 
 /* EXYNOS5420 */
 #define EXYNOS5420_AUDIOSS_BASE                0x03810000
-#define EXYNOS5420_GPIO_PART5_BASE     0x03860000
+#define EXYNOS5420_GPIO_PART6_BASE     0x03860000
 #define EXYNOS5420_PRO_ID              0x10000000
 #define EXYNOS5420_CLOCK_BASE          0x10010000
 #define EXYNOS5420_POWER_BASE          0x10040000
 #define EXYNOS5420_PWMTIMER_BASE       0x12DD0000
 #define EXYNOS5420_SPI_ISP_BASE                0x131A0000
 #define EXYNOS5420_GPIO_PART2_BASE     0x13400000
-#define EXYNOS5420_GPIO_PART3_BASE     0x13410000
-#define EXYNOS5420_GPIO_PART4_BASE     0x14000000
+#define EXYNOS5420_GPIO_PART3_BASE     0x13400C00
+#define EXYNOS5420_GPIO_PART4_BASE     0x13410000
+#define EXYNOS5420_GPIO_PART5_BASE     0x14000000
 #define EXYNOS5420_GPIO_PART1_BASE     0x14010000
 #define EXYNOS5420_MIPI_DSIM_BASE      0x14500000
 #define EXYNOS5420_DP_BASE             0x145B0000
index d6868fa25dd31a6a6d41140f7ab3d84f3ef1e2dc..be5113f0e202628a7d913e33c4459fc16392daa8 100644 (file)
@@ -19,328 +19,1515 @@ struct s5p_gpio_bank {
        unsigned char   res1[8];
 };
 
-struct exynos4_gpio_part1 {
-       struct s5p_gpio_bank a0;
-       struct s5p_gpio_bank a1;
-       struct s5p_gpio_bank b;
-       struct s5p_gpio_bank c0;
-       struct s5p_gpio_bank c1;
-       struct s5p_gpio_bank d0;
-       struct s5p_gpio_bank d1;
-       struct s5p_gpio_bank e0;
-       struct s5p_gpio_bank e1;
-       struct s5p_gpio_bank e2;
-       struct s5p_gpio_bank e3;
-       struct s5p_gpio_bank e4;
-       struct s5p_gpio_bank f0;
-       struct s5p_gpio_bank f1;
-       struct s5p_gpio_bank f2;
-       struct s5p_gpio_bank f3;
-};
+/* GPIO pins per bank  */
+#define GPIO_PER_BANK 8
 
-struct exynos4_gpio_part2 {
-       struct s5p_gpio_bank j0;
-       struct s5p_gpio_bank j1;
-       struct s5p_gpio_bank k0;
-       struct s5p_gpio_bank k1;
-       struct s5p_gpio_bank k2;
-       struct s5p_gpio_bank k3;
-       struct s5p_gpio_bank l0;
-       struct s5p_gpio_bank l1;
-       struct s5p_gpio_bank l2;
-       struct s5p_gpio_bank y0;
-       struct s5p_gpio_bank y1;
-       struct s5p_gpio_bank y2;
-       struct s5p_gpio_bank y3;
-       struct s5p_gpio_bank y4;
-       struct s5p_gpio_bank y5;
-       struct s5p_gpio_bank y6;
-       struct s5p_gpio_bank res1[80];
-       struct s5p_gpio_bank x0;
-       struct s5p_gpio_bank x1;
-       struct s5p_gpio_bank x2;
-       struct s5p_gpio_bank x3;
-};
+/* A list of valid GPIO numbers for the asm-generic/gpio.h interface */
+enum exynos4_gpio_pin {
+       /* GPIO_PART1_STARTS */
+       EXYNOS4_GPIO_A00,               /* 0 */
+       EXYNOS4_GPIO_A01,
+       EXYNOS4_GPIO_A02,
+       EXYNOS4_GPIO_A03,
+       EXYNOS4_GPIO_A04,
+       EXYNOS4_GPIO_A05,
+       EXYNOS4_GPIO_A06,
+       EXYNOS4_GPIO_A07,
+       EXYNOS4_GPIO_A10,               /* 8 */
+       EXYNOS4_GPIO_A11,
+       EXYNOS4_GPIO_A12,
+       EXYNOS4_GPIO_A13,
+       EXYNOS4_GPIO_A14,
+       EXYNOS4_GPIO_A15,
+       EXYNOS4_GPIO_A16,
+       EXYNOS4_GPIO_A17,
+       EXYNOS4_GPIO_B0,                /* 16 0x10 */
+       EXYNOS4_GPIO_B1,
+       EXYNOS4_GPIO_B2,
+       EXYNOS4_GPIO_B3,
+       EXYNOS4_GPIO_B4,
+       EXYNOS4_GPIO_B5,
+       EXYNOS4_GPIO_B6,
+       EXYNOS4_GPIO_B7,
+       EXYNOS4_GPIO_C00,               /* 24 0x18 */
+       EXYNOS4_GPIO_C01,
+       EXYNOS4_GPIO_C02,
+       EXYNOS4_GPIO_C03,
+       EXYNOS4_GPIO_C04,
+       EXYNOS4_GPIO_C05,
+       EXYNOS4_GPIO_C06,
+       EXYNOS4_GPIO_C07,
+       EXYNOS4_GPIO_C10,               /* 32 0x20*/
+       EXYNOS4_GPIO_C11,
+       EXYNOS4_GPIO_C12,
+       EXYNOS4_GPIO_C13,
+       EXYNOS4_GPIO_C14,
+       EXYNOS4_GPIO_C15,
+       EXYNOS4_GPIO_C16,
+       EXYNOS4_GPIO_C17,
+       EXYNOS4_GPIO_D00,               /* 40 0x28 */
+       EXYNOS4_GPIO_D01,
+       EXYNOS4_GPIO_D02,
+       EXYNOS4_GPIO_D03,
+       EXYNOS4_GPIO_D04,
+       EXYNOS4_GPIO_D05,
+       EXYNOS4_GPIO_D06,
+       EXYNOS4_GPIO_D07,
+       EXYNOS4_GPIO_D10,               /* 48 0x30 */
+       EXYNOS4_GPIO_D11,
+       EXYNOS4_GPIO_D12,
+       EXYNOS4_GPIO_D13,
+       EXYNOS4_GPIO_D14,
+       EXYNOS4_GPIO_D15,
+       EXYNOS4_GPIO_D16,
+       EXYNOS4_GPIO_D17,
+       EXYNOS4_GPIO_E00,               /* 56 0x38 */
+       EXYNOS4_GPIO_E01,
+       EXYNOS4_GPIO_E02,
+       EXYNOS4_GPIO_E03,
+       EXYNOS4_GPIO_E04,
+       EXYNOS4_GPIO_E05,
+       EXYNOS4_GPIO_E06,
+       EXYNOS4_GPIO_E07,
+       EXYNOS4_GPIO_E10,               /* 64 0x40 */
+       EXYNOS4_GPIO_E11,
+       EXYNOS4_GPIO_E12,
+       EXYNOS4_GPIO_E13,
+       EXYNOS4_GPIO_E14,
+       EXYNOS4_GPIO_E15,
+       EXYNOS4_GPIO_E16,
+       EXYNOS4_GPIO_E17,
+       EXYNOS4_GPIO_E20,               /* 72 0x48 */
+       EXYNOS4_GPIO_E21,
+       EXYNOS4_GPIO_E22,
+       EXYNOS4_GPIO_E23,
+       EXYNOS4_GPIO_E24,
+       EXYNOS4_GPIO_E25,
+       EXYNOS4_GPIO_E26,
+       EXYNOS4_GPIO_E27,
+       EXYNOS4_GPIO_E30,               /* 80 0x50 */
+       EXYNOS4_GPIO_E31,
+       EXYNOS4_GPIO_E32,
+       EXYNOS4_GPIO_E33,
+       EXYNOS4_GPIO_E34,
+       EXYNOS4_GPIO_E35,
+       EXYNOS4_GPIO_E36,
+       EXYNOS4_GPIO_E37,
+       EXYNOS4_GPIO_E40,               /* 88 0x58 */
+       EXYNOS4_GPIO_E41,
+       EXYNOS4_GPIO_E42,
+       EXYNOS4_GPIO_E43,
+       EXYNOS4_GPIO_E44,
+       EXYNOS4_GPIO_E45,
+       EXYNOS4_GPIO_E46,
+       EXYNOS4_GPIO_E47,
+       EXYNOS4_GPIO_F00,               /* 96 0x60 */
+       EXYNOS4_GPIO_F01,
+       EXYNOS4_GPIO_F02,
+       EXYNOS4_GPIO_F03,
+       EXYNOS4_GPIO_F04,
+       EXYNOS4_GPIO_F05,
+       EXYNOS4_GPIO_F06,
+       EXYNOS4_GPIO_F07,
+       EXYNOS4_GPIO_F10,               /* 104 0x68 */
+       EXYNOS4_GPIO_F11,
+       EXYNOS4_GPIO_F12,
+       EXYNOS4_GPIO_F13,
+       EXYNOS4_GPIO_F14,
+       EXYNOS4_GPIO_F15,
+       EXYNOS4_GPIO_F16,
+       EXYNOS4_GPIO_F17,
+       EXYNOS4_GPIO_F20,               /* 112 0x70 */
+       EXYNOS4_GPIO_F21,
+       EXYNOS4_GPIO_F22,
+       EXYNOS4_GPIO_F23,
+       EXYNOS4_GPIO_F24,
+       EXYNOS4_GPIO_F25,
+       EXYNOS4_GPIO_F26,
+       EXYNOS4_GPIO_F27,
+       EXYNOS4_GPIO_F30,               /* 120 0x78 */
+       EXYNOS4_GPIO_F31,
+       EXYNOS4_GPIO_F32,
+       EXYNOS4_GPIO_F33,
+       EXYNOS4_GPIO_F34,
+       EXYNOS4_GPIO_F35,
+       EXYNOS4_GPIO_F36,
+       EXYNOS4_GPIO_F37,
 
-struct exynos4_gpio_part3 {
-       struct s5p_gpio_bank z;
-};
+       /* GPIO_PART2_STARTS */
+       EXYNOS4_GPIO_MAX_PORT_PART_1,   /* 128 0x80 */
+       EXYNOS4_GPIO_J00 = EXYNOS4_GPIO_MAX_PORT_PART_1,
+       EXYNOS4_GPIO_J01,
+       EXYNOS4_GPIO_J02,
+       EXYNOS4_GPIO_J03,
+       EXYNOS4_GPIO_J04,
+       EXYNOS4_GPIO_J05,
+       EXYNOS4_GPIO_J06,
+       EXYNOS4_GPIO_J07,
+       EXYNOS4_GPIO_J10,               /* 136 0x88 */
+       EXYNOS4_GPIO_J11,
+       EXYNOS4_GPIO_J12,
+       EXYNOS4_GPIO_J13,
+       EXYNOS4_GPIO_J14,
+       EXYNOS4_GPIO_J15,
+       EXYNOS4_GPIO_J16,
+       EXYNOS4_GPIO_J17,
+       EXYNOS4_GPIO_K00,               /* 144 0x90 */
+       EXYNOS4_GPIO_K01,
+       EXYNOS4_GPIO_K02,
+       EXYNOS4_GPIO_K03,
+       EXYNOS4_GPIO_K04,
+       EXYNOS4_GPIO_K05,
+       EXYNOS4_GPIO_K06,
+       EXYNOS4_GPIO_K07,
+       EXYNOS4_GPIO_K10,               /* 152 0x98 */
+       EXYNOS4_GPIO_K11,
+       EXYNOS4_GPIO_K12,
+       EXYNOS4_GPIO_K13,
+       EXYNOS4_GPIO_K14,
+       EXYNOS4_GPIO_K15,
+       EXYNOS4_GPIO_K16,
+       EXYNOS4_GPIO_K17,
+       EXYNOS4_GPIO_K20,               /* 160 0xA0 */
+       EXYNOS4_GPIO_K21,
+       EXYNOS4_GPIO_K22,
+       EXYNOS4_GPIO_K23,
+       EXYNOS4_GPIO_K24,
+       EXYNOS4_GPIO_K25,
+       EXYNOS4_GPIO_K26,
+       EXYNOS4_GPIO_K27,
+       EXYNOS4_GPIO_K30,               /* 168 0xA8 */
+       EXYNOS4_GPIO_K31,
+       EXYNOS4_GPIO_K32,
+       EXYNOS4_GPIO_K33,
+       EXYNOS4_GPIO_K34,
+       EXYNOS4_GPIO_K35,
+       EXYNOS4_GPIO_K36,
+       EXYNOS4_GPIO_K37,
+       EXYNOS4_GPIO_L00,               /* 176 0xB0 */
+       EXYNOS4_GPIO_L01,
+       EXYNOS4_GPIO_L02,
+       EXYNOS4_GPIO_L03,
+       EXYNOS4_GPIO_L04,
+       EXYNOS4_GPIO_L05,
+       EXYNOS4_GPIO_L06,
+       EXYNOS4_GPIO_L07,
+       EXYNOS4_GPIO_L10,               /* 184 0xB8 */
+       EXYNOS4_GPIO_L11,
+       EXYNOS4_GPIO_L12,
+       EXYNOS4_GPIO_L13,
+       EXYNOS4_GPIO_L14,
+       EXYNOS4_GPIO_L15,
+       EXYNOS4_GPIO_L16,
+       EXYNOS4_GPIO_L17,
+       EXYNOS4_GPIO_L20,               /* 192 0xC0 */
+       EXYNOS4_GPIO_L21,
+       EXYNOS4_GPIO_L22,
+       EXYNOS4_GPIO_L23,
+       EXYNOS4_GPIO_L24,
+       EXYNOS4_GPIO_L25,
+       EXYNOS4_GPIO_L26,
+       EXYNOS4_GPIO_L27,
+       EXYNOS4_GPIO_Y00,               /* 200 0xC8 */
+       EXYNOS4_GPIO_Y01,
+       EXYNOS4_GPIO_Y02,
+       EXYNOS4_GPIO_Y03,
+       EXYNOS4_GPIO_Y04,
+       EXYNOS4_GPIO_Y05,
+       EXYNOS4_GPIO_Y06,
+       EXYNOS4_GPIO_Y07,
+       EXYNOS4_GPIO_Y10,               /* 208 0xD0 */
+       EXYNOS4_GPIO_Y11,
+       EXYNOS4_GPIO_Y12,
+       EXYNOS4_GPIO_Y13,
+       EXYNOS4_GPIO_Y14,
+       EXYNOS4_GPIO_Y15,
+       EXYNOS4_GPIO_Y16,
+       EXYNOS4_GPIO_Y17,
+       EXYNOS4_GPIO_Y20,               /* 216 0xD8 */
+       EXYNOS4_GPIO_Y21,
+       EXYNOS4_GPIO_Y22,
+       EXYNOS4_GPIO_Y23,
+       EXYNOS4_GPIO_Y24,
+       EXYNOS4_GPIO_Y25,
+       EXYNOS4_GPIO_Y26,
+       EXYNOS4_GPIO_Y27,
+       EXYNOS4_GPIO_Y30,               /* 224 0xE0 */
+       EXYNOS4_GPIO_Y31,
+       EXYNOS4_GPIO_Y32,
+       EXYNOS4_GPIO_Y33,
+       EXYNOS4_GPIO_Y34,
+       EXYNOS4_GPIO_Y35,
+       EXYNOS4_GPIO_Y36,
+       EXYNOS4_GPIO_Y37,
+       EXYNOS4_GPIO_Y40,               /* 232 0xE8 */
+       EXYNOS4_GPIO_Y41,
+       EXYNOS4_GPIO_Y42,
+       EXYNOS4_GPIO_Y43,
+       EXYNOS4_GPIO_Y44,
+       EXYNOS4_GPIO_Y45,
+       EXYNOS4_GPIO_Y46,
+       EXYNOS4_GPIO_Y47,
+       EXYNOS4_GPIO_Y50,               /* 240 0xF0 */
+       EXYNOS4_GPIO_Y51,
+       EXYNOS4_GPIO_Y52,
+       EXYNOS4_GPIO_Y53,
+       EXYNOS4_GPIO_Y54,
+       EXYNOS4_GPIO_Y55,
+       EXYNOS4_GPIO_Y56,
+       EXYNOS4_GPIO_Y57,
+       EXYNOS4_GPIO_Y60,               /* 248 0xF8 */
+       EXYNOS4_GPIO_Y61,
+       EXYNOS4_GPIO_Y62,
+       EXYNOS4_GPIO_Y63,
+       EXYNOS4_GPIO_Y64,
+       EXYNOS4_GPIO_Y65,
+       EXYNOS4_GPIO_Y66,
+       EXYNOS4_GPIO_Y67,
+       EXYNOS4_GPIO_X00 = 896,         /* 896 0x380 */
+       EXYNOS4_GPIO_X01,
+       EXYNOS4_GPIO_X02,
+       EXYNOS4_GPIO_X03,
+       EXYNOS4_GPIO_X04,
+       EXYNOS4_GPIO_X05,
+       EXYNOS4_GPIO_X06,
+       EXYNOS4_GPIO_X07,
+       EXYNOS4_GPIO_X10,               /* 904 0x388 */
+       EXYNOS4_GPIO_X11,
+       EXYNOS4_GPIO_X12,
+       EXYNOS4_GPIO_X13,
+       EXYNOS4_GPIO_X14,
+       EXYNOS4_GPIO_X15,
+       EXYNOS4_GPIO_X16,
+       EXYNOS4_GPIO_X17,
+       EXYNOS4_GPIO_X20,               /* 912 0x390 */
+       EXYNOS4_GPIO_X21,
+       EXYNOS4_GPIO_X22,
+       EXYNOS4_GPIO_X23,
+       EXYNOS4_GPIO_X24,
+       EXYNOS4_GPIO_X25,
+       EXYNOS4_GPIO_X26,
+       EXYNOS4_GPIO_X27,
+       EXYNOS4_GPIO_X30,               /* 920 0x398 */
+       EXYNOS4_GPIO_X31,
+       EXYNOS4_GPIO_X32,
+       EXYNOS4_GPIO_X33,
+       EXYNOS4_GPIO_X34,
+       EXYNOS4_GPIO_X35,
+       EXYNOS4_GPIO_X36,
+       EXYNOS4_GPIO_X37,
+
+       /* GPIO_PART3_STARTS */
+       EXYNOS4_GPIO_MAX_PORT_PART_2,   /* 928 0x3A0 */
+       EXYNOS4_GPIO_Z0 = EXYNOS4_GPIO_MAX_PORT_PART_2,
+       EXYNOS4_GPIO_Z1,
+       EXYNOS4_GPIO_Z2,
+       EXYNOS4_GPIO_Z3,
+       EXYNOS4_GPIO_Z4,
+       EXYNOS4_GPIO_Z5,
+       EXYNOS4_GPIO_Z6,
+       EXYNOS4_GPIO_Z7,
 
-struct exynos4x12_gpio_part1 {
-       struct s5p_gpio_bank a0;
-       struct s5p_gpio_bank a1;
-       struct s5p_gpio_bank b;
-       struct s5p_gpio_bank c0;
-       struct s5p_gpio_bank c1;
-       struct s5p_gpio_bank d0;
-       struct s5p_gpio_bank d1;
-       struct s5p_gpio_bank res1[0x5];
-       struct s5p_gpio_bank f0;
-       struct s5p_gpio_bank f1;
-       struct s5p_gpio_bank f2;
-       struct s5p_gpio_bank f3;
-       struct s5p_gpio_bank res2[0x2];
-       struct s5p_gpio_bank j0;
-       struct s5p_gpio_bank j1;
+       EXYNOS4_GPIO_MAX_PORT
 };
 
-struct exynos4x12_gpio_part2 {
-       struct s5p_gpio_bank res1[0x2];
-       struct s5p_gpio_bank k0;
-       struct s5p_gpio_bank k1;
-       struct s5p_gpio_bank k2;
-       struct s5p_gpio_bank k3;
-       struct s5p_gpio_bank l0;
-       struct s5p_gpio_bank l1;
-       struct s5p_gpio_bank l2;
-       struct s5p_gpio_bank y0;
-       struct s5p_gpio_bank y1;
-       struct s5p_gpio_bank y2;
-       struct s5p_gpio_bank y3;
-       struct s5p_gpio_bank y4;
-       struct s5p_gpio_bank y5;
-       struct s5p_gpio_bank y6;
-       struct s5p_gpio_bank res2[0x3];
-       struct s5p_gpio_bank m0;
-       struct s5p_gpio_bank m1;
-       struct s5p_gpio_bank m2;
-       struct s5p_gpio_bank m3;
-       struct s5p_gpio_bank m4;
-       struct s5p_gpio_bank res3[0x48];
-       struct s5p_gpio_bank x0;
-       struct s5p_gpio_bank x1;
-       struct s5p_gpio_bank x2;
-       struct s5p_gpio_bank x3;
+enum exynos4X12_gpio_pin {
+       /* GPIO_PART1_STARTS */
+       EXYNOS4X12_GPIO_A00,            /* 0 */
+       EXYNOS4X12_GPIO_A01,
+       EXYNOS4X12_GPIO_A02,
+       EXYNOS4X12_GPIO_A03,
+       EXYNOS4X12_GPIO_A04,
+       EXYNOS4X12_GPIO_A05,
+       EXYNOS4X12_GPIO_A06,
+       EXYNOS4X12_GPIO_A07,
+       EXYNOS4X12_GPIO_A10,            /* 8 */
+       EXYNOS4X12_GPIO_A11,
+       EXYNOS4X12_GPIO_A12,
+       EXYNOS4X12_GPIO_A13,
+       EXYNOS4X12_GPIO_A14,
+       EXYNOS4X12_GPIO_A15,
+       EXYNOS4X12_GPIO_A16,
+       EXYNOS4X12_GPIO_A17,
+       EXYNOS4X12_GPIO_B0,             /* 16 0x10 */
+       EXYNOS4X12_GPIO_B1,
+       EXYNOS4X12_GPIO_B2,
+       EXYNOS4X12_GPIO_B3,
+       EXYNOS4X12_GPIO_B4,
+       EXYNOS4X12_GPIO_B5,
+       EXYNOS4X12_GPIO_B6,
+       EXYNOS4X12_GPIO_B7,
+       EXYNOS4X12_GPIO_C00,            /* 24 0x18 */
+       EXYNOS4X12_GPIO_C01,
+       EXYNOS4X12_GPIO_C02,
+       EXYNOS4X12_GPIO_C03,
+       EXYNOS4X12_GPIO_C04,
+       EXYNOS4X12_GPIO_C05,
+       EXYNOS4X12_GPIO_C06,
+       EXYNOS4X12_GPIO_C07,
+       EXYNOS4X12_GPIO_C10,            /* 32 0x20 */
+       EXYNOS4X12_GPIO_C11,
+       EXYNOS4X12_GPIO_C12,
+       EXYNOS4X12_GPIO_C13,
+       EXYNOS4X12_GPIO_C14,
+       EXYNOS4X12_GPIO_C15,
+       EXYNOS4X12_GPIO_C16,
+       EXYNOS4X12_GPIO_C17,
+       EXYNOS4X12_GPIO_D00,            /* 40 0x28 */
+       EXYNOS4X12_GPIO_D01,
+       EXYNOS4X12_GPIO_D02,
+       EXYNOS4X12_GPIO_D03,
+       EXYNOS4X12_GPIO_D04,
+       EXYNOS4X12_GPIO_D05,
+       EXYNOS4X12_GPIO_D06,
+       EXYNOS4X12_GPIO_D07,
+       EXYNOS4X12_GPIO_D10,            /* 48 0x30 */
+       EXYNOS4X12_GPIO_D11,
+       EXYNOS4X12_GPIO_D12,
+       EXYNOS4X12_GPIO_D13,
+       EXYNOS4X12_GPIO_D14,
+       EXYNOS4X12_GPIO_D15,
+       EXYNOS4X12_GPIO_D16,
+       EXYNOS4X12_GPIO_D17,
+       EXYNOS4X12_GPIO_F00 = 96,       /* 96 0x60 */
+       EXYNOS4X12_GPIO_F01,
+       EXYNOS4X12_GPIO_F02,
+       EXYNOS4X12_GPIO_F03,
+       EXYNOS4X12_GPIO_F04,
+       EXYNOS4X12_GPIO_F05,
+       EXYNOS4X12_GPIO_F06,
+       EXYNOS4X12_GPIO_F07,
+       EXYNOS4X12_GPIO_F10,            /* 104 0x68 */
+       EXYNOS4X12_GPIO_F11,
+       EXYNOS4X12_GPIO_F12,
+       EXYNOS4X12_GPIO_F13,
+       EXYNOS4X12_GPIO_F14,
+       EXYNOS4X12_GPIO_F15,
+       EXYNOS4X12_GPIO_F16,
+       EXYNOS4X12_GPIO_F17,
+       EXYNOS4X12_GPIO_F20,            /* 112 0x70 */
+       EXYNOS4X12_GPIO_F21,
+       EXYNOS4X12_GPIO_F22,
+       EXYNOS4X12_GPIO_F23,
+       EXYNOS4X12_GPIO_F24,
+       EXYNOS4X12_GPIO_F25,
+       EXYNOS4X12_GPIO_F26,
+       EXYNOS4X12_GPIO_F27,
+       EXYNOS4X12_GPIO_F30,            /* 120 0x78 */
+       EXYNOS4X12_GPIO_F31,
+       EXYNOS4X12_GPIO_F32,
+       EXYNOS4X12_GPIO_F33,
+       EXYNOS4X12_GPIO_F34,
+       EXYNOS4X12_GPIO_F35,
+       EXYNOS4X12_GPIO_F36,
+       EXYNOS4X12_GPIO_F37,
+       EXYNOS4X12_GPIO_J00 = 144,      /* 144 0x90 */
+       EXYNOS4X12_GPIO_J01,
+       EXYNOS4X12_GPIO_J02,
+       EXYNOS4X12_GPIO_J03,
+       EXYNOS4X12_GPIO_J04,
+       EXYNOS4X12_GPIO_J05,
+       EXYNOS4X12_GPIO_J06,
+       EXYNOS4X12_GPIO_J07,
+       EXYNOS4X12_GPIO_J10,            /* 152 0x98 */
+       EXYNOS4X12_GPIO_J11,
+       EXYNOS4X12_GPIO_J12,
+       EXYNOS4X12_GPIO_J13,
+       EXYNOS4X12_GPIO_J14,
+       EXYNOS4X12_GPIO_J15,
+       EXYNOS4X12_GPIO_J16,
+       EXYNOS4X12_GPIO_J17,
+
+       /* GPIO_PART2_STARTS */
+       EXYNOS4X12_GPIO_MAX_PORT_PART_1,/* 160 0xA0 */
+       EXYNOS4X12_GPIO_K00 = 176,      /* 176 0xB0 */
+       EXYNOS4X12_GPIO_K01,
+       EXYNOS4X12_GPIO_K02,
+       EXYNOS4X12_GPIO_K03,
+       EXYNOS4X12_GPIO_K04,
+       EXYNOS4X12_GPIO_K05,
+       EXYNOS4X12_GPIO_K06,
+       EXYNOS4X12_GPIO_K07,
+       EXYNOS4X12_GPIO_K10,            /* 184 0xB8 */
+       EXYNOS4X12_GPIO_K11,
+       EXYNOS4X12_GPIO_K12,
+       EXYNOS4X12_GPIO_K13,
+       EXYNOS4X12_GPIO_K14,
+       EXYNOS4X12_GPIO_K15,
+       EXYNOS4X12_GPIO_K16,
+       EXYNOS4X12_GPIO_K17,
+       EXYNOS4X12_GPIO_K20,            /* 192 0xC0 */
+       EXYNOS4X12_GPIO_K21,
+       EXYNOS4X12_GPIO_K22,
+       EXYNOS4X12_GPIO_K23,
+       EXYNOS4X12_GPIO_K24,
+       EXYNOS4X12_GPIO_K25,
+       EXYNOS4X12_GPIO_K26,
+       EXYNOS4X12_GPIO_K27,
+       EXYNOS4X12_GPIO_K30,            /* 200 0xC8 */
+       EXYNOS4X12_GPIO_K31,
+       EXYNOS4X12_GPIO_K32,
+       EXYNOS4X12_GPIO_K33,
+       EXYNOS4X12_GPIO_K34,
+       EXYNOS4X12_GPIO_K35,
+       EXYNOS4X12_GPIO_K36,
+       EXYNOS4X12_GPIO_K37,
+       EXYNOS4X12_GPIO_L00,            /* 208 0xD0 */
+       EXYNOS4X12_GPIO_L01,
+       EXYNOS4X12_GPIO_L02,
+       EXYNOS4X12_GPIO_L03,
+       EXYNOS4X12_GPIO_L04,
+       EXYNOS4X12_GPIO_L05,
+       EXYNOS4X12_GPIO_L06,
+       EXYNOS4X12_GPIO_L07,
+       EXYNOS4X12_GPIO_L10,            /* 216 0xD8 */
+       EXYNOS4X12_GPIO_L11,
+       EXYNOS4X12_GPIO_L12,
+       EXYNOS4X12_GPIO_L13,
+       EXYNOS4X12_GPIO_L14,
+       EXYNOS4X12_GPIO_L15,
+       EXYNOS4X12_GPIO_L16,
+       EXYNOS4X12_GPIO_L17,
+       EXYNOS4X12_GPIO_L20,            /* 224 0xE0 */
+       EXYNOS4X12_GPIO_L21,
+       EXYNOS4X12_GPIO_L22,
+       EXYNOS4X12_GPIO_L23,
+       EXYNOS4X12_GPIO_L24,
+       EXYNOS4X12_GPIO_L25,
+       EXYNOS4X12_GPIO_L26,
+       EXYNOS4X12_GPIO_L27,
+       EXYNOS4X12_GPIO_Y00,            /* 232 0xE8 */
+       EXYNOS4X12_GPIO_Y01,
+       EXYNOS4X12_GPIO_Y02,
+       EXYNOS4X12_GPIO_Y03,
+       EXYNOS4X12_GPIO_Y04,
+       EXYNOS4X12_GPIO_Y05,
+       EXYNOS4X12_GPIO_Y06,
+       EXYNOS4X12_GPIO_Y07,
+       EXYNOS4X12_GPIO_Y10,            /* 240 0xF0 */
+       EXYNOS4X12_GPIO_Y11,
+       EXYNOS4X12_GPIO_Y12,
+       EXYNOS4X12_GPIO_Y13,
+       EXYNOS4X12_GPIO_Y14,
+       EXYNOS4X12_GPIO_Y15,
+       EXYNOS4X12_GPIO_Y16,
+       EXYNOS4X12_GPIO_Y17,
+       EXYNOS4X12_GPIO_Y20,            /* 248 0xF8 */
+       EXYNOS4X12_GPIO_Y21,
+       EXYNOS4X12_GPIO_Y22,
+       EXYNOS4X12_GPIO_Y23,
+       EXYNOS4X12_GPIO_Y24,
+       EXYNOS4X12_GPIO_Y25,
+       EXYNOS4X12_GPIO_Y26,
+       EXYNOS4X12_GPIO_Y27,
+       EXYNOS4X12_GPIO_Y30,            /* 256 0x100 */
+       EXYNOS4X12_GPIO_Y31,
+       EXYNOS4X12_GPIO_Y32,
+       EXYNOS4X12_GPIO_Y33,
+       EXYNOS4X12_GPIO_Y34,
+       EXYNOS4X12_GPIO_Y35,
+       EXYNOS4X12_GPIO_Y36,
+       EXYNOS4X12_GPIO_Y37,
+       EXYNOS4X12_GPIO_Y40,            /* 264 0x108 */
+       EXYNOS4X12_GPIO_Y41,
+       EXYNOS4X12_GPIO_Y42,
+       EXYNOS4X12_GPIO_Y43,
+       EXYNOS4X12_GPIO_Y44,
+       EXYNOS4X12_GPIO_Y45,
+       EXYNOS4X12_GPIO_Y46,
+       EXYNOS4X12_GPIO_Y47,
+       EXYNOS4X12_GPIO_Y50,            /* 272 0x110 */
+       EXYNOS4X12_GPIO_Y51,
+       EXYNOS4X12_GPIO_Y52,
+       EXYNOS4X12_GPIO_Y53,
+       EXYNOS4X12_GPIO_Y54,
+       EXYNOS4X12_GPIO_Y55,
+       EXYNOS4X12_GPIO_Y56,
+       EXYNOS4X12_GPIO_Y57,
+       EXYNOS4X12_GPIO_Y60,            /* 280 0x118 */
+       EXYNOS4X12_GPIO_Y61,
+       EXYNOS4X12_GPIO_Y62,
+       EXYNOS4X12_GPIO_Y63,
+       EXYNOS4X12_GPIO_Y64,
+       EXYNOS4X12_GPIO_Y65,
+       EXYNOS4X12_GPIO_Y66,
+       EXYNOS4X12_GPIO_Y67,
+       EXYNOS4X12_GPIO_M00 = 312,      /* 312 0xF0 */
+       EXYNOS4X12_GPIO_M01,
+       EXYNOS4X12_GPIO_M02,
+       EXYNOS4X12_GPIO_M03,
+       EXYNOS4X12_GPIO_M04,
+       EXYNOS4X12_GPIO_M05,
+       EXYNOS4X12_GPIO_M06,
+       EXYNOS4X12_GPIO_M07,
+       EXYNOS4X12_GPIO_M10,            /* 320 0xF8 */
+       EXYNOS4X12_GPIO_M11,
+       EXYNOS4X12_GPIO_M12,
+       EXYNOS4X12_GPIO_M13,
+       EXYNOS4X12_GPIO_M14,
+       EXYNOS4X12_GPIO_M15,
+       EXYNOS4X12_GPIO_M16,
+       EXYNOS4X12_GPIO_M17,
+       EXYNOS4X12_GPIO_M20,            /* 328 0x100 */
+       EXYNOS4X12_GPIO_M21,
+       EXYNOS4X12_GPIO_M22,
+       EXYNOS4X12_GPIO_M23,
+       EXYNOS4X12_GPIO_M24,
+       EXYNOS4X12_GPIO_M25,
+       EXYNOS4X12_GPIO_M26,
+       EXYNOS4X12_GPIO_M27,
+       EXYNOS4X12_GPIO_M30,            /* 336 0x108 */
+       EXYNOS4X12_GPIO_M31,
+       EXYNOS4X12_GPIO_M32,
+       EXYNOS4X12_GPIO_M33,
+       EXYNOS4X12_GPIO_M34,
+       EXYNOS4X12_GPIO_M35,
+       EXYNOS4X12_GPIO_M36,
+       EXYNOS4X12_GPIO_M37,
+       EXYNOS4X12_GPIO_M40,            /* 344 0x110 */
+       EXYNOS4X12_GPIO_M41,
+       EXYNOS4X12_GPIO_M42,
+       EXYNOS4X12_GPIO_M43,
+       EXYNOS4X12_GPIO_M44,
+       EXYNOS4X12_GPIO_M45,
+       EXYNOS4X12_GPIO_M46,
+       EXYNOS4X12_GPIO_M47,
+       EXYNOS4X12_GPIO_X00 = 928,      /* 928 0x3A0 */
+       EXYNOS4X12_GPIO_X01,
+       EXYNOS4X12_GPIO_X02,
+       EXYNOS4X12_GPIO_X03,
+       EXYNOS4X12_GPIO_X04,
+       EXYNOS4X12_GPIO_X05,
+       EXYNOS4X12_GPIO_X06,
+       EXYNOS4X12_GPIO_X07,
+       EXYNOS4X12_GPIO_X10,            /* 936 0x3A8 */
+       EXYNOS4X12_GPIO_X11,
+       EXYNOS4X12_GPIO_X12,
+       EXYNOS4X12_GPIO_X13,
+       EXYNOS4X12_GPIO_X14,
+       EXYNOS4X12_GPIO_X15,
+       EXYNOS4X12_GPIO_X16,
+       EXYNOS4X12_GPIO_X17,
+       EXYNOS4X12_GPIO_X20,            /* 944 0x3B0 */
+       EXYNOS4X12_GPIO_X21,
+       EXYNOS4X12_GPIO_X22,
+       EXYNOS4X12_GPIO_X23,
+       EXYNOS4X12_GPIO_X24,
+       EXYNOS4X12_GPIO_X25,
+       EXYNOS4X12_GPIO_X26,
+       EXYNOS4X12_GPIO_X27,
+       EXYNOS4X12_GPIO_X30,            /* 952 0x3B8 */
+       EXYNOS4X12_GPIO_X31,
+       EXYNOS4X12_GPIO_X32,
+       EXYNOS4X12_GPIO_X33,
+       EXYNOS4X12_GPIO_X34,
+       EXYNOS4X12_GPIO_X35,
+       EXYNOS4X12_GPIO_X36,
+       EXYNOS4X12_GPIO_X37,
+
+       /* GPIO_PART3_STARTS */
+       EXYNOS4X12_GPIO_MAX_PORT_PART_2,/* 960 0x3C0 */
+       EXYNOS4X12_GPIO_Z0 = EXYNOS4X12_GPIO_MAX_PORT_PART_2,
+       EXYNOS4X12_GPIO_Z1,
+       EXYNOS4X12_GPIO_Z2,
+       EXYNOS4X12_GPIO_Z3,
+       EXYNOS4X12_GPIO_Z4,
+       EXYNOS4X12_GPIO_Z5,
+       EXYNOS4X12_GPIO_Z6,
+       EXYNOS4X12_GPIO_Z7,
+
+       /* GPIO_PART4_STARTS */
+       EXYNOS4X12_GPIO_MAX_PORT_PART_3,/* 968 0x3C8 */
+       EXYNOS4X12_GPIO_V00 = EXYNOS4X12_GPIO_MAX_PORT_PART_3,
+       EXYNOS4X12_GPIO_V01,
+       EXYNOS4X12_GPIO_V02,
+       EXYNOS4X12_GPIO_V03,
+       EXYNOS4X12_GPIO_V04,
+       EXYNOS4X12_GPIO_V05,
+       EXYNOS4X12_GPIO_V06,
+       EXYNOS4X12_GPIO_V07,
+       EXYNOS4X12_GPIO_V10,            /* 976 0x3D0 */
+       EXYNOS4X12_GPIO_V11,
+       EXYNOS4X12_GPIO_V12,
+       EXYNOS4X12_GPIO_V13,
+       EXYNOS4X12_GPIO_V14,
+       EXYNOS4X12_GPIO_V15,
+       EXYNOS4X12_GPIO_V16,
+       EXYNOS4X12_GPIO_V17,
+       EXYNOS4X12_GPIO_V20 = 992,      /* 992 0x3E0 */
+       EXYNOS4X12_GPIO_V21,
+       EXYNOS4X12_GPIO_V22,
+       EXYNOS4X12_GPIO_V23,
+       EXYNOS4X12_GPIO_V24,
+       EXYNOS4X12_GPIO_V25,
+       EXYNOS4X12_GPIO_V26,
+       EXYNOS4X12_GPIO_V27,
+       EXYNOS4X12_GPIO_V30 = 1000,     /* 1000 0x3E8 */
+       EXYNOS4X12_GPIO_V31,
+       EXYNOS4X12_GPIO_V32,
+       EXYNOS4X12_GPIO_V33,
+       EXYNOS4X12_GPIO_V34,
+       EXYNOS4X12_GPIO_V35,
+       EXYNOS4X12_GPIO_V36,
+       EXYNOS4X12_GPIO_V37,
+       EXYNOS4X12_GPIO_V40 = 1016,     /* 1016 0x3F8 */
+       EXYNOS4X12_GPIO_V41,
+       EXYNOS4X12_GPIO_V42,
+       EXYNOS4X12_GPIO_V43,
+       EXYNOS4X12_GPIO_V44,
+       EXYNOS4X12_GPIO_V45,
+       EXYNOS4X12_GPIO_V46,
+       EXYNOS4X12_GPIO_V47,
+
+       EXYNOS4X12_GPIO_MAX_PORT
 };
 
-struct exynos4x12_gpio_part3 {
-       struct s5p_gpio_bank z;
+enum exynos5_gpio_pin {
+       /* GPIO_PART1_STARTS */
+       EXYNOS5_GPIO_A00,               /* 0 */
+       EXYNOS5_GPIO_A01,
+       EXYNOS5_GPIO_A02,
+       EXYNOS5_GPIO_A03,
+       EXYNOS5_GPIO_A04,
+       EXYNOS5_GPIO_A05,
+       EXYNOS5_GPIO_A06,
+       EXYNOS5_GPIO_A07,
+       EXYNOS5_GPIO_A10,               /* 8 */
+       EXYNOS5_GPIO_A11,
+       EXYNOS5_GPIO_A12,
+       EXYNOS5_GPIO_A13,
+       EXYNOS5_GPIO_A14,
+       EXYNOS5_GPIO_A15,
+       EXYNOS5_GPIO_A16,
+       EXYNOS5_GPIO_A17,
+       EXYNOS5_GPIO_A20,               /* 16 0x10 */
+       EXYNOS5_GPIO_A21,
+       EXYNOS5_GPIO_A22,
+       EXYNOS5_GPIO_A23,
+       EXYNOS5_GPIO_A24,
+       EXYNOS5_GPIO_A25,
+       EXYNOS5_GPIO_A26,
+       EXYNOS5_GPIO_A27,
+       EXYNOS5_GPIO_B00,               /* 24 0x18 */
+       EXYNOS5_GPIO_B01,
+       EXYNOS5_GPIO_B02,
+       EXYNOS5_GPIO_B03,
+       EXYNOS5_GPIO_B04,
+       EXYNOS5_GPIO_B05,
+       EXYNOS5_GPIO_B06,
+       EXYNOS5_GPIO_B07,
+       EXYNOS5_GPIO_B10,               /* 32 0x20 */
+       EXYNOS5_GPIO_B11,
+       EXYNOS5_GPIO_B12,
+       EXYNOS5_GPIO_B13,
+       EXYNOS5_GPIO_B14,
+       EXYNOS5_GPIO_B15,
+       EXYNOS5_GPIO_B16,
+       EXYNOS5_GPIO_B17,
+       EXYNOS5_GPIO_B20,               /* 40 0x28 */
+       EXYNOS5_GPIO_B21,
+       EXYNOS5_GPIO_B22,
+       EXYNOS5_GPIO_B23,
+       EXYNOS5_GPIO_B24,
+       EXYNOS5_GPIO_B25,
+       EXYNOS5_GPIO_B26,
+       EXYNOS5_GPIO_B27,
+       EXYNOS5_GPIO_B30,               /* 48 0x39 */
+       EXYNOS5_GPIO_B31,
+       EXYNOS5_GPIO_B32,
+       EXYNOS5_GPIO_B33,
+       EXYNOS5_GPIO_B34,
+       EXYNOS5_GPIO_B35,
+       EXYNOS5_GPIO_B36,
+       EXYNOS5_GPIO_B37,
+       EXYNOS5_GPIO_C00,               /* 56 0x38 */
+       EXYNOS5_GPIO_C01,
+       EXYNOS5_GPIO_C02,
+       EXYNOS5_GPIO_C03,
+       EXYNOS5_GPIO_C04,
+       EXYNOS5_GPIO_C05,
+       EXYNOS5_GPIO_C06,
+       EXYNOS5_GPIO_C07,
+       EXYNOS5_GPIO_C10,               /* 64 0x40 */
+       EXYNOS5_GPIO_C11,
+       EXYNOS5_GPIO_C12,
+       EXYNOS5_GPIO_C13,
+       EXYNOS5_GPIO_C14,
+       EXYNOS5_GPIO_C15,
+       EXYNOS5_GPIO_C16,
+       EXYNOS5_GPIO_C17,
+       EXYNOS5_GPIO_C20,               /* 72 0x48 */
+       EXYNOS5_GPIO_C21,
+       EXYNOS5_GPIO_C22,
+       EXYNOS5_GPIO_C23,
+       EXYNOS5_GPIO_C24,
+       EXYNOS5_GPIO_C25,
+       EXYNOS5_GPIO_C26,
+       EXYNOS5_GPIO_C27,
+       EXYNOS5_GPIO_C30,               /* 80 0x50 */
+       EXYNOS5_GPIO_C31,
+       EXYNOS5_GPIO_C32,
+       EXYNOS5_GPIO_C33,
+       EXYNOS5_GPIO_C34,
+       EXYNOS5_GPIO_C35,
+       EXYNOS5_GPIO_C36,
+       EXYNOS5_GPIO_C37,
+       EXYNOS5_GPIO_D00,               /* 88 0x58 */
+       EXYNOS5_GPIO_D01,
+       EXYNOS5_GPIO_D02,
+       EXYNOS5_GPIO_D03,
+       EXYNOS5_GPIO_D04,
+       EXYNOS5_GPIO_D05,
+       EXYNOS5_GPIO_D06,
+       EXYNOS5_GPIO_D07,
+       EXYNOS5_GPIO_D10,               /* 96 0x60 */
+       EXYNOS5_GPIO_D11,
+       EXYNOS5_GPIO_D12,
+       EXYNOS5_GPIO_D13,
+       EXYNOS5_GPIO_D14,
+       EXYNOS5_GPIO_D15,
+       EXYNOS5_GPIO_D16,
+       EXYNOS5_GPIO_D17,
+       EXYNOS5_GPIO_Y00,               /* 104 0x68 */
+       EXYNOS5_GPIO_Y01,
+       EXYNOS5_GPIO_Y02,
+       EXYNOS5_GPIO_Y03,
+       EXYNOS5_GPIO_Y04,
+       EXYNOS5_GPIO_Y05,
+       EXYNOS5_GPIO_Y06,
+       EXYNOS5_GPIO_Y07,
+       EXYNOS5_GPIO_Y10,               /* 112 0x70 */
+       EXYNOS5_GPIO_Y11,
+       EXYNOS5_GPIO_Y12,
+       EXYNOS5_GPIO_Y13,
+       EXYNOS5_GPIO_Y14,
+       EXYNOS5_GPIO_Y15,
+       EXYNOS5_GPIO_Y16,
+       EXYNOS5_GPIO_Y17,
+       EXYNOS5_GPIO_Y20,               /* 120 0x78 */
+       EXYNOS5_GPIO_Y21,
+       EXYNOS5_GPIO_Y22,
+       EXYNOS5_GPIO_Y23,
+       EXYNOS5_GPIO_Y24,
+       EXYNOS5_GPIO_Y25,
+       EXYNOS5_GPIO_Y26,
+       EXYNOS5_GPIO_Y27,
+       EXYNOS5_GPIO_Y30,               /* 128 0x80 */
+       EXYNOS5_GPIO_Y31,
+       EXYNOS5_GPIO_Y32,
+       EXYNOS5_GPIO_Y33,
+       EXYNOS5_GPIO_Y34,
+       EXYNOS5_GPIO_Y35,
+       EXYNOS5_GPIO_Y36,
+       EXYNOS5_GPIO_Y37,
+       EXYNOS5_GPIO_Y40,               /* 136 0x88 */
+       EXYNOS5_GPIO_Y41,
+       EXYNOS5_GPIO_Y42,
+       EXYNOS5_GPIO_Y43,
+       EXYNOS5_GPIO_Y44,
+       EXYNOS5_GPIO_Y45,
+       EXYNOS5_GPIO_Y46,
+       EXYNOS5_GPIO_Y47,
+       EXYNOS5_GPIO_Y50,               /* 144 0x90 */
+       EXYNOS5_GPIO_Y51,
+       EXYNOS5_GPIO_Y52,
+       EXYNOS5_GPIO_Y53,
+       EXYNOS5_GPIO_Y54,
+       EXYNOS5_GPIO_Y55,
+       EXYNOS5_GPIO_Y56,
+       EXYNOS5_GPIO_Y57,
+       EXYNOS5_GPIO_Y60,               /* 152 0x98 */
+       EXYNOS5_GPIO_Y61,
+       EXYNOS5_GPIO_Y62,
+       EXYNOS5_GPIO_Y63,
+       EXYNOS5_GPIO_Y64,
+       EXYNOS5_GPIO_Y65,
+       EXYNOS5_GPIO_Y66,
+       EXYNOS5_GPIO_Y67,
+
+       /* GPIO_PART2_STARTS */
+       EXYNOS5_GPIO_MAX_PORT_PART_1,   /* 160 0xa0 */
+       EXYNOS5_GPIO_C40 = EXYNOS5_GPIO_MAX_PORT_PART_1,
+       EXYNOS5_GPIO_C41,
+       EXYNOS5_GPIO_C42,
+       EXYNOS5_GPIO_C43,
+       EXYNOS5_GPIO_C44,
+       EXYNOS5_GPIO_C45,
+       EXYNOS5_GPIO_C46,
+       EXYNOS5_GPIO_C47,
+
+       /* GPIO_PART3_STARTS */
+       EXYNOS5_GPIO_MAX_PORT_PART_2,   /* 168 0xa8 */
+       EXYNOS5_GPIO_X00 = EXYNOS5_GPIO_MAX_PORT_PART_2,
+       EXYNOS5_GPIO_X01,
+       EXYNOS5_GPIO_X02,
+       EXYNOS5_GPIO_X03,
+       EXYNOS5_GPIO_X04,
+       EXYNOS5_GPIO_X05,
+       EXYNOS5_GPIO_X06,
+       EXYNOS5_GPIO_X07,
+       EXYNOS5_GPIO_X10,               /* 176 0xb0 */
+       EXYNOS5_GPIO_X11,
+       EXYNOS5_GPIO_X12,
+       EXYNOS5_GPIO_X13,
+       EXYNOS5_GPIO_X14,
+       EXYNOS5_GPIO_X15,
+       EXYNOS5_GPIO_X16,
+       EXYNOS5_GPIO_X17,
+       EXYNOS5_GPIO_X20,               /* 184 0xb8 */
+       EXYNOS5_GPIO_X21,
+       EXYNOS5_GPIO_X22,
+       EXYNOS5_GPIO_X23,
+       EXYNOS5_GPIO_X24,
+       EXYNOS5_GPIO_X25,
+       EXYNOS5_GPIO_X26,
+       EXYNOS5_GPIO_X27,
+       EXYNOS5_GPIO_X30,               /* 192 0xc0 */
+       EXYNOS5_GPIO_X31,
+       EXYNOS5_GPIO_X32,
+       EXYNOS5_GPIO_X33,
+       EXYNOS5_GPIO_X34,
+       EXYNOS5_GPIO_X35,
+       EXYNOS5_GPIO_X36,
+       EXYNOS5_GPIO_X37,
+
+       /* GPIO_PART4_STARTS */
+       EXYNOS5_GPIO_MAX_PORT_PART_3,   /* 200 0xc8 */
+       EXYNOS5_GPIO_E00 = EXYNOS5_GPIO_MAX_PORT_PART_3,
+       EXYNOS5_GPIO_E01,
+       EXYNOS5_GPIO_E02,
+       EXYNOS5_GPIO_E03,
+       EXYNOS5_GPIO_E04,
+       EXYNOS5_GPIO_E05,
+       EXYNOS5_GPIO_E06,
+       EXYNOS5_GPIO_E07,
+       EXYNOS5_GPIO_E10,               /* 208 0xd0 */
+       EXYNOS5_GPIO_E11,
+       EXYNOS5_GPIO_E12,
+       EXYNOS5_GPIO_E13,
+       EXYNOS5_GPIO_E14,
+       EXYNOS5_GPIO_E15,
+       EXYNOS5_GPIO_E16,
+       EXYNOS5_GPIO_E17,
+       EXYNOS5_GPIO_F00,               /* 216 0xd8 */
+       EXYNOS5_GPIO_F01,
+       EXYNOS5_GPIO_F02,
+       EXYNOS5_GPIO_F03,
+       EXYNOS5_GPIO_F04,
+       EXYNOS5_GPIO_F05,
+       EXYNOS5_GPIO_F06,
+       EXYNOS5_GPIO_F07,
+       EXYNOS5_GPIO_F10,               /* 224 0xe0 */
+       EXYNOS5_GPIO_F11,
+       EXYNOS5_GPIO_F12,
+       EXYNOS5_GPIO_F13,
+       EXYNOS5_GPIO_F14,
+       EXYNOS5_GPIO_F15,
+       EXYNOS5_GPIO_F16,
+       EXYNOS5_GPIO_F17,
+       EXYNOS5_GPIO_G00,               /* 232 0xe8 */
+       EXYNOS5_GPIO_G01,
+       EXYNOS5_GPIO_G02,
+       EXYNOS5_GPIO_G03,
+       EXYNOS5_GPIO_G04,
+       EXYNOS5_GPIO_G05,
+       EXYNOS5_GPIO_G06,
+       EXYNOS5_GPIO_G07,
+       EXYNOS5_GPIO_G10,               /* 240 0xf0 */
+       EXYNOS5_GPIO_G11,
+       EXYNOS5_GPIO_G12,
+       EXYNOS5_GPIO_G13,
+       EXYNOS5_GPIO_G14,
+       EXYNOS5_GPIO_G15,
+       EXYNOS5_GPIO_G16,
+       EXYNOS5_GPIO_G17,
+       EXYNOS5_GPIO_G20,               /* 248 0xf8 */
+       EXYNOS5_GPIO_G21,
+       EXYNOS5_GPIO_G22,
+       EXYNOS5_GPIO_G23,
+       EXYNOS5_GPIO_G24,
+       EXYNOS5_GPIO_G25,
+       EXYNOS5_GPIO_G26,
+       EXYNOS5_GPIO_G27,
+       EXYNOS5_GPIO_H00,               /* 256 0x100 */
+       EXYNOS5_GPIO_H01,
+       EXYNOS5_GPIO_H02,
+       EXYNOS5_GPIO_H03,
+       EXYNOS5_GPIO_H04,
+       EXYNOS5_GPIO_H05,
+       EXYNOS5_GPIO_H06,
+       EXYNOS5_GPIO_H07,
+       EXYNOS5_GPIO_H10,               /* 264 0x108 */
+       EXYNOS5_GPIO_H11,
+       EXYNOS5_GPIO_H12,
+       EXYNOS5_GPIO_H13,
+       EXYNOS5_GPIO_H14,
+       EXYNOS5_GPIO_H15,
+       EXYNOS5_GPIO_H16,
+       EXYNOS5_GPIO_H17,
+
+       /* GPIO_PART4_STARTS */
+       EXYNOS5_GPIO_MAX_PORT_PART_4,   /* 272 0x110 */
+       EXYNOS5_GPIO_V00 = EXYNOS5_GPIO_MAX_PORT_PART_4,
+       EXYNOS5_GPIO_V01,
+       EXYNOS5_GPIO_V02,
+       EXYNOS5_GPIO_V03,
+       EXYNOS5_GPIO_V04,
+       EXYNOS5_GPIO_V05,
+       EXYNOS5_GPIO_V06,
+       EXYNOS5_GPIO_V07,
+       EXYNOS5_GPIO_V10,               /* 280 0x118 */
+       EXYNOS5_GPIO_V11,
+       EXYNOS5_GPIO_V12,
+       EXYNOS5_GPIO_V13,
+       EXYNOS5_GPIO_V14,
+       EXYNOS5_GPIO_V15,
+       EXYNOS5_GPIO_V16,
+       EXYNOS5_GPIO_V17,
+
+       /* GPIO_PART5_STARTS */
+       EXYNOS5_GPIO_MAX_PORT_PART_5,   /* 288 0x120 */
+       EXYNOS5_GPIO_V20 = EXYNOS5_GPIO_MAX_PORT_PART_5,
+       EXYNOS5_GPIO_V21,
+       EXYNOS5_GPIO_V22,
+       EXYNOS5_GPIO_V23,
+       EXYNOS5_GPIO_V24,
+       EXYNOS5_GPIO_V25,
+       EXYNOS5_GPIO_V26,
+       EXYNOS5_GPIO_V27,
+       EXYNOS5_GPIO_V30,               /* 296 0x128 */
+       EXYNOS5_GPIO_V31,
+       EXYNOS5_GPIO_V32,
+       EXYNOS5_GPIO_V33,
+       EXYNOS5_GPIO_V34,
+       EXYNOS5_GPIO_V35,
+       EXYNOS5_GPIO_V36,
+       EXYNOS5_GPIO_V37,
+
+       /* GPIO_PART6_STARTS */
+       EXYNOS5_GPIO_MAX_PORT_PART_6,   /* 304 0x130 */
+       EXYNOS5_GPIO_V40 = EXYNOS5_GPIO_MAX_PORT_PART_6,
+       EXYNOS5_GPIO_V41,
+       EXYNOS5_GPIO_V42,
+       EXYNOS5_GPIO_V43,
+       EXYNOS5_GPIO_V44,
+       EXYNOS5_GPIO_V45,
+       EXYNOS5_GPIO_V46,
+       EXYNOS5_GPIO_V47,
+
+       /* GPIO_PART7_STARTS */         /* 312 0x138 */
+       EXYNOS5_GPIO_MAX_PORT_PART_7,
+       EXYNOS5_GPIO_Z0 = EXYNOS5_GPIO_MAX_PORT_PART_7,
+       EXYNOS5_GPIO_Z1,
+       EXYNOS5_GPIO_Z2,
+       EXYNOS5_GPIO_Z3,
+       EXYNOS5_GPIO_Z4,
+       EXYNOS5_GPIO_Z5,
+       EXYNOS5_GPIO_Z6,
+       EXYNOS5_GPIO_MAX_PORT
 };
 
-struct exynos4x12_gpio_part4 {
-       struct s5p_gpio_bank v0;
-       struct s5p_gpio_bank v1;
-       struct s5p_gpio_bank res1[0x1];
-       struct s5p_gpio_bank v2;
-       struct s5p_gpio_bank v3;
-       struct s5p_gpio_bank res2[0x1];
-       struct s5p_gpio_bank v4;
+enum exynos5420_gpio_pin {
+       /* GPIO_PART1_STARTS */
+       EXYNOS5420_GPIO_A00,            /* 0 */
+       EXYNOS5420_GPIO_A01,
+       EXYNOS5420_GPIO_A02,
+       EXYNOS5420_GPIO_A03,
+       EXYNOS5420_GPIO_A04,
+       EXYNOS5420_GPIO_A05,
+       EXYNOS5420_GPIO_A06,
+       EXYNOS5420_GPIO_A07,
+       EXYNOS5420_GPIO_A10,            /* 8 */
+       EXYNOS5420_GPIO_A11,
+       EXYNOS5420_GPIO_A12,
+       EXYNOS5420_GPIO_A13,
+       EXYNOS5420_GPIO_A14,
+       EXYNOS5420_GPIO_A15,
+       EXYNOS5420_GPIO_A16,
+       EXYNOS5420_GPIO_A17,
+       EXYNOS5420_GPIO_A20,            /* 16 0x10 */
+       EXYNOS5420_GPIO_A21,
+       EXYNOS5420_GPIO_A22,
+       EXYNOS5420_GPIO_A23,
+       EXYNOS5420_GPIO_A24,
+       EXYNOS5420_GPIO_A25,
+       EXYNOS5420_GPIO_A26,
+       EXYNOS5420_GPIO_A27,
+       EXYNOS5420_GPIO_B00,            /* 24 0x18 */
+       EXYNOS5420_GPIO_B01,
+       EXYNOS5420_GPIO_B02,
+       EXYNOS5420_GPIO_B03,
+       EXYNOS5420_GPIO_B04,
+       EXYNOS5420_GPIO_B05,
+       EXYNOS5420_GPIO_B06,
+       EXYNOS5420_GPIO_B07,
+       EXYNOS5420_GPIO_B10,            /* 32 0x20 */
+       EXYNOS5420_GPIO_B11,
+       EXYNOS5420_GPIO_B12,
+       EXYNOS5420_GPIO_B13,
+       EXYNOS5420_GPIO_B14,
+       EXYNOS5420_GPIO_B15,
+       EXYNOS5420_GPIO_B16,
+       EXYNOS5420_GPIO_B17,
+       EXYNOS5420_GPIO_B20,            /* 40 0x28 */
+       EXYNOS5420_GPIO_B21,
+       EXYNOS5420_GPIO_B22,
+       EXYNOS5420_GPIO_B23,
+       EXYNOS5420_GPIO_B24,
+       EXYNOS5420_GPIO_B25,
+       EXYNOS5420_GPIO_B26,
+       EXYNOS5420_GPIO_B27,
+       EXYNOS5420_GPIO_B30,            /* 48 0x30 */
+       EXYNOS5420_GPIO_B31,
+       EXYNOS5420_GPIO_B32,
+       EXYNOS5420_GPIO_B33,
+       EXYNOS5420_GPIO_B34,
+       EXYNOS5420_GPIO_B35,
+       EXYNOS5420_GPIO_B36,
+       EXYNOS5420_GPIO_B37,
+       EXYNOS5420_GPIO_B40,            /* 56 0x38 */
+       EXYNOS5420_GPIO_B41,
+       EXYNOS5420_GPIO_B42,
+       EXYNOS5420_GPIO_B43,
+       EXYNOS5420_GPIO_B44,
+       EXYNOS5420_GPIO_B45,
+       EXYNOS5420_GPIO_B46,
+       EXYNOS5420_GPIO_B47,
+       EXYNOS5420_GPIO_H00,            /* 64 0x40 */
+       EXYNOS5420_GPIO_H01,
+       EXYNOS5420_GPIO_H02,
+       EXYNOS5420_GPIO_H03,
+       EXYNOS5420_GPIO_H04,
+       EXYNOS5420_GPIO_H05,
+       EXYNOS5420_GPIO_H06,
+       EXYNOS5420_GPIO_H07,
+
+       /* GPIO PART 2 STARTS*/
+       EXYNOS5420_GPIO_MAX_PORT_PART_1,/* 72 0x48 */
+       EXYNOS5420_GPIO_Y70 = EXYNOS5420_GPIO_MAX_PORT_PART_1,
+       EXYNOS5420_GPIO_Y71,
+       EXYNOS5420_GPIO_Y72,
+       EXYNOS5420_GPIO_Y73,
+       EXYNOS5420_GPIO_Y74,
+       EXYNOS5420_GPIO_Y75,
+       EXYNOS5420_GPIO_Y76,
+       EXYNOS5420_GPIO_Y77,
+
+       /* GPIO PART 3 STARTS*/
+       EXYNOS5420_GPIO_MAX_PORT_PART_2,/* 80 0x50 */
+       EXYNOS5420_GPIO_X00 = EXYNOS5420_GPIO_MAX_PORT_PART_2,
+       EXYNOS5420_GPIO_X01,
+       EXYNOS5420_GPIO_X02,
+       EXYNOS5420_GPIO_X03,
+       EXYNOS5420_GPIO_X04,
+       EXYNOS5420_GPIO_X05,
+       EXYNOS5420_GPIO_X06,
+       EXYNOS5420_GPIO_X07,
+       EXYNOS5420_GPIO_X10,            /* 88 0x58 */
+       EXYNOS5420_GPIO_X11,
+       EXYNOS5420_GPIO_X12,
+       EXYNOS5420_GPIO_X13,
+       EXYNOS5420_GPIO_X14,
+       EXYNOS5420_GPIO_X15,
+       EXYNOS5420_GPIO_X16,
+       EXYNOS5420_GPIO_X17,
+       EXYNOS5420_GPIO_X20,            /* 96 0x60 */
+       EXYNOS5420_GPIO_X21,
+       EXYNOS5420_GPIO_X22,
+       EXYNOS5420_GPIO_X23,
+       EXYNOS5420_GPIO_X24,
+       EXYNOS5420_GPIO_X25,
+       EXYNOS5420_GPIO_X26,
+       EXYNOS5420_GPIO_X27,
+       EXYNOS5420_GPIO_X30,            /* 104 0x68 */
+       EXYNOS5420_GPIO_X31,
+       EXYNOS5420_GPIO_X32,
+       EXYNOS5420_GPIO_X33,
+       EXYNOS5420_GPIO_X34,
+       EXYNOS5420_GPIO_X35,
+       EXYNOS5420_GPIO_X36,
+       EXYNOS5420_GPIO_X37,
+
+       /* GPIO PART 4 STARTS*/
+       EXYNOS5420_GPIO_MAX_PORT_PART_3,/* 112 0x70 */
+       EXYNOS5420_GPIO_C00 = EXYNOS5420_GPIO_MAX_PORT_PART_3,
+       EXYNOS5420_GPIO_C01,
+       EXYNOS5420_GPIO_C02,
+       EXYNOS5420_GPIO_C03,
+       EXYNOS5420_GPIO_C04,
+       EXYNOS5420_GPIO_C05,
+       EXYNOS5420_GPIO_C06,
+       EXYNOS5420_GPIO_C07,
+       EXYNOS5420_GPIO_C10,            /* 120 0x78 */
+       EXYNOS5420_GPIO_C11,
+       EXYNOS5420_GPIO_C12,
+       EXYNOS5420_GPIO_C13,
+       EXYNOS5420_GPIO_C14,
+       EXYNOS5420_GPIO_C15,
+       EXYNOS5420_GPIO_C16,
+       EXYNOS5420_GPIO_C17,
+       EXYNOS5420_GPIO_C20,            /* 128 0x80 */
+       EXYNOS5420_GPIO_C21,
+       EXYNOS5420_GPIO_C22,
+       EXYNOS5420_GPIO_C23,
+       EXYNOS5420_GPIO_C24,
+       EXYNOS5420_GPIO_C25,
+       EXYNOS5420_GPIO_C26,
+       EXYNOS5420_GPIO_C27,
+       EXYNOS5420_GPIO_C30,            /* 136 0x88 */
+       EXYNOS5420_GPIO_C31,
+       EXYNOS5420_GPIO_C32,
+       EXYNOS5420_GPIO_C33,
+       EXYNOS5420_GPIO_C34,
+       EXYNOS5420_GPIO_C35,
+       EXYNOS5420_GPIO_C36,
+       EXYNOS5420_GPIO_C37,
+       EXYNOS5420_GPIO_C40,            /* 144 0x90 */
+       EXYNOS5420_GPIO_C41,
+       EXYNOS5420_GPIO_C42,
+       EXYNOS5420_GPIO_C43,
+       EXYNOS5420_GPIO_C44,
+       EXYNOS5420_GPIO_C45,
+       EXYNOS5420_GPIO_C46,
+       EXYNOS5420_GPIO_C47,
+       EXYNOS5420_GPIO_D10,            /* 152 0x98 */
+       EXYNOS5420_GPIO_D11,
+       EXYNOS5420_GPIO_D12,
+       EXYNOS5420_GPIO_D13,
+       EXYNOS5420_GPIO_D14,
+       EXYNOS5420_GPIO_D15,
+       EXYNOS5420_GPIO_D16,
+       EXYNOS5420_GPIO_D17,
+       EXYNOS5420_GPIO_Y00,            /* 160 0xa0 */
+       EXYNOS5420_GPIO_Y01,
+       EXYNOS5420_GPIO_Y02,
+       EXYNOS5420_GPIO_Y03,
+       EXYNOS5420_GPIO_Y04,
+       EXYNOS5420_GPIO_Y05,
+       EXYNOS5420_GPIO_Y06,
+       EXYNOS5420_GPIO_Y07,
+       EXYNOS5420_GPIO_Y10,            /* 168 0xa8 */
+       EXYNOS5420_GPIO_Y11,
+       EXYNOS5420_GPIO_Y12,
+       EXYNOS5420_GPIO_Y13,
+       EXYNOS5420_GPIO_Y14,
+       EXYNOS5420_GPIO_Y15,
+       EXYNOS5420_GPIO_Y16,
+       EXYNOS5420_GPIO_Y17,
+       EXYNOS5420_GPIO_Y20,            /* 176 0xb0 */
+       EXYNOS5420_GPIO_Y21,
+       EXYNOS5420_GPIO_Y22,
+       EXYNOS5420_GPIO_Y23,
+       EXYNOS5420_GPIO_Y24,
+       EXYNOS5420_GPIO_Y25,
+       EXYNOS5420_GPIO_Y26,
+       EXYNOS5420_GPIO_Y27,
+       EXYNOS5420_GPIO_Y30,            /* 184 0xb8 */
+       EXYNOS5420_GPIO_Y31,
+       EXYNOS5420_GPIO_Y32,
+       EXYNOS5420_GPIO_Y33,
+       EXYNOS5420_GPIO_Y34,
+       EXYNOS5420_GPIO_Y35,
+       EXYNOS5420_GPIO_Y36,
+       EXYNOS5420_GPIO_Y37,
+       EXYNOS5420_GPIO_Y40,            /* 192 0xc0 */
+       EXYNOS5420_GPIO_Y41,
+       EXYNOS5420_GPIO_Y42,
+       EXYNOS5420_GPIO_Y43,
+       EXYNOS5420_GPIO_Y44,
+       EXYNOS5420_GPIO_Y45,
+       EXYNOS5420_GPIO_Y46,
+       EXYNOS5420_GPIO_Y47,
+       EXYNOS5420_GPIO_Y50,            /* 200 0xc8 */
+       EXYNOS5420_GPIO_Y51,
+       EXYNOS5420_GPIO_Y52,
+       EXYNOS5420_GPIO_Y53,
+       EXYNOS5420_GPIO_Y54,
+       EXYNOS5420_GPIO_Y55,
+       EXYNOS5420_GPIO_Y56,
+       EXYNOS5420_GPIO_Y57,
+       EXYNOS5420_GPIO_Y60,            /* 208 0xd0 */
+       EXYNOS5420_GPIO_Y61,
+       EXYNOS5420_GPIO_Y62,
+       EXYNOS5420_GPIO_Y63,
+       EXYNOS5420_GPIO_Y64,
+       EXYNOS5420_GPIO_Y65,
+       EXYNOS5420_GPIO_Y66,
+       EXYNOS5420_GPIO_Y67,
+
+       /* GPIO_PART5_STARTS */
+       EXYNOS5420_GPIO_MAX_PORT_PART_4,/* 216 0xd8 */
+       EXYNOS5420_GPIO_E00 = EXYNOS5420_GPIO_MAX_PORT_PART_4,
+       EXYNOS5420_GPIO_E01,
+       EXYNOS5420_GPIO_E02,
+       EXYNOS5420_GPIO_E03,
+       EXYNOS5420_GPIO_E04,
+       EXYNOS5420_GPIO_E05,
+       EXYNOS5420_GPIO_E06,
+       EXYNOS5420_GPIO_E07,
+       EXYNOS5420_GPIO_E10,            /* 224 0xe0 */
+       EXYNOS5420_GPIO_E11,
+       EXYNOS5420_GPIO_E12,
+       EXYNOS5420_GPIO_E13,
+       EXYNOS5420_GPIO_E14,
+       EXYNOS5420_GPIO_E15,
+       EXYNOS5420_GPIO_E16,
+       EXYNOS5420_GPIO_E17,
+       EXYNOS5420_GPIO_F00,            /* 232 0xe8 */
+       EXYNOS5420_GPIO_F01,
+       EXYNOS5420_GPIO_F02,
+       EXYNOS5420_GPIO_F03,
+       EXYNOS5420_GPIO_F04,
+       EXYNOS5420_GPIO_F05,
+       EXYNOS5420_GPIO_F06,
+       EXYNOS5420_GPIO_F07,
+       EXYNOS5420_GPIO_F10,            /* 240 0xf0 */
+       EXYNOS5420_GPIO_F11,
+       EXYNOS5420_GPIO_F12,
+       EXYNOS5420_GPIO_F13,
+       EXYNOS5420_GPIO_F14,
+       EXYNOS5420_GPIO_F15,
+       EXYNOS5420_GPIO_F16,
+       EXYNOS5420_GPIO_F17,
+       EXYNOS5420_GPIO_G00,            /* 248 0xf8 */
+       EXYNOS5420_GPIO_G01,
+       EXYNOS5420_GPIO_G02,
+       EXYNOS5420_GPIO_G03,
+       EXYNOS5420_GPIO_G04,
+       EXYNOS5420_GPIO_G05,
+       EXYNOS5420_GPIO_G06,
+       EXYNOS5420_GPIO_G07,
+       EXYNOS5420_GPIO_G10,            /* 256 0x100 */
+       EXYNOS5420_GPIO_G11,
+       EXYNOS5420_GPIO_G12,
+       EXYNOS5420_GPIO_G13,
+       EXYNOS5420_GPIO_G14,
+       EXYNOS5420_GPIO_G15,
+       EXYNOS5420_GPIO_G16,
+       EXYNOS5420_GPIO_G17,
+       EXYNOS5420_GPIO_G20,            /* 264 0x108 */
+       EXYNOS5420_GPIO_G21,
+       EXYNOS5420_GPIO_G22,
+       EXYNOS5420_GPIO_G23,
+       EXYNOS5420_GPIO_G24,
+       EXYNOS5420_GPIO_G25,
+       EXYNOS5420_GPIO_G26,
+       EXYNOS5420_GPIO_G27,
+       EXYNOS5420_GPIO_J40,            /* 272 0x110 */
+       EXYNOS5420_GPIO_J41,
+       EXYNOS5420_GPIO_J42,
+       EXYNOS5420_GPIO_J43,
+       EXYNOS5420_GPIO_J44,
+       EXYNOS5420_GPIO_J45,
+       EXYNOS5420_GPIO_J46,
+       EXYNOS5420_GPIO_J47,
+
+       /* GPIO_PART6_STARTS */
+       EXYNOS5420_GPIO_MAX_PORT_PART_5,/* 280 0x118 */
+       EXYNOS5420_GPIO_Z0 = EXYNOS5420_GPIO_MAX_PORT_PART_5,
+       EXYNOS5420_GPIO_Z1,
+       EXYNOS5420_GPIO_Z2,
+       EXYNOS5420_GPIO_Z3,
+       EXYNOS5420_GPIO_Z4,
+       EXYNOS5420_GPIO_Z5,
+       EXYNOS5420_GPIO_Z6,
+       EXYNOS5420_GPIO_MAX_PORT
 };
 
-struct exynos5420_gpio_part1 {
-       struct s5p_gpio_bank a0;
-       struct s5p_gpio_bank a1;
-       struct s5p_gpio_bank a2;
-       struct s5p_gpio_bank b0;
-       struct s5p_gpio_bank b1;
-       struct s5p_gpio_bank b2;
-       struct s5p_gpio_bank b3;
-       struct s5p_gpio_bank b4;
-       struct s5p_gpio_bank h0;
+struct gpio_info {
+       unsigned int reg_addr;  /* Address of register for this part */
+       unsigned int max_gpio;  /* Maximum GPIO in this part */
 };
 
-struct exynos5420_gpio_part2 {
-       struct s5p_gpio_bank y7; /* 0x1340_0000 */
-       struct s5p_gpio_bank res[0x5f]; /*  */
-       struct s5p_gpio_bank x0; /* 0x1340_0C00 */
-       struct s5p_gpio_bank x1; /* 0x1340_0C20 */
-       struct s5p_gpio_bank x2; /* 0x1340_0C40 */
-       struct s5p_gpio_bank x3; /* 0x1340_0C60 */
+#define EXYNOS4_GPIO_NUM_PARTS 3
+static struct gpio_info exynos4_gpio_data[EXYNOS4_GPIO_NUM_PARTS] = {
+       { EXYNOS4_GPIO_PART1_BASE, EXYNOS4_GPIO_MAX_PORT_PART_1 },
+       { EXYNOS4_GPIO_PART2_BASE, EXYNOS4_GPIO_MAX_PORT_PART_2 },
+       { EXYNOS4_GPIO_PART3_BASE, EXYNOS4_GPIO_MAX_PORT },
 };
 
-struct exynos5420_gpio_part3 {
-       struct s5p_gpio_bank c0;
-       struct s5p_gpio_bank c1;
-       struct s5p_gpio_bank c2;
-       struct s5p_gpio_bank c3;
-       struct s5p_gpio_bank c4;
-       struct s5p_gpio_bank d1;
-       struct s5p_gpio_bank y0;
-       struct s5p_gpio_bank y1;
-       struct s5p_gpio_bank y2;
-       struct s5p_gpio_bank y3;
-       struct s5p_gpio_bank y4;
-       struct s5p_gpio_bank y5;
-       struct s5p_gpio_bank y6;
+#define EXYNOS4X12_GPIO_NUM_PARTS      4
+static struct gpio_info exynos4x12_gpio_data[EXYNOS4X12_GPIO_NUM_PARTS] = {
+       { EXYNOS4X12_GPIO_PART1_BASE, EXYNOS4X12_GPIO_MAX_PORT_PART_1 },
+       { EXYNOS4X12_GPIO_PART2_BASE, EXYNOS4X12_GPIO_MAX_PORT_PART_2 },
+       { EXYNOS4X12_GPIO_PART3_BASE, EXYNOS4X12_GPIO_MAX_PORT_PART_3 },
+       { EXYNOS4X12_GPIO_PART4_BASE, EXYNOS4X12_GPIO_MAX_PORT },
 };
 
-struct exynos5420_gpio_part4 {
-       struct s5p_gpio_bank e0; /* 0x1400_0000 */
-       struct s5p_gpio_bank e1; /* 0x1400_0020 */
-       struct s5p_gpio_bank f0; /* 0x1400_0040 */
-       struct s5p_gpio_bank f1; /* 0x1400_0060 */
-       struct s5p_gpio_bank g0; /* 0x1400_0080 */
-       struct s5p_gpio_bank g1; /* 0x1400_00A0 */
-       struct s5p_gpio_bank g2; /* 0x1400_00C0 */
-       struct s5p_gpio_bank j4; /* 0x1400_00E0 */
+#define EXYNOS5_GPIO_NUM_PARTS 8
+static struct gpio_info exynos5_gpio_data[EXYNOS5_GPIO_NUM_PARTS] = {
+       { EXYNOS5_GPIO_PART1_BASE, EXYNOS5_GPIO_MAX_PORT_PART_1 },
+       { EXYNOS5_GPIO_PART2_BASE, EXYNOS5_GPIO_MAX_PORT_PART_2 },
+       { EXYNOS5_GPIO_PART3_BASE, EXYNOS5_GPIO_MAX_PORT_PART_3 },
+       { EXYNOS5_GPIO_PART4_BASE, EXYNOS5_GPIO_MAX_PORT_PART_4 },
+       { EXYNOS5_GPIO_PART5_BASE, EXYNOS5_GPIO_MAX_PORT_PART_5 },
+       { EXYNOS5_GPIO_PART6_BASE, EXYNOS5_GPIO_MAX_PORT_PART_6 },
+       { EXYNOS5_GPIO_PART7_BASE, EXYNOS5_GPIO_MAX_PORT_PART_7 },
+       { EXYNOS5_GPIO_PART8_BASE, EXYNOS5_GPIO_MAX_PORT },
 };
 
-struct exynos5420_gpio_part5 {
-       struct s5p_gpio_bank z0; /* 0x0386_0000 */
+#define EXYNOS5420_GPIO_NUM_PARTS      6
+static struct gpio_info exynos5420_gpio_data[EXYNOS5420_GPIO_NUM_PARTS] = {
+       { EXYNOS5420_GPIO_PART1_BASE, EXYNOS5420_GPIO_MAX_PORT_PART_1 },
+       { EXYNOS5420_GPIO_PART2_BASE, EXYNOS5420_GPIO_MAX_PORT_PART_2 },
+       { EXYNOS5420_GPIO_PART3_BASE, EXYNOS5420_GPIO_MAX_PORT_PART_3 },
+       { EXYNOS5420_GPIO_PART4_BASE, EXYNOS5420_GPIO_MAX_PORT_PART_4 },
+       { EXYNOS5420_GPIO_PART5_BASE, EXYNOS5420_GPIO_MAX_PORT_PART_5 },
+       { EXYNOS5420_GPIO_PART6_BASE, EXYNOS5420_GPIO_MAX_PORT },
 };
 
-struct exynos5_gpio_part1 {
-       struct s5p_gpio_bank a0;
-       struct s5p_gpio_bank a1;
-       struct s5p_gpio_bank a2;
-       struct s5p_gpio_bank b0;
-       struct s5p_gpio_bank b1;
-       struct s5p_gpio_bank b2;
-       struct s5p_gpio_bank b3;
-       struct s5p_gpio_bank c0;
-       struct s5p_gpio_bank c1;
-       struct s5p_gpio_bank c2;
-       struct s5p_gpio_bank c3;
-       struct s5p_gpio_bank d0;
-       struct s5p_gpio_bank d1;
-       struct s5p_gpio_bank y0;
-       struct s5p_gpio_bank y1;
-       struct s5p_gpio_bank y2;
-       struct s5p_gpio_bank y3;
-       struct s5p_gpio_bank y4;
-       struct s5p_gpio_bank y5;
-       struct s5p_gpio_bank y6;
-       struct s5p_gpio_bank res1[0x3];
-       struct s5p_gpio_bank c4;
-       struct s5p_gpio_bank res2[0x48];
-       struct s5p_gpio_bank x0;
-       struct s5p_gpio_bank x1;
-       struct s5p_gpio_bank x2;
-       struct s5p_gpio_bank x3;
+static inline struct gpio_info *get_gpio_data(void)
+{
+       if (cpu_is_exynos5()) {
+               if (proid_is_exynos5420())
+                       return exynos5420_gpio_data;
+               else
+                       return exynos5_gpio_data;
+       } else if (cpu_is_exynos4()) {
+               if (proid_is_exynos4412())
+                       return exynos4x12_gpio_data;
+               else
+                       return exynos4_gpio_data;
+       }
+
+       return NULL;
+}
+
+static inline unsigned int get_bank_num(void)
+{
+       if (cpu_is_exynos5()) {
+               if (proid_is_exynos5420())
+                       return EXYNOS5420_GPIO_NUM_PARTS;
+               else
+                       return EXYNOS5_GPIO_NUM_PARTS;
+       } else if (cpu_is_exynos4()) {
+               if (proid_is_exynos4412())
+                       return EXYNOS4X12_GPIO_NUM_PARTS;
+               else
+                       return EXYNOS4_GPIO_NUM_PARTS;
+       }
+
+       return 0;
+}
+
+/*
+ * This structure helps mapping symbolic GPIO names into indices from
+ * exynos5_gpio_pin/exynos5420_gpio_pin enums.
+ *
+ * By convention, symbolic GPIO name is defined as follows:
+ *
+ * g[p]<bank><set><bit>, where
+ *   p is optional
+ *   <bank> - a single character bank name, as defined by the SOC
+ *   <set> - a single digit set number
+ *   <bit> - bit number within the set (in 0..7 range).
+ *
+ * <set><bit> essentially form an octal number of the GPIO pin within the bank
+ * space. On the 5420 architecture some banks' sets do not start not from zero
+ * ('d' starts from 1 and 'j' starts from 4). To compensate for that and
+ * maintain flat number space withoout holes, those banks use offsets to be
+ * deducted from the pin number.
+ */
+struct gpio_name_num_table {
+       char bank;              /* bank name symbol */
+       unsigned int bank_size;         /* total number of pins in the bank */
+       char bank_offset;       /* offset of the first bank's pin */
+       unsigned int base;      /* index of the first bank's pin in the enum */
 };
 
-struct exynos5_gpio_part2 {
-       struct s5p_gpio_bank e0;
-       struct s5p_gpio_bank e1;
-       struct s5p_gpio_bank f0;
-       struct s5p_gpio_bank f1;
-       struct s5p_gpio_bank g0;
-       struct s5p_gpio_bank g1;
-       struct s5p_gpio_bank g2;
-       struct s5p_gpio_bank h0;
-       struct s5p_gpio_bank h1;
+#define GPIO_ENTRY(name, base, top, offset) { name, top - base, offset, base }
+static const struct gpio_name_num_table exynos4_gpio_table[] = {
+       GPIO_ENTRY('a', EXYNOS4_GPIO_A00, EXYNOS4_GPIO_B0, 0),
+       GPIO_ENTRY('b', EXYNOS4_GPIO_B0, EXYNOS4_GPIO_C00, 0),
+       GPIO_ENTRY('c', EXYNOS4_GPIO_C00, EXYNOS4_GPIO_D00, 0),
+       GPIO_ENTRY('d', EXYNOS4_GPIO_D00, EXYNOS4_GPIO_E00, 0),
+       GPIO_ENTRY('e', EXYNOS4_GPIO_E00, EXYNOS4_GPIO_F00, 0),
+       GPIO_ENTRY('f', EXYNOS4_GPIO_F00, EXYNOS4_GPIO_J00, 0),
+       GPIO_ENTRY('j', EXYNOS4_GPIO_J00, EXYNOS4_GPIO_K00, 0),
+       GPIO_ENTRY('k', EXYNOS4_GPIO_K00, EXYNOS4_GPIO_L00, 0),
+       GPIO_ENTRY('l', EXYNOS4_GPIO_L00, EXYNOS4_GPIO_Y00, 0),
+       GPIO_ENTRY('y', EXYNOS4_GPIO_Y00, EXYNOS4_GPIO_X00, 0),
+       GPIO_ENTRY('x', EXYNOS4_GPIO_X00, EXYNOS4_GPIO_Z0, 0),
+       GPIO_ENTRY('z', EXYNOS4_GPIO_Z0, EXYNOS4_GPIO_MAX_PORT, 0),
+       { 0 }
 };
 
-struct exynos5_gpio_part3 {
-       struct s5p_gpio_bank v0;
-       struct s5p_gpio_bank v1;
-       struct s5p_gpio_bank res1[0x1];
-       struct s5p_gpio_bank v2;
-       struct s5p_gpio_bank v3;
-       struct s5p_gpio_bank res2[0x1];
-       struct s5p_gpio_bank v4;
+static const struct gpio_name_num_table exynos4x12_gpio_table[] = {
+       GPIO_ENTRY('a', EXYNOS4X12_GPIO_A00, EXYNOS4X12_GPIO_B0, 0),
+       GPIO_ENTRY('b', EXYNOS4X12_GPIO_B0, EXYNOS4X12_GPIO_C00, 0),
+       GPIO_ENTRY('c', EXYNOS4X12_GPIO_C00, EXYNOS4X12_GPIO_D00, 0),
+       GPIO_ENTRY('d', EXYNOS4X12_GPIO_D00, EXYNOS4X12_GPIO_F00, 0),
+       GPIO_ENTRY('f', EXYNOS4X12_GPIO_F00, EXYNOS4X12_GPIO_J00, 0),
+       GPIO_ENTRY('j', EXYNOS4X12_GPIO_J00, EXYNOS4X12_GPIO_K00, 0),
+       GPIO_ENTRY('k', EXYNOS4X12_GPIO_K00, EXYNOS4X12_GPIO_L00, 0),
+       GPIO_ENTRY('l', EXYNOS4X12_GPIO_L00, EXYNOS4X12_GPIO_Y00, 0),
+       GPIO_ENTRY('y', EXYNOS4X12_GPIO_Y00, EXYNOS4X12_GPIO_M00, 0),
+       GPIO_ENTRY('m', EXYNOS4X12_GPIO_M00, EXYNOS4X12_GPIO_X00, 0),
+       GPIO_ENTRY('x', EXYNOS4X12_GPIO_X00, EXYNOS4X12_GPIO_Z0, 0),
+       GPIO_ENTRY('z', EXYNOS4X12_GPIO_Z0, EXYNOS4X12_GPIO_V00, 0),
+       GPIO_ENTRY('v', EXYNOS4X12_GPIO_V00, EXYNOS4X12_GPIO_MAX_PORT, 0),
+       { 0 }
 };
 
-struct exynos5_gpio_part4 {
-       struct s5p_gpio_bank z;
+static const struct gpio_name_num_table exynos5_gpio_table[] = {
+       GPIO_ENTRY('a', EXYNOS5_GPIO_A00, EXYNOS5_GPIO_B00, 0),
+       GPIO_ENTRY('b', EXYNOS5_GPIO_B00, EXYNOS5_GPIO_C00, 0),
+       GPIO_ENTRY('c', EXYNOS5_GPIO_C00, EXYNOS5_GPIO_D00, 0),
+       GPIO_ENTRY('d', EXYNOS5_GPIO_D00, EXYNOS5_GPIO_Y00, 0),
+       GPIO_ENTRY('y', EXYNOS5_GPIO_Y00, EXYNOS5_GPIO_C40, 0),
+       GPIO_ENTRY('x', EXYNOS5_GPIO_X00, EXYNOS5_GPIO_E00, 0),
+       GPIO_ENTRY('e', EXYNOS5_GPIO_E00, EXYNOS5_GPIO_F00, 0),
+       GPIO_ENTRY('f', EXYNOS5_GPIO_F00, EXYNOS5_GPIO_G00, 0),
+       GPIO_ENTRY('g', EXYNOS5_GPIO_G00, EXYNOS5_GPIO_H00, 0),
+       GPIO_ENTRY('h', EXYNOS5_GPIO_H00, EXYNOS5_GPIO_V00, 0),
+       GPIO_ENTRY('v', EXYNOS5_GPIO_V00, EXYNOS5_GPIO_Z0, 0),
+       GPIO_ENTRY('z', EXYNOS5_GPIO_Z0, EXYNOS5_GPIO_MAX_PORT, 0),
+       { 0 }
 };
 
-/* functions */
-void s5p_gpio_cfg_pin(struct s5p_gpio_bank *bank, int gpio, int cfg);
-void s5p_gpio_direction_output(struct s5p_gpio_bank *bank, int gpio, int en);
-void s5p_gpio_direction_input(struct s5p_gpio_bank *bank, int gpio);
-void s5p_gpio_set_value(struct s5p_gpio_bank *bank, int gpio, int en);
-unsigned int s5p_gpio_get_value(struct s5p_gpio_bank *bank, int gpio);
-void s5p_gpio_set_pull(struct s5p_gpio_bank *bank, int gpio, int mode);
-void s5p_gpio_set_drv(struct s5p_gpio_bank *bank, int gpio, int mode);
-void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode);
+static const struct gpio_name_num_table exynos5420_gpio_table[] = {
+       GPIO_ENTRY('a', EXYNOS5420_GPIO_A00, EXYNOS5420_GPIO_B00, 0),
+       GPIO_ENTRY('b', EXYNOS5420_GPIO_B00, EXYNOS5420_GPIO_H00, 0),
+       GPIO_ENTRY('h', EXYNOS5420_GPIO_H00, EXYNOS5420_GPIO_Y70, 0),
+       GPIO_ENTRY('x', EXYNOS5420_GPIO_X00, EXYNOS5420_GPIO_C00, 0),
+       GPIO_ENTRY('c', EXYNOS5420_GPIO_C00, EXYNOS5420_GPIO_D10, 0),
+       GPIO_ENTRY('d', EXYNOS5420_GPIO_D10, EXYNOS5420_GPIO_Y00, 010),
+       GPIO_ENTRY('y', EXYNOS5420_GPIO_Y00, EXYNOS5420_GPIO_E00, 0),
+       GPIO_ENTRY('e', EXYNOS5420_GPIO_E00, EXYNOS5420_GPIO_F00, 0),
+       GPIO_ENTRY('f', EXYNOS5420_GPIO_F00, EXYNOS5420_GPIO_G00, 0),
+       GPIO_ENTRY('g', EXYNOS5420_GPIO_G00, EXYNOS5420_GPIO_J40, 0),
+       GPIO_ENTRY('j', EXYNOS5420_GPIO_J40, EXYNOS5420_GPIO_Z0, 040),
+       GPIO_ENTRY('z', EXYNOS5420_GPIO_Z0, EXYNOS5420_GPIO_MAX_PORT, 0),
+       { 0 }
+};
 
-/* GPIO pins per bank  */
-#define GPIO_PER_BANK 8
-#define S5P_GPIO_PART_SHIFT    (24)
-#define S5P_GPIO_PART_MASK     (0xff)
-#define S5P_GPIO_BANK_SHIFT    (8)
-#define S5P_GPIO_BANK_MASK     (0xffff)
-#define S5P_GPIO_PIN_MASK      (0xff)
-
-#define S5P_GPIO_SET_PART(x) \
-                       (((x) & S5P_GPIO_PART_MASK) << S5P_GPIO_PART_SHIFT)
-
-#define S5P_GPIO_GET_PART(x) \
-                       (((x) >> S5P_GPIO_PART_SHIFT) & S5P_GPIO_PART_MASK)
-
-#define S5P_GPIO_SET_PIN(x) \
-                       ((x) & S5P_GPIO_PIN_MASK)
-
-#define EXYNOS4_GPIO_SET_BANK(part, bank) \
-                       ((((unsigned)&(((struct exynos4_gpio_part##part *) \
-                       EXYNOS4_GPIO_PART##part##_BASE)->bank) \
-                       - EXYNOS4_GPIO_PART##part##_BASE) \
-                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
-
-#define EXYNOS4X12_GPIO_SET_BANK(part, bank) \
-                       ((((unsigned)&(((struct exynos4x12_gpio_part##part *) \
-                       EXYNOS4X12_GPIO_PART##part##_BASE)->bank) \
-                       - EXYNOS4X12_GPIO_PART##part##_BASE) \
-                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
-
-#define EXYNOS5_GPIO_SET_BANK(part, bank) \
-                       ((((unsigned)&(((struct exynos5420_gpio_part##part *) \
-                       EXYNOS5420_GPIO_PART##part##_BASE)->bank) \
-                       - EXYNOS5_GPIO_PART##part##_BASE) \
-                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
-
-#define EXYNOS5420_GPIO_SET_BANK(part, bank) \
-                       ((((unsigned)&(((struct exynos5420_gpio_part##part *) \
-                       EXYNOS5420_GPIO_PART##part##_BASE)->bank) \
-                       - EXYNOS5420_GPIO_PART##part##_BASE) \
-                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
-
-#define exynos4_gpio_get(part, bank, pin) \
-                       (S5P_GPIO_SET_PART(part) | \
-                       EXYNOS4_GPIO_SET_BANK(part, bank) | \
-                       S5P_GPIO_SET_PIN(pin))
-
-#define exynos4x12_gpio_get(part, bank, pin) \
-                       (S5P_GPIO_SET_PART(part) | \
-                       EXYNOS4X12_GPIO_SET_BANK(part, bank) | \
-                       S5P_GPIO_SET_PIN(pin))
-
-#define exynos5420_gpio_get(part, bank, pin) \
-                       (S5P_GPIO_SET_PART(part) | \
-                       EXYNOS5420_GPIO_SET_BANK(part, bank) | \
-                       S5P_GPIO_SET_PIN(pin))
-
-#define exynos5_gpio_get(part, bank, pin) \
-                       (S5P_GPIO_SET_PART(part) | \
-                       EXYNOS5_GPIO_SET_BANK(part, bank) | \
-                       S5P_GPIO_SET_PIN(pin))
-
-static inline unsigned int s5p_gpio_base(int gpio)
-{
-       unsigned gpio_part = S5P_GPIO_GET_PART(gpio);
-
-       switch (gpio_part) {
-       case 1:
-               return samsung_get_base_gpio_part1();
-       case 2:
-               return samsung_get_base_gpio_part2();
-       case 3:
-               return samsung_get_base_gpio_part3();
-       case 4:
-               return samsung_get_base_gpio_part4();
-       default:
-               return 0;
-       }
-}
+void gpio_cfg_pin(int gpio, int cfg);
+void gpio_set_pull(int gpio, int mode);
+void gpio_set_drv(int gpio, int mode);
+int gpio_direction_output(unsigned gpio, int value);
+int gpio_set_value(unsigned gpio, int value);
+int gpio_get_value(unsigned gpio);
+void gpio_set_rate(int gpio, int mode);
+struct s5p_gpio_bank *s5p_gpio_get_bank(unsigned gpio);
+int s5p_gpio_get_pin(unsigned gpio);
 #endif
 
 /* Pin configurations */
-#define GPIO_INPUT     0x0
-#define GPIO_OUTPUT    0x1
-#define GPIO_IRQ       0xf
-#define GPIO_FUNC(x)   (x)
+#define S5P_GPIO_INPUT 0x0
+#define S5P_GPIO_OUTPUT        0x1
+#define S5P_GPIO_IRQ   0xf
+#define S5P_GPIO_FUNC(x)       (x)
 
 /* Pull mode */
-#define GPIO_PULL_NONE 0x0
-#define GPIO_PULL_DOWN 0x1
-#define GPIO_PULL_UP   0x3
+#define S5P_GPIO_PULL_NONE     0x0
+#define S5P_GPIO_PULL_DOWN     0x1
+#define S5P_GPIO_PULL_UP       0x3
 
 /* Drive Strength level */
-#define GPIO_DRV_1X    0x0
-#define GPIO_DRV_3X    0x1
-#define GPIO_DRV_2X    0x2
-#define GPIO_DRV_4X    0x3
-#define GPIO_DRV_FAST  0x0
-#define GPIO_DRV_SLOW  0x1
+#define S5P_GPIO_DRV_1X        0x0
+#define S5P_GPIO_DRV_3X        0x1
+#define S5P_GPIO_DRV_2X        0x2
+#define S5P_GPIO_DRV_4X        0x3
+#define S5P_GPIO_DRV_FAST      0x0
+#define S5P_GPIO_DRV_SLOW      0x1
 #endif
index da8df74a10a8f0041950758baac927df8f1c5cbe..d5dbc22c18d0b1717ecba69fddd1df892fcb0aaf 100644 (file)
@@ -19,170 +19,830 @@ struct s5p_gpio_bank {
        unsigned char   res1[8];
 };
 
-struct s5pc100_gpio {
-       struct s5p_gpio_bank a0;
-       struct s5p_gpio_bank a1;
-       struct s5p_gpio_bank b;
-       struct s5p_gpio_bank c;
-       struct s5p_gpio_bank d;
-       struct s5p_gpio_bank e0;
-       struct s5p_gpio_bank e1;
-       struct s5p_gpio_bank f0;
-       struct s5p_gpio_bank f1;
-       struct s5p_gpio_bank f2;
-       struct s5p_gpio_bank f3;
-       struct s5p_gpio_bank g0;
-       struct s5p_gpio_bank g1;
-       struct s5p_gpio_bank g2;
-       struct s5p_gpio_bank g3;
-       struct s5p_gpio_bank i;
-       struct s5p_gpio_bank j0;
-       struct s5p_gpio_bank j1;
-       struct s5p_gpio_bank j2;
-       struct s5p_gpio_bank j3;
-       struct s5p_gpio_bank j4;
-       struct s5p_gpio_bank k0;
-       struct s5p_gpio_bank k1;
-       struct s5p_gpio_bank k2;
-       struct s5p_gpio_bank k3;
-       struct s5p_gpio_bank l0;
-       struct s5p_gpio_bank l1;
-       struct s5p_gpio_bank l2;
-       struct s5p_gpio_bank l3;
-       struct s5p_gpio_bank l4;
-       struct s5p_gpio_bank h0;
-       struct s5p_gpio_bank h1;
-       struct s5p_gpio_bank h2;
-       struct s5p_gpio_bank h3;
+/* A list of valid GPIO numbers for the asm-generic/gpio.h interface */
+enum s5pc100_gpio_pin {
+       S5PC100_GPIO_A00,
+       S5PC100_GPIO_A01,
+       S5PC100_GPIO_A02,
+       S5PC100_GPIO_A03,
+       S5PC100_GPIO_A04,
+       S5PC100_GPIO_A05,
+       S5PC100_GPIO_A06,
+       S5PC100_GPIO_A07,
+       S5PC100_GPIO_A10,
+       S5PC100_GPIO_A11,
+       S5PC100_GPIO_A12,
+       S5PC100_GPIO_A13,
+       S5PC100_GPIO_A14,
+       S5PC100_GPIO_A15,
+       S5PC100_GPIO_A16,
+       S5PC100_GPIO_A17,
+       S5PC100_GPIO_B0,
+       S5PC100_GPIO_B1,
+       S5PC100_GPIO_B2,
+       S5PC100_GPIO_B3,
+       S5PC100_GPIO_B4,
+       S5PC100_GPIO_B5,
+       S5PC100_GPIO_B6,
+       S5PC100_GPIO_B7,
+       S5PC100_GPIO_C0,
+       S5PC100_GPIO_C1,
+       S5PC100_GPIO_C2,
+       S5PC100_GPIO_C3,
+       S5PC100_GPIO_C4,
+       S5PC100_GPIO_C5,
+       S5PC100_GPIO_C6,
+       S5PC100_GPIO_C7,
+       S5PC100_GPIO_D0,
+       S5PC100_GPIO_D1,
+       S5PC100_GPIO_D2,
+       S5PC100_GPIO_D3,
+       S5PC100_GPIO_D4,
+       S5PC100_GPIO_D5,
+       S5PC100_GPIO_D6,
+       S5PC100_GPIO_D7,
+       S5PC100_GPIO_E00,
+       S5PC100_GPIO_E01,
+       S5PC100_GPIO_E02,
+       S5PC100_GPIO_E03,
+       S5PC100_GPIO_E04,
+       S5PC100_GPIO_E05,
+       S5PC100_GPIO_E06,
+       S5PC100_GPIO_E07,
+       S5PC100_GPIO_E10,
+       S5PC100_GPIO_E11,
+       S5PC100_GPIO_E12,
+       S5PC100_GPIO_E13,
+       S5PC100_GPIO_E14,
+       S5PC100_GPIO_E15,
+       S5PC100_GPIO_E16,
+       S5PC100_GPIO_E17,
+       S5PC100_GPIO_F00,
+       S5PC100_GPIO_F01,
+       S5PC100_GPIO_F02,
+       S5PC100_GPIO_F03,
+       S5PC100_GPIO_F04,
+       S5PC100_GPIO_F05,
+       S5PC100_GPIO_F06,
+       S5PC100_GPIO_F07,
+       S5PC100_GPIO_F10,
+       S5PC100_GPIO_F11,
+       S5PC100_GPIO_F12,
+       S5PC100_GPIO_F13,
+       S5PC100_GPIO_F14,
+       S5PC100_GPIO_F15,
+       S5PC100_GPIO_F16,
+       S5PC100_GPIO_F17,
+       S5PC100_GPIO_F20,
+       S5PC100_GPIO_F21,
+       S5PC100_GPIO_F22,
+       S5PC100_GPIO_F23,
+       S5PC100_GPIO_F24,
+       S5PC100_GPIO_F25,
+       S5PC100_GPIO_F26,
+       S5PC100_GPIO_F27,
+       S5PC100_GPIO_F30,
+       S5PC100_GPIO_F31,
+       S5PC100_GPIO_F32,
+       S5PC100_GPIO_F33,
+       S5PC100_GPIO_F34,
+       S5PC100_GPIO_F35,
+       S5PC100_GPIO_F36,
+       S5PC100_GPIO_F37,
+       S5PC100_GPIO_G00,
+       S5PC100_GPIO_G01,
+       S5PC100_GPIO_G02,
+       S5PC100_GPIO_G03,
+       S5PC100_GPIO_G04,
+       S5PC100_GPIO_G05,
+       S5PC100_GPIO_G06,
+       S5PC100_GPIO_G07,
+       S5PC100_GPIO_G10,
+       S5PC100_GPIO_G11,
+       S5PC100_GPIO_G12,
+       S5PC100_GPIO_G13,
+       S5PC100_GPIO_G14,
+       S5PC100_GPIO_G15,
+       S5PC100_GPIO_G16,
+       S5PC100_GPIO_G17,
+       S5PC100_GPIO_G20,
+       S5PC100_GPIO_G21,
+       S5PC100_GPIO_G22,
+       S5PC100_GPIO_G23,
+       S5PC100_GPIO_G24,
+       S5PC100_GPIO_G25,
+       S5PC100_GPIO_G26,
+       S5PC100_GPIO_G27,
+       S5PC100_GPIO_G30,
+       S5PC100_GPIO_G31,
+       S5PC100_GPIO_G32,
+       S5PC100_GPIO_G33,
+       S5PC100_GPIO_G34,
+       S5PC100_GPIO_G35,
+       S5PC100_GPIO_G36,
+       S5PC100_GPIO_G37,
+       S5PC100_GPIO_I0,
+       S5PC100_GPIO_I1,
+       S5PC100_GPIO_I2,
+       S5PC100_GPIO_I3,
+       S5PC100_GPIO_I4,
+       S5PC100_GPIO_I5,
+       S5PC100_GPIO_I6,
+       S5PC100_GPIO_I7,
+       S5PC100_GPIO_J00,
+       S5PC100_GPIO_J01,
+       S5PC100_GPIO_J02,
+       S5PC100_GPIO_J03,
+       S5PC100_GPIO_J04,
+       S5PC100_GPIO_J05,
+       S5PC100_GPIO_J06,
+       S5PC100_GPIO_J07,
+       S5PC100_GPIO_J10,
+       S5PC100_GPIO_J11,
+       S5PC100_GPIO_J12,
+       S5PC100_GPIO_J13,
+       S5PC100_GPIO_J14,
+       S5PC100_GPIO_J15,
+       S5PC100_GPIO_J16,
+       S5PC100_GPIO_J17,
+       S5PC100_GPIO_J20,
+       S5PC100_GPIO_J21,
+       S5PC100_GPIO_J22,
+       S5PC100_GPIO_J23,
+       S5PC100_GPIO_J24,
+       S5PC100_GPIO_J25,
+       S5PC100_GPIO_J26,
+       S5PC100_GPIO_J27,
+       S5PC100_GPIO_J30,
+       S5PC100_GPIO_J31,
+       S5PC100_GPIO_J32,
+       S5PC100_GPIO_J33,
+       S5PC100_GPIO_J34,
+       S5PC100_GPIO_J35,
+       S5PC100_GPIO_J36,
+       S5PC100_GPIO_J37,
+       S5PC100_GPIO_J40,
+       S5PC100_GPIO_J41,
+       S5PC100_GPIO_J42,
+       S5PC100_GPIO_J43,
+       S5PC100_GPIO_J44,
+       S5PC100_GPIO_J45,
+       S5PC100_GPIO_J46,
+       S5PC100_GPIO_J47,
+       S5PC100_GPIO_K00,
+       S5PC100_GPIO_K01,
+       S5PC100_GPIO_K02,
+       S5PC100_GPIO_K03,
+       S5PC100_GPIO_K04,
+       S5PC100_GPIO_K05,
+       S5PC100_GPIO_K06,
+       S5PC100_GPIO_K07,
+       S5PC100_GPIO_K10,
+       S5PC100_GPIO_K11,
+       S5PC100_GPIO_K12,
+       S5PC100_GPIO_K13,
+       S5PC100_GPIO_K14,
+       S5PC100_GPIO_K15,
+       S5PC100_GPIO_K16,
+       S5PC100_GPIO_K17,
+       S5PC100_GPIO_K20,
+       S5PC100_GPIO_K21,
+       S5PC100_GPIO_K22,
+       S5PC100_GPIO_K23,
+       S5PC100_GPIO_K24,
+       S5PC100_GPIO_K25,
+       S5PC100_GPIO_K26,
+       S5PC100_GPIO_K27,
+       S5PC100_GPIO_K30,
+       S5PC100_GPIO_K31,
+       S5PC100_GPIO_K32,
+       S5PC100_GPIO_K33,
+       S5PC100_GPIO_K34,
+       S5PC100_GPIO_K35,
+       S5PC100_GPIO_K36,
+       S5PC100_GPIO_K37,
+       S5PC100_GPIO_L00,
+       S5PC100_GPIO_L01,
+       S5PC100_GPIO_L02,
+       S5PC100_GPIO_L03,
+       S5PC100_GPIO_L04,
+       S5PC100_GPIO_L05,
+       S5PC100_GPIO_L06,
+       S5PC100_GPIO_L07,
+       S5PC100_GPIO_L10,
+       S5PC100_GPIO_L11,
+       S5PC100_GPIO_L12,
+       S5PC100_GPIO_L13,
+       S5PC100_GPIO_L14,
+       S5PC100_GPIO_L15,
+       S5PC100_GPIO_L16,
+       S5PC100_GPIO_L17,
+       S5PC100_GPIO_L20,
+       S5PC100_GPIO_L21,
+       S5PC100_GPIO_L22,
+       S5PC100_GPIO_L23,
+       S5PC100_GPIO_L24,
+       S5PC100_GPIO_L25,
+       S5PC100_GPIO_L26,
+       S5PC100_GPIO_L27,
+       S5PC100_GPIO_L30,
+       S5PC100_GPIO_L31,
+       S5PC100_GPIO_L32,
+       S5PC100_GPIO_L33,
+       S5PC100_GPIO_L34,
+       S5PC100_GPIO_L35,
+       S5PC100_GPIO_L36,
+       S5PC100_GPIO_L37,
+       S5PC100_GPIO_L40,
+       S5PC100_GPIO_L41,
+       S5PC100_GPIO_L42,
+       S5PC100_GPIO_L43,
+       S5PC100_GPIO_L44,
+       S5PC100_GPIO_L45,
+       S5PC100_GPIO_L46,
+       S5PC100_GPIO_L47,
+       S5PC100_GPIO_H00,
+       S5PC100_GPIO_H01,
+       S5PC100_GPIO_H02,
+       S5PC100_GPIO_H03,
+       S5PC100_GPIO_H04,
+       S5PC100_GPIO_H05,
+       S5PC100_GPIO_H06,
+       S5PC100_GPIO_H07,
+       S5PC100_GPIO_H10,
+       S5PC100_GPIO_H11,
+       S5PC100_GPIO_H12,
+       S5PC100_GPIO_H13,
+       S5PC100_GPIO_H14,
+       S5PC100_GPIO_H15,
+       S5PC100_GPIO_H16,
+       S5PC100_GPIO_H17,
+       S5PC100_GPIO_H20,
+       S5PC100_GPIO_H21,
+       S5PC100_GPIO_H22,
+       S5PC100_GPIO_H23,
+       S5PC100_GPIO_H24,
+       S5PC100_GPIO_H25,
+       S5PC100_GPIO_H26,
+       S5PC100_GPIO_H27,
+       S5PC100_GPIO_H30,
+       S5PC100_GPIO_H31,
+       S5PC100_GPIO_H32,
+       S5PC100_GPIO_H33,
+       S5PC100_GPIO_H34,
+       S5PC100_GPIO_H35,
+       S5PC100_GPIO_H36,
+       S5PC100_GPIO_H37,
+
+       S5PC100_GPIO_MAX_PORT
 };
 
-struct s5pc110_gpio {
-       struct s5p_gpio_bank a0;
-       struct s5p_gpio_bank a1;
-       struct s5p_gpio_bank b;
-       struct s5p_gpio_bank c0;
-       struct s5p_gpio_bank c1;
-       struct s5p_gpio_bank d0;
-       struct s5p_gpio_bank d1;
-       struct s5p_gpio_bank e0;
-       struct s5p_gpio_bank e1;
-       struct s5p_gpio_bank f0;
-       struct s5p_gpio_bank f1;
-       struct s5p_gpio_bank f2;
-       struct s5p_gpio_bank f3;
-       struct s5p_gpio_bank g0;
-       struct s5p_gpio_bank g1;
-       struct s5p_gpio_bank g2;
-       struct s5p_gpio_bank g3;
-       struct s5p_gpio_bank i;
-       struct s5p_gpio_bank j0;
-       struct s5p_gpio_bank j1;
-       struct s5p_gpio_bank j2;
-       struct s5p_gpio_bank j3;
-       struct s5p_gpio_bank j4;
-       struct s5p_gpio_bank mp0_1;
-       struct s5p_gpio_bank mp0_2;
-       struct s5p_gpio_bank mp0_3;
-       struct s5p_gpio_bank mp0_4;
-       struct s5p_gpio_bank mp0_5;
-       struct s5p_gpio_bank mp0_6;
-       struct s5p_gpio_bank mp0_7;
-       struct s5p_gpio_bank mp1_0;
-       struct s5p_gpio_bank mp1_1;
-       struct s5p_gpio_bank mp1_2;
-       struct s5p_gpio_bank mp1_3;
-       struct s5p_gpio_bank mp1_4;
-       struct s5p_gpio_bank mp1_5;
-       struct s5p_gpio_bank mp1_6;
-       struct s5p_gpio_bank mp1_7;
-       struct s5p_gpio_bank mp1_8;
-       struct s5p_gpio_bank mp2_0;
-       struct s5p_gpio_bank mp2_1;
-       struct s5p_gpio_bank mp2_2;
-       struct s5p_gpio_bank mp2_3;
-       struct s5p_gpio_bank mp2_4;
-       struct s5p_gpio_bank mp2_5;
-       struct s5p_gpio_bank mp2_6;
-       struct s5p_gpio_bank mp2_7;
-       struct s5p_gpio_bank mp2_8;
-       struct s5p_gpio_bank res1[48];
-       struct s5p_gpio_bank h0;
-       struct s5p_gpio_bank h1;
-       struct s5p_gpio_bank h2;
-       struct s5p_gpio_bank h3;
+enum s5pc110_gpio_pin {
+       S5PC110_GPIO_A00,
+       S5PC110_GPIO_A01,
+       S5PC110_GPIO_A02,
+       S5PC110_GPIO_A03,
+       S5PC110_GPIO_A04,
+       S5PC110_GPIO_A05,
+       S5PC110_GPIO_A06,
+       S5PC110_GPIO_A07,
+       S5PC110_GPIO_A10,
+       S5PC110_GPIO_A11,
+       S5PC110_GPIO_A12,
+       S5PC110_GPIO_A13,
+       S5PC110_GPIO_A14,
+       S5PC110_GPIO_A15,
+       S5PC110_GPIO_A16,
+       S5PC110_GPIO_A17,
+       S5PC110_GPIO_B0,
+       S5PC110_GPIO_B1,
+       S5PC110_GPIO_B2,
+       S5PC110_GPIO_B3,
+       S5PC110_GPIO_B4,
+       S5PC110_GPIO_B5,
+       S5PC110_GPIO_B6,
+       S5PC110_GPIO_B7,
+       S5PC110_GPIO_C00,
+       S5PC110_GPIO_C01,
+       S5PC110_GPIO_C02,
+       S5PC110_GPIO_C03,
+       S5PC110_GPIO_C04,
+       S5PC110_GPIO_C05,
+       S5PC110_GPIO_C06,
+       S5PC110_GPIO_C07,
+       S5PC110_GPIO_C10,
+       S5PC110_GPIO_C11,
+       S5PC110_GPIO_C12,
+       S5PC110_GPIO_C13,
+       S5PC110_GPIO_C14,
+       S5PC110_GPIO_C15,
+       S5PC110_GPIO_C16,
+       S5PC110_GPIO_C17,
+       S5PC110_GPIO_D00,
+       S5PC110_GPIO_D01,
+       S5PC110_GPIO_D02,
+       S5PC110_GPIO_D03,
+       S5PC110_GPIO_D04,
+       S5PC110_GPIO_D05,
+       S5PC110_GPIO_D06,
+       S5PC110_GPIO_D07,
+       S5PC110_GPIO_D10,
+       S5PC110_GPIO_D11,
+       S5PC110_GPIO_D12,
+       S5PC110_GPIO_D13,
+       S5PC110_GPIO_D14,
+       S5PC110_GPIO_D15,
+       S5PC110_GPIO_D16,
+       S5PC110_GPIO_D17,
+       S5PC110_GPIO_E00,
+       S5PC110_GPIO_E01,
+       S5PC110_GPIO_E02,
+       S5PC110_GPIO_E03,
+       S5PC110_GPIO_E04,
+       S5PC110_GPIO_E05,
+       S5PC110_GPIO_E06,
+       S5PC110_GPIO_E07,
+       S5PC110_GPIO_E10,
+       S5PC110_GPIO_E11,
+       S5PC110_GPIO_E12,
+       S5PC110_GPIO_E13,
+       S5PC110_GPIO_E14,
+       S5PC110_GPIO_E15,
+       S5PC110_GPIO_E16,
+       S5PC110_GPIO_E17,
+       S5PC110_GPIO_F00,
+       S5PC110_GPIO_F01,
+       S5PC110_GPIO_F02,
+       S5PC110_GPIO_F03,
+       S5PC110_GPIO_F04,
+       S5PC110_GPIO_F05,
+       S5PC110_GPIO_F06,
+       S5PC110_GPIO_F07,
+       S5PC110_GPIO_F10,
+       S5PC110_GPIO_F11,
+       S5PC110_GPIO_F12,
+       S5PC110_GPIO_F13,
+       S5PC110_GPIO_F14,
+       S5PC110_GPIO_F15,
+       S5PC110_GPIO_F16,
+       S5PC110_GPIO_F17,
+       S5PC110_GPIO_F20,
+       S5PC110_GPIO_F21,
+       S5PC110_GPIO_F22,
+       S5PC110_GPIO_F23,
+       S5PC110_GPIO_F24,
+       S5PC110_GPIO_F25,
+       S5PC110_GPIO_F26,
+       S5PC110_GPIO_F27,
+       S5PC110_GPIO_F30,
+       S5PC110_GPIO_F31,
+       S5PC110_GPIO_F32,
+       S5PC110_GPIO_F33,
+       S5PC110_GPIO_F34,
+       S5PC110_GPIO_F35,
+       S5PC110_GPIO_F36,
+       S5PC110_GPIO_F37,
+       S5PC110_GPIO_G00,
+       S5PC110_GPIO_G01,
+       S5PC110_GPIO_G02,
+       S5PC110_GPIO_G03,
+       S5PC110_GPIO_G04,
+       S5PC110_GPIO_G05,
+       S5PC110_GPIO_G06,
+       S5PC110_GPIO_G07,
+       S5PC110_GPIO_G10,
+       S5PC110_GPIO_G11,
+       S5PC110_GPIO_G12,
+       S5PC110_GPIO_G13,
+       S5PC110_GPIO_G14,
+       S5PC110_GPIO_G15,
+       S5PC110_GPIO_G16,
+       S5PC110_GPIO_G17,
+       S5PC110_GPIO_G20,
+       S5PC110_GPIO_G21,
+       S5PC110_GPIO_G22,
+       S5PC110_GPIO_G23,
+       S5PC110_GPIO_G24,
+       S5PC110_GPIO_G25,
+       S5PC110_GPIO_G26,
+       S5PC110_GPIO_G27,
+       S5PC110_GPIO_G30,
+       S5PC110_GPIO_G31,
+       S5PC110_GPIO_G32,
+       S5PC110_GPIO_G33,
+       S5PC110_GPIO_G34,
+       S5PC110_GPIO_G35,
+       S5PC110_GPIO_G36,
+       S5PC110_GPIO_G37,
+       S5PC110_GPIO_I0,
+       S5PC110_GPIO_I1,
+       S5PC110_GPIO_I2,
+       S5PC110_GPIO_I3,
+       S5PC110_GPIO_I4,
+       S5PC110_GPIO_I5,
+       S5PC110_GPIO_I6,
+       S5PC110_GPIO_I7,
+       S5PC110_GPIO_J00,
+       S5PC110_GPIO_J01,
+       S5PC110_GPIO_J02,
+       S5PC110_GPIO_J03,
+       S5PC110_GPIO_J04,
+       S5PC110_GPIO_J05,
+       S5PC110_GPIO_J06,
+       S5PC110_GPIO_J07,
+       S5PC110_GPIO_J10,
+       S5PC110_GPIO_J11,
+       S5PC110_GPIO_J12,
+       S5PC110_GPIO_J13,
+       S5PC110_GPIO_J14,
+       S5PC110_GPIO_J15,
+       S5PC110_GPIO_J16,
+       S5PC110_GPIO_J17,
+       S5PC110_GPIO_J20,
+       S5PC110_GPIO_J21,
+       S5PC110_GPIO_J22,
+       S5PC110_GPIO_J23,
+       S5PC110_GPIO_J24,
+       S5PC110_GPIO_J25,
+       S5PC110_GPIO_J26,
+       S5PC110_GPIO_J27,
+       S5PC110_GPIO_J30,
+       S5PC110_GPIO_J31,
+       S5PC110_GPIO_J32,
+       S5PC110_GPIO_J33,
+       S5PC110_GPIO_J34,
+       S5PC110_GPIO_J35,
+       S5PC110_GPIO_J36,
+       S5PC110_GPIO_J37,
+       S5PC110_GPIO_J40,
+       S5PC110_GPIO_J41,
+       S5PC110_GPIO_J42,
+       S5PC110_GPIO_J43,
+       S5PC110_GPIO_J44,
+       S5PC110_GPIO_J45,
+       S5PC110_GPIO_J46,
+       S5PC110_GPIO_J47,
+       S5PC110_GPIO_MP010,
+       S5PC110_GPIO_MP011,
+       S5PC110_GPIO_MP012,
+       S5PC110_GPIO_MP013,
+       S5PC110_GPIO_MP014,
+       S5PC110_GPIO_MP015,
+       S5PC110_GPIO_MP016,
+       S5PC110_GPIO_MP017,
+       S5PC110_GPIO_MP020,
+       S5PC110_GPIO_MP021,
+       S5PC110_GPIO_MP022,
+       S5PC110_GPIO_MP023,
+       S5PC110_GPIO_MP024,
+       S5PC110_GPIO_MP025,
+       S5PC110_GPIO_MP026,
+       S5PC110_GPIO_MP027,
+       S5PC110_GPIO_MP030,
+       S5PC110_GPIO_MP031,
+       S5PC110_GPIO_MP032,
+       S5PC110_GPIO_MP033,
+       S5PC110_GPIO_MP034,
+       S5PC110_GPIO_MP035,
+       S5PC110_GPIO_MP036,
+       S5PC110_GPIO_MP037,
+       S5PC110_GPIO_MP040,
+       S5PC110_GPIO_MP041,
+       S5PC110_GPIO_MP042,
+       S5PC110_GPIO_MP043,
+       S5PC110_GPIO_MP044,
+       S5PC110_GPIO_MP045,
+       S5PC110_GPIO_MP046,
+       S5PC110_GPIO_MP047,
+       S5PC110_GPIO_MP050,
+       S5PC110_GPIO_MP051,
+       S5PC110_GPIO_MP052,
+       S5PC110_GPIO_MP053,
+       S5PC110_GPIO_MP054,
+       S5PC110_GPIO_MP055,
+       S5PC110_GPIO_MP056,
+       S5PC110_GPIO_MP057,
+       S5PC110_GPIO_MP060,
+       S5PC110_GPIO_MP061,
+       S5PC110_GPIO_MP062,
+       S5PC110_GPIO_MP063,
+       S5PC110_GPIO_MP064,
+       S5PC110_GPIO_MP065,
+       S5PC110_GPIO_MP066,
+       S5PC110_GPIO_MP067,
+       S5PC110_GPIO_MP070,
+       S5PC110_GPIO_MP071,
+       S5PC110_GPIO_MP072,
+       S5PC110_GPIO_MP073,
+       S5PC110_GPIO_MP074,
+       S5PC110_GPIO_MP075,
+       S5PC110_GPIO_MP076,
+       S5PC110_GPIO_MP077,
+       S5PC110_GPIO_MP100,
+       S5PC110_GPIO_MP101,
+       S5PC110_GPIO_MP102,
+       S5PC110_GPIO_MP103,
+       S5PC110_GPIO_MP104,
+       S5PC110_GPIO_MP105,
+       S5PC110_GPIO_MP106,
+       S5PC110_GPIO_MP107,
+       S5PC110_GPIO_MP110,
+       S5PC110_GPIO_MP111,
+       S5PC110_GPIO_MP112,
+       S5PC110_GPIO_MP113,
+       S5PC110_GPIO_MP114,
+       S5PC110_GPIO_MP115,
+       S5PC110_GPIO_MP116,
+       S5PC110_GPIO_MP117,
+       S5PC110_GPIO_MP120,
+       S5PC110_GPIO_MP121,
+       S5PC110_GPIO_MP122,
+       S5PC110_GPIO_MP123,
+       S5PC110_GPIO_MP124,
+       S5PC110_GPIO_MP125,
+       S5PC110_GPIO_MP126,
+       S5PC110_GPIO_MP127,
+       S5PC110_GPIO_MP130,
+       S5PC110_GPIO_MP131,
+       S5PC110_GPIO_MP132,
+       S5PC110_GPIO_MP133,
+       S5PC110_GPIO_MP134,
+       S5PC110_GPIO_MP135,
+       S5PC110_GPIO_MP136,
+       S5PC110_GPIO_MP137,
+       S5PC110_GPIO_MP140,
+       S5PC110_GPIO_MP141,
+       S5PC110_GPIO_MP142,
+       S5PC110_GPIO_MP143,
+       S5PC110_GPIO_MP144,
+       S5PC110_GPIO_MP145,
+       S5PC110_GPIO_MP146,
+       S5PC110_GPIO_MP147,
+       S5PC110_GPIO_MP150,
+       S5PC110_GPIO_MP151,
+       S5PC110_GPIO_MP152,
+       S5PC110_GPIO_MP153,
+       S5PC110_GPIO_MP154,
+       S5PC110_GPIO_MP155,
+       S5PC110_GPIO_MP156,
+       S5PC110_GPIO_MP157,
+       S5PC110_GPIO_MP160,
+       S5PC110_GPIO_MP161,
+       S5PC110_GPIO_MP162,
+       S5PC110_GPIO_MP163,
+       S5PC110_GPIO_MP164,
+       S5PC110_GPIO_MP165,
+       S5PC110_GPIO_MP166,
+       S5PC110_GPIO_MP167,
+       S5PC110_GPIO_MP170,
+       S5PC110_GPIO_MP171,
+       S5PC110_GPIO_MP172,
+       S5PC110_GPIO_MP173,
+       S5PC110_GPIO_MP174,
+       S5PC110_GPIO_MP175,
+       S5PC110_GPIO_MP176,
+       S5PC110_GPIO_MP177,
+       S5PC110_GPIO_MP180,
+       S5PC110_GPIO_MP181,
+       S5PC110_GPIO_MP182,
+       S5PC110_GPIO_MP183,
+       S5PC110_GPIO_MP184,
+       S5PC110_GPIO_MP185,
+       S5PC110_GPIO_MP186,
+       S5PC110_GPIO_MP187,
+       S5PC110_GPIO_MP200,
+       S5PC110_GPIO_MP201,
+       S5PC110_GPIO_MP202,
+       S5PC110_GPIO_MP203,
+       S5PC110_GPIO_MP204,
+       S5PC110_GPIO_MP205,
+       S5PC110_GPIO_MP206,
+       S5PC110_GPIO_MP207,
+       S5PC110_GPIO_MP210,
+       S5PC110_GPIO_MP211,
+       S5PC110_GPIO_MP212,
+       S5PC110_GPIO_MP213,
+       S5PC110_GPIO_MP214,
+       S5PC110_GPIO_MP215,
+       S5PC110_GPIO_MP216,
+       S5PC110_GPIO_MP217,
+       S5PC110_GPIO_MP220,
+       S5PC110_GPIO_MP221,
+       S5PC110_GPIO_MP222,
+       S5PC110_GPIO_MP223,
+       S5PC110_GPIO_MP224,
+       S5PC110_GPIO_MP225,
+       S5PC110_GPIO_MP226,
+       S5PC110_GPIO_MP227,
+       S5PC110_GPIO_MP230,
+       S5PC110_GPIO_MP231,
+       S5PC110_GPIO_MP232,
+       S5PC110_GPIO_MP233,
+       S5PC110_GPIO_MP234,
+       S5PC110_GPIO_MP235,
+       S5PC110_GPIO_MP236,
+       S5PC110_GPIO_MP237,
+       S5PC110_GPIO_MP240,
+       S5PC110_GPIO_MP241,
+       S5PC110_GPIO_MP242,
+       S5PC110_GPIO_MP243,
+       S5PC110_GPIO_MP244,
+       S5PC110_GPIO_MP245,
+       S5PC110_GPIO_MP246,
+       S5PC110_GPIO_MP247,
+       S5PC110_GPIO_MP250,
+       S5PC110_GPIO_MP251,
+       S5PC110_GPIO_MP252,
+       S5PC110_GPIO_MP253,
+       S5PC110_GPIO_MP254,
+       S5PC110_GPIO_MP255,
+       S5PC110_GPIO_MP256,
+       S5PC110_GPIO_MP257,
+       S5PC110_GPIO_MP260,
+       S5PC110_GPIO_MP261,
+       S5PC110_GPIO_MP262,
+       S5PC110_GPIO_MP263,
+       S5PC110_GPIO_MP264,
+       S5PC110_GPIO_MP265,
+       S5PC110_GPIO_MP266,
+       S5PC110_GPIO_MP267,
+       S5PC110_GPIO_MP270,
+       S5PC110_GPIO_MP271,
+       S5PC110_GPIO_MP272,
+       S5PC110_GPIO_MP273,
+       S5PC110_GPIO_MP274,
+       S5PC110_GPIO_MP275,
+       S5PC110_GPIO_MP276,
+       S5PC110_GPIO_MP277,
+       S5PC110_GPIO_MP280,
+       S5PC110_GPIO_MP281,
+       S5PC110_GPIO_MP282,
+       S5PC110_GPIO_MP283,
+       S5PC110_GPIO_MP284,
+       S5PC110_GPIO_MP285,
+       S5PC110_GPIO_MP286,
+       S5PC110_GPIO_MP287,
+       S5PC110_GPIO_RES,
+       S5PC110_GPIO_H00 = (S5PC110_GPIO_RES + (48 * 8)),
+       S5PC110_GPIO_H01,
+       S5PC110_GPIO_H02,
+       S5PC110_GPIO_H03,
+       S5PC110_GPIO_H04,
+       S5PC110_GPIO_H05,
+       S5PC110_GPIO_H06,
+       S5PC110_GPIO_H07,
+       S5PC110_GPIO_H10,
+       S5PC110_GPIO_H11,
+       S5PC110_GPIO_H12,
+       S5PC110_GPIO_H13,
+       S5PC110_GPIO_H14,
+       S5PC110_GPIO_H15,
+       S5PC110_GPIO_H16,
+       S5PC110_GPIO_H17,
+       S5PC110_GPIO_H20,
+       S5PC110_GPIO_H21,
+       S5PC110_GPIO_H22,
+       S5PC110_GPIO_H23,
+       S5PC110_GPIO_H24,
+       S5PC110_GPIO_H25,
+       S5PC110_GPIO_H26,
+       S5PC110_GPIO_H27,
+       S5PC110_GPIO_H30,
+       S5PC110_GPIO_H31,
+       S5PC110_GPIO_H32,
+       S5PC110_GPIO_H33,
+       S5PC110_GPIO_H34,
+       S5PC110_GPIO_H35,
+       S5PC110_GPIO_H36,
+       S5PC110_GPIO_H37,
+
+       S5PC110_GPIO_MAX_PORT
 };
 
-/* functions */
-void s5p_gpio_cfg_pin(struct s5p_gpio_bank *bank, int gpio, int cfg);
-void s5p_gpio_direction_output(struct s5p_gpio_bank *bank, int gpio, int en);
-void s5p_gpio_direction_input(struct s5p_gpio_bank *bank, int gpio);
-void s5p_gpio_set_value(struct s5p_gpio_bank *bank, int gpio, int en);
-unsigned int s5p_gpio_get_value(struct s5p_gpio_bank *bank, int gpio);
-void s5p_gpio_set_pull(struct s5p_gpio_bank *bank, int gpio, int mode);
-void s5p_gpio_set_drv(struct s5p_gpio_bank *bank, int gpio, int mode);
-void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode);
+struct gpio_info {
+       unsigned int reg_addr;  /* Address of register for this part */
+       unsigned int max_gpio;  /* Maximum GPIO in this part */
+};
 
-/* GPIO pins per bank  */
-#define GPIO_PER_BANK 8
+#define S5PC100_GPIO_NUM_PARTS 1
+static struct gpio_info s5pc100_gpio_data[S5PC100_GPIO_NUM_PARTS] = {
+       { S5PC100_GPIO_BASE, S5PC100_GPIO_MAX_PORT },
+};
 
-#define S5P_GPIO_PART_SHIFT    (24)
-#define S5P_GPIO_PART_MASK     (0xff)
-#define S5P_GPIO_BANK_SHIFT    (8)
-#define S5P_GPIO_BANK_MASK     (0xffff)
-#define S5P_GPIO_PIN_MASK      (0xff)
+#define S5PC110_GPIO_NUM_PARTS 1
+static struct gpio_info s5pc110_gpio_data[S5PC110_GPIO_NUM_PARTS] = {
+       { S5PC110_GPIO_BASE, S5PC110_GPIO_MAX_PORT },
+};
 
-#define S5P_GPIO_SET_PART(x) \
-                       (((x) & S5P_GPIO_PART_MASK) << S5P_GPIO_PART_SHIFT)
+static inline struct gpio_info *get_gpio_data(void)
+{
+       if (cpu_is_s5pc100())
+               return s5pc100_gpio_data;
+       else if (cpu_is_s5pc110())
+               return s5pc110_gpio_data;
 
-#define S5P_GPIO_GET_PART(x) \
-                       (((x) >> S5P_GPIO_PART_SHIFT) & S5P_GPIO_PART_MASK)
+       return NULL;
+}
 
-#define S5P_GPIO_SET_PIN(x) \
-                       ((x) & S5P_GPIO_PIN_MASK)
+static inline unsigned int get_bank_num(void)
+{
+       if (cpu_is_s5pc100())
+               return S5PC100_GPIO_NUM_PARTS;
+       else if (cpu_is_s5pc110())
+               return S5PC110_GPIO_NUM_PARTS;
 
-#define S5PC100_SET_BANK(bank) \
-                       (((unsigned)&(((struct s5pc100_gpio *) \
-                       S5PC100_GPIO_BASE)->bank) - S5PC100_GPIO_BASE) \
-                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
+       return 0;
+}
 
-#define S5PC110_SET_BANK(bank) \
-                       ((((unsigned)&(((struct s5pc110_gpio *) \
-                       S5PC110_GPIO_BASE)->bank) - S5PC110_GPIO_BASE) \
-                       & S5P_GPIO_BANK_MASK) << S5P_GPIO_BANK_SHIFT)
+/*
+ * This structure helps mapping symbolic GPIO names into indices from
+ * exynos5_gpio_pin/exynos5420_gpio_pin enums.
+ *
+ * By convention, symbolic GPIO name is defined as follows:
+ *
+ * g[p]<bank><set><bit>, where
+ *   p is optional
+ *   <bank> - a single character bank name, as defined by the SOC
+ *   <set> - a single digit set number
+ *   <bit> - bit number within the set (in 0..7 range).
+ *
+ * <set><bit> essentially form an octal number of the GPIO pin within the bank
+ * space. On the 5420 architecture some banks' sets do not start not from zero
+ * ('d' starts from 1 and 'j' starts from 4). To compensate for that and
+ * maintain flat number space withoout holes, those banks use offsets to be
+ * deducted from the pin number.
+ */
+struct gpio_name_num_table {
+       char bank;              /* bank name symbol */
+       u8 bank_size;           /* total number of pins in the bank */
+       char bank_offset;       /* offset of the first bank's pin */
+       unsigned int base;      /* index of the first bank's pin in the enum */
+};
 
-#define s5pc100_gpio_get(bank, pin) \
-                       (S5P_GPIO_SET_PART(0) | \
-                       S5PC100_SET_BANK(bank) | \
-                       S5P_GPIO_SET_PIN(pin))
+#define GPIO_PER_BANK 8
+#define GPIO_ENTRY(name, base, top, offset) { name, top - base, offset, base }
+static const struct gpio_name_num_table s5pc100_gpio_table[] = {
+       GPIO_ENTRY('a', S5PC100_GPIO_A00, S5PC100_GPIO_B0, 0),
+       GPIO_ENTRY('b', S5PC100_GPIO_B0, S5PC100_GPIO_C0, 0),
+       GPIO_ENTRY('c', S5PC100_GPIO_C0, S5PC100_GPIO_D0, 0),
+       GPIO_ENTRY('d', S5PC100_GPIO_D0, S5PC100_GPIO_E00, 0),
+       GPIO_ENTRY('e', S5PC100_GPIO_E00, S5PC100_GPIO_F00, 0),
+       GPIO_ENTRY('f', S5PC100_GPIO_F00, S5PC100_GPIO_G00, 0),
+       GPIO_ENTRY('g', S5PC100_GPIO_G00, S5PC100_GPIO_I0, 0),
+       GPIO_ENTRY('i', S5PC100_GPIO_I0, S5PC100_GPIO_J00, 0),
+       GPIO_ENTRY('j', S5PC100_GPIO_J00, S5PC100_GPIO_K00, 0),
+       GPIO_ENTRY('k', S5PC100_GPIO_K00, S5PC100_GPIO_L00, 0),
+       GPIO_ENTRY('l', S5PC100_GPIO_L00, S5PC100_GPIO_H00, 0),
+       GPIO_ENTRY('h', S5PC100_GPIO_H00, S5PC100_GPIO_MAX_PORT, 0),
+       { 0 }
+};
 
-#define s5pc110_gpio_get(bank, pin) \
-                       (S5P_GPIO_SET_PART(0) | \
-                       S5PC110_SET_BANK(bank) | \
-                       S5P_GPIO_SET_PIN(pin))
+static const struct gpio_name_num_table s5pc110_gpio_table[] = {
+       GPIO_ENTRY('a', S5PC110_GPIO_A00, S5PC110_GPIO_B0, 0),
+       GPIO_ENTRY('b', S5PC110_GPIO_B0, S5PC110_GPIO_C00, 0),
+       GPIO_ENTRY('c', S5PC110_GPIO_C00, S5PC110_GPIO_D00, 0),
+       GPIO_ENTRY('d', S5PC110_GPIO_D00, S5PC110_GPIO_E00, 0),
+       GPIO_ENTRY('e', S5PC110_GPIO_E00, S5PC110_GPIO_F00, 0),
+       GPIO_ENTRY('f', S5PC110_GPIO_F00, S5PC110_GPIO_G00, 0),
+       GPIO_ENTRY('g', S5PC110_GPIO_G00, S5PC110_GPIO_I0, 0),
+       GPIO_ENTRY('i', S5PC110_GPIO_I0, S5PC110_GPIO_J00, 0),
+       GPIO_ENTRY('j', S5PC110_GPIO_J00, S5PC110_GPIO_MP010, 0),
+       GPIO_ENTRY('h', S5PC110_GPIO_H00, S5PC110_GPIO_MAX_PORT, 0),
+       { 0 }
+};
 
-static inline unsigned int s5p_gpio_base(int nr)
-{
-       return samsung_get_base_gpio();
-}
+/* functions */
+void gpio_cfg_pin(int gpio, int cfg);
+void gpio_set_pull(int gpio, int mode);
+void gpio_set_drv(int gpio, int mode);
+int gpio_direction_output(unsigned gpio, int value);
+int gpio_set_value(unsigned gpio, int value);
+int gpio_get_value(unsigned gpio);
+void gpio_set_rate(int gpio, int mode);
+struct s5p_gpio_bank *s5p_gpio_get_bank(unsigned gpio);
+int s5p_gpio_get_pin(unsigned gpio);
+
+/* GPIO pins per bank  */
+#define GPIO_PER_BANK 8
 #endif
 
 /* Pin configurations */
-#define GPIO_INPUT     0x0
-#define GPIO_OUTPUT    0x1
-#define GPIO_IRQ       0xf
-#define GPIO_FUNC(x)   (x)
+#define S5P_GPIO_INPUT 0x0
+#define S5P_GPIO_OUTPUT        0x1
+#define S5P_GPIO_IRQ   0xf
+#define S5P_GPIO_FUNC(x)       (x)
 
 /* Pull mode */
-#define GPIO_PULL_NONE 0x0
-#define GPIO_PULL_DOWN 0x1
-#define GPIO_PULL_UP   0x2
+#define S5P_GPIO_PULL_NONE     0x0
+#define S5P_GPIO_PULL_DOWN     0x1
+#define S5P_GPIO_PULL_UP       0x2
 
 /* Drive Strength level */
-#define GPIO_DRV_1X    0x0
-#define GPIO_DRV_3X    0x1
-#define GPIO_DRV_2X    0x2
-#define GPIO_DRV_4X    0x3
-#define GPIO_DRV_FAST  0x0
-#define GPIO_DRV_SLOW  0x1
+#define S5P_GPIO_DRV_1X        0x0
+#define S5P_GPIO_DRV_3X        0x1
+#define S5P_GPIO_DRV_2X        0x2
+#define S5P_GPIO_DRV_4X        0x3
+#define S5P_GPIO_DRV_FAST      0x0
+#define S5P_GPIO_DRV_SLOW      0x1
 
 #endif
index d97190dd7cf549af4681266926bdc4e33949f099..44cd455699e797f1f446bb4acdc5ea0b8b9fb52e 100644 (file)
 #define GPIO_FULLPORT(x)       ((x) >> 3)
 #define GPIO_BIT(x)            ((x) & 0x7)
 
+enum tegra_gpio_init {
+       TEGRA_GPIO_INIT_IN,
+       TEGRA_GPIO_INIT_OUT0,
+       TEGRA_GPIO_INIT_OUT1,
+};
+
+struct tegra_gpio_config {
+       u32 gpio:16;
+       u32 init:2;
+};
+
 /*
  * Tegra-specific GPIO API
  */
 
+/**
+ * Configure a list of GPIOs
+ *
+ * @param config       List of GPIO configurations
+ * @param len          Number of config items in list
+ */
+void gpio_config_table(const struct tegra_gpio_config *config, int len);
+
 void gpio_info(void);
 
 #define gpio_status()  gpio_info()
+
 #endif /* TEGRA_GPIO_H_ */
index 035159d665371fa6100bebf6ed60eea8c5ff65eb..da477697bf029513db8fe4a605a8fc46c54ae3d9 100644 (file)
@@ -80,6 +80,11 @@ struct pmux_pingrp_config {
 #endif
 };
 
+#if !defined(CONFIG_TEGRA20) && !defined(CONFIG_TEGRA30)
+/* Set the pinmux CLAMP_INPUTS_WHEN_TRISTATED bit */
+void pinmux_set_tristate_input_clamping(void);
+#endif
+
 /* Set the mux function for a pin group */
 void pinmux_set_func(enum pmux_pingrp pin, enum pmux_func func);
 
index 310bbd7df9fe0bb492dfeab549e16dac626419b4..84e7b5553de16cb5ea8f5965079ec169d2459022 100644 (file)
@@ -14,8 +14,6 @@
 /* for mmc_config definition */
 #include <mmc.h>
 
-#define MAX_HOSTS              4       /* Max number of 'hosts'/controllers */
-
 #ifndef __ASSEMBLY__
 struct tegra_mmc {
        unsigned int    sysad;          /* _SYSTEM_ADDRESS_0 */
index c1cb3ef16b1a3b987de22e68b2f06822cf7aa7bf..b86562ac6dee99fe4f8f22b49a2f6165145a9d17 100644 (file)
@@ -231,6 +231,7 @@ enum pmux_drvgrp {
 };
 
 enum pmux_func {
+       PMUX_FUNC_DEFAULT,
        PMUX_FUNC_BLINK,
        PMUX_FUNC_CEC,
        PMUX_FUNC_CLDVFS,
index c49801c21d072d3e06e9bf0c8275e6d2420c4568..1884935a579edb8c794b080625b55d630afe2eca 100644 (file)
@@ -247,6 +247,7 @@ enum pmux_drvgrp {
 };
 
 enum pmux_func {
+       PMUX_FUNC_DEFAULT,
        PMUX_FUNC_BLINK,
        PMUX_FUNC_CCLA,
        PMUX_FUNC_CEC,
index 11c0104ff3e024681cb45c4561d24ed32687d095..f7bc97fe5f7389cfc947b61537e8b10fe2d335ec 100644 (file)
@@ -166,6 +166,7 @@ enum pmux_pingrp {
  * purely a convenience. The translation is done through a table search.
  */
 enum pmux_func {
+       PMUX_FUNC_DEFAULT,
        PMUX_FUNC_AHB_CLK,
        PMUX_FUNC_APB_CLK,
        PMUX_FUNC_AUDIO_SYNC,
index 6d83061dc1e9a290418e2fa6caa15da00b4819ab..a42e00990f0c1b4537a61448c9c077a36d9e1aa7 100644 (file)
@@ -306,6 +306,7 @@ enum pmux_drvgrp {
 };
 
 enum pmux_func {
+       PMUX_FUNC_DEFAULT,
        PMUX_FUNC_BLINK,
        PMUX_FUNC_CEC,
        PMUX_FUNC_CLK_12M_OUT,
index e035d6acc00b4b0c7397980a2d520b232fc45a80..585f1f781b5dbb4c96f974fd7e7854ff8aa2b3cf 100644 (file)
@@ -11,7 +11,7 @@ lib-$(CONFIG_USE_PRIVATE_LIBGCC) += _ashldi3.o _ashrdi3.o _divsi3.o \
 ifdef CONFIG_ARM64
 obj-y  += crt0_64.o
 else
-obj-y  += crt0.o
+obj-y  += vectors.o crt0.o
 endif
 
 ifndef CONFIG_SPL_BUILD
index 6cc136aa3c1e6baeddded6fd8c670e62aac23243..4f6b9f01cb55587bc00483693be903a7750a1a9c 100644 (file)
 void  __flush_cache(unsigned long start, unsigned long size)
 {
 #if defined(CONFIG_ARM1136)
-       void arm1136_cache_flush(void);
 
-       arm1136_cache_flush();
+#if !defined(CONFIG_SYS_ICACHE_OFF)
+       asm("mcr p15, 0, r1, c7, c5, 0"); /* invalidate I cache */
 #endif
+
+#if !defined(CONFIG_SYS_DCACHE_OFF)
+       asm("mcr p15, 0, r1, c7, c14, 0"); /* Clean+invalidate D cache */
+#endif
+
+#endif /* CONFIG_ARM1136 */
+
 #ifdef CONFIG_ARM926EJS
        /* test and clean, page 2-23 of arm926ejs manual */
        asm("0: mrc p15, 0, r15, c7, c10, 3\n\t" "bne 0b\n" : : : "memory");
        /* disable write buffer as well (page 2-22) */
        asm("mcr p15, 0, %0, c7, c10, 4" : : "r" (0));
-#endif
+#endif /* CONFIG_ARM926EJS */
        return;
 }
 void  flush_cache(unsigned long start, unsigned long size)
diff --git a/arch/arm/lib/vectors.S b/arch/arm/lib/vectors.S
new file mode 100644 (file)
index 0000000..d68cc47
--- /dev/null
@@ -0,0 +1,291 @@
+/*
+ *  vectors - Generic ARM exception table code
+ *
+ *  Copyright (c) 1998 Dan Malek <dmalek@jlc.net>
+ *  Copyright (c) 1999 Magnus Damm <kieraypc01.p.y.kie.era.ericsson.se>
+ *  Copyright (c) 2000 Wolfgang Denk <wd@denx.de>
+ *  Copyright (c) 2001 Alex Züpke <azu@sysgo.de>
+ *  Copyright (c) 2001 Marius Gröger <mag@sysgo.de>
+ *  Copyright (c) 2002 Alex Züpke <azu@sysgo.de>
+ *  Copyright (c) 2002 Gary Jennejohn <garyj@denx.de>
+ *  Copyright (c) 2002 Kyle Harris <kharris@nexus-tech.net>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+/*
+ *************************************************************************
+ *
+ * Symbol _start is referenced elsewhere, so make it global
+ *
+ *************************************************************************
+ */
+
+.globl _start
+
+/*
+ *************************************************************************
+ *
+ * Vectors have their own section so linker script can map them easily
+ *
+ *************************************************************************
+ */
+
+       .section ".vectors", "x"
+
+/*
+ *************************************************************************
+ *
+ * Exception vectors as described in ARM reference manuals
+ *
+ * Uses indirect branch to allow reaching handlers anywhere in memory.
+ *
+ *************************************************************************
+ */
+
+_start:
+
+#ifdef CONFIG_SYS_DV_NOR_BOOT_CFG
+       .word   CONFIG_SYS_DV_NOR_BOOT_CFG
+#endif
+
+_start:
+       ldr     pc, _reset
+       ldr     pc, _undefined_instruction
+       ldr     pc, _software_interrupt
+       ldr     pc, _prefetch_abort
+       ldr     pc, _data_abort
+       ldr     pc, _not_used
+       ldr     pc, _irq
+       ldr     pc, _fiq
+
+/*
+ *************************************************************************
+ *
+ * Indirect vectors table
+ *
+ * Symbols referenced here must be defined somewhere else
+ *
+ *************************************************************************
+ */
+
+       .globl  _undefined_instruction
+       .globl  _software_interrupt
+       .globl  _prefetch_abort
+       .globl  _data_abort
+       .globl  _not_used
+       .globl  _irq
+       .globl  _fiq
+
+_reset:                        .word reset
+_undefined_instruction:        .word undefined_instruction
+_software_interrupt:   .word software_interrupt
+_prefetch_abort:       .word prefetch_abort
+_data_abort:           .word data_abort
+_not_used:             .word not_used
+_irq:                  .word irq
+_fiq:                  .word fiq
+
+       .balignl 16,0xdeadbeef
+
+/*
+ *************************************************************************
+ *
+ * Interrupt handling
+ *
+ *************************************************************************
+ */
+
+/* SPL interrupt handling: just hang */
+
+#ifdef CONFIG_SPL_BUILD
+
+       .align  5
+undefined_instruction:
+software_interrupt:
+prefetch_abort:
+data_abort:
+not_used:
+irq:
+fiq:
+
+1:
+       bl      1b                      /* hang and never return */
+
+#else  /* !CONFIG_SPL_BUILD */
+
+/* IRQ stack memory (calculated at run-time) + 8 bytes */
+.globl IRQ_STACK_START_IN
+IRQ_STACK_START_IN:
+       .word   0x0badc0de
+
+#ifdef CONFIG_USE_IRQ
+/* IRQ stack memory (calculated at run-time) */
+.globl IRQ_STACK_START
+IRQ_STACK_START:
+       .word   0x0badc0de
+
+/* IRQ stack memory (calculated at run-time) */
+.globl FIQ_STACK_START
+FIQ_STACK_START:
+       .word 0x0badc0de
+
+#endif /* CONFIG_USE_IRQ */
+
+@
+@ IRQ stack frame.
+@
+#define S_FRAME_SIZE   72
+
+#define S_OLD_R0       68
+#define S_PSR          64
+#define S_PC           60
+#define S_LR           56
+#define S_SP           52
+
+#define S_IP           48
+#define S_FP           44
+#define S_R10          40
+#define S_R9           36
+#define S_R8           32
+#define S_R7           28
+#define S_R6           24
+#define S_R5           20
+#define S_R4           16
+#define S_R3           12
+#define S_R2           8
+#define S_R1           4
+#define S_R0           0
+
+#define MODE_SVC 0x13
+#define I_BIT   0x80
+
+/*
+ * use bad_save_user_regs for abort/prefetch/undef/swi ...
+ * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
+ */
+
+       .macro  bad_save_user_regs
+       @ carve out a frame on current user stack
+       sub     sp, sp, #S_FRAME_SIZE
+       stmia   sp, {r0 - r12}  @ Save user registers (now in svc mode) r0-r12
+       ldr     r2, IRQ_STACK_START_IN
+       @ get values for "aborted" pc and cpsr (into parm regs)
+       ldmia   r2, {r2 - r3}
+       add     r0, sp, #S_FRAME_SIZE           @ grab pointer to old stack
+       add     r5, sp, #S_SP
+       mov     r1, lr
+       stmia   r5, {r0 - r3}   @ save sp_SVC, lr_SVC, pc, cpsr
+       mov     r0, sp          @ save current stack into r0 (param register)
+       .endm
+
+       .macro  irq_save_user_regs
+       sub     sp, sp, #S_FRAME_SIZE
+       stmia   sp, {r0 - r12}                  @ Calling r0-r12
+       @ !!!! R8 NEEDS to be saved !!!! a reserved stack spot would be good.
+       add     r8, sp, #S_PC
+       stmdb   r8, {sp, lr}^           @ Calling SP, LR
+       str     lr, [r8, #0]            @ Save calling PC
+       mrs     r6, spsr
+       str     r6, [r8, #4]            @ Save CPSR
+       str     r0, [r8, #8]            @ Save OLD_R0
+       mov     r0, sp
+       .endm
+
+       .macro  irq_restore_user_regs
+       ldmia   sp, {r0 - lr}^                  @ Calling r0 - lr
+       mov     r0, r0
+       ldr     lr, [sp, #S_PC]                 @ Get PC
+       add     sp, sp, #S_FRAME_SIZE
+       subs    pc, lr, #4              @ return & move spsr_svc into cpsr
+       .endm
+
+       .macro get_bad_stack
+       ldr     r13, IRQ_STACK_START_IN         @ setup our mode stack
+
+       str     lr, [r13]       @ save caller lr in position 0 of saved stack
+       mrs     lr, spsr        @ get the spsr
+       str     lr, [r13, #4]   @ save spsr in position 1 of saved stack
+       mov     r13, #MODE_SVC  @ prepare SVC-Mode
+       @ msr   spsr_c, r13
+       msr     spsr, r13       @ switch modes, make sure moves will execute
+       mov     lr, pc          @ capture return pc
+       movs    pc, lr          @ jump to next instruction & switch modes.
+       .endm
+
+       .macro get_irq_stack                    @ setup IRQ stack
+       ldr     sp, IRQ_STACK_START
+       .endm
+
+       .macro get_fiq_stack                    @ setup FIQ stack
+       ldr     sp, FIQ_STACK_START
+       .endm
+
+/*
+ * exception handlers
+ */
+
+       .align  5
+undefined_instruction:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_undefined_instruction
+
+       .align  5
+software_interrupt:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_software_interrupt
+
+       .align  5
+prefetch_abort:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_prefetch_abort
+
+       .align  5
+data_abort:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_data_abort
+
+       .align  5
+not_used:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_not_used
+
+#ifdef CONFIG_USE_IRQ
+
+       .align  5
+irq:
+       get_irq_stack
+       irq_save_user_regs
+       bl      do_irq
+       irq_restore_user_regs
+
+       .align  5
+fiq:
+       get_fiq_stack
+       /* someone ought to write a more effiction fiq_save_user_regs */
+       irq_save_user_regs
+       bl      do_fiq
+       irq_restore_user_regs
+
+#else
+
+       .align  5
+irq:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_irq
+
+       .align  5
+fiq:
+       get_bad_stack
+       bad_save_user_regs
+       bl      do_fiq
+
+#endif /* CONFIG_USE_IRQ */
+
+#endif /* CONFIG_SPL_BUILD */
index 0984dfe6ea495bbc076b05ce11c35db20d088019..c8ab716ceaa7fea0416277ecc39314b047230bcf 100644 (file)
@@ -18,6 +18,7 @@ SECTIONS
        .text :
        {
                *(.__image_copy_start)
+               *(.vectors)
                CPUDIR/start.o (.text*)
                board/compulab/cm_t335/built-in.o (.text*)
                *(.text*)
index 6da1d4b5f5cef55d0672302018b0ade6809a3323..61b83bfc63db0c7612f25f438092bde8405c13b9 100644 (file)
@@ -22,6 +22,7 @@ SECTIONS
          /* WARNING - the following is hand-optimized to fit within    */
          /* the sector layout of our flash chips!      XXX FIXME XXX   */
 
+         *                                     (.vectors)
          arch/arm/cpu/arm1136/start.o          (.text*)
          board/freescale/mx31ads/built-in.o    (.text*)
          arch/arm/lib/built-in.o               (.text*)
index f97aafad422b308e8eb1b00216fd74839f3082df..5d37718f3b89e8b8109f30c8c8876be60179c1fb 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include <common.h>
+#include <asm/arch/gpio.h>
 #include <asm/arch/pinmux.h>
 #include "pinmux-config-jetson-tk1.h"
 
  */
 void pinmux_init(void)
 {
+       pinmux_set_tristate_input_clamping();
+
+       gpio_config_table(jetson_tk1_gpio_inits,
+                         ARRAY_SIZE(jetson_tk1_gpio_inits));
+
        pinmux_config_pingrp_table(jetson_tk1_pingrps,
                                   ARRAY_SIZE(jetson_tk1_pingrps));
 
index 1adcae4bdded3e7e970b6a784600de0be1a8d60e..d338818a64eb898697db9ac014fb392fea858674 100644 (file)
@@ -7,6 +7,98 @@
 #ifndef _PINMUX_CONFIG_JETSON_TK1_H_
 #define _PINMUX_CONFIG_JETSON_TK1_H_
 
+#define GPIO_INIT(_gpio, _init)                                \
+       {                                               \
+               .gpio   = GPIO_P##_gpio,                \
+               .init   = TEGRA_GPIO_INIT_##_init,      \
+       }
+
+static const struct tegra_gpio_config jetson_tk1_gpio_inits[] = {
+       /*        gpio, init_val */
+       GPIO_INIT(C7,   IN),
+       GPIO_INIT(G0,   OUT0),
+       GPIO_INIT(G1,   OUT0),
+       GPIO_INIT(G2,   IN),
+       GPIO_INIT(G3,   IN),
+       GPIO_INIT(H2,   OUT0),
+       GPIO_INIT(H3,   OUT0),
+       GPIO_INIT(H4,   IN),
+       GPIO_INIT(H5,   OUT0),
+       GPIO_INIT(H6,   IN),
+       GPIO_INIT(H7,   OUT0),
+       GPIO_INIT(I0,   OUT0),
+       GPIO_INIT(I2,   OUT0),
+       GPIO_INIT(I4,   OUT0),
+       GPIO_INIT(I5,   IN),
+       GPIO_INIT(I6,   IN),
+       GPIO_INIT(J0,   IN),
+       GPIO_INIT(J2,   IN),
+       GPIO_INIT(K1,   OUT0),
+       GPIO_INIT(K2,   IN),
+       GPIO_INIT(K3,   IN),
+       GPIO_INIT(K4,   OUT0),
+       GPIO_INIT(K5,   OUT0),
+       GPIO_INIT(K6,   OUT0),
+       GPIO_INIT(N7,   IN),
+       GPIO_INIT(O0,   IN),
+       GPIO_INIT(O1,   IN),
+       GPIO_INIT(O2,   IN),
+       GPIO_INIT(O3,   IN),
+       GPIO_INIT(O4,   IN),
+       GPIO_INIT(O5,   IN),
+       GPIO_INIT(O6,   OUT0),
+       GPIO_INIT(O7,   IN),
+       GPIO_INIT(P0,   OUT0),
+       GPIO_INIT(P1,   OUT0),
+       GPIO_INIT(P2,   OUT0),
+       GPIO_INIT(Q0,   IN),
+       GPIO_INIT(Q1,   IN),
+       GPIO_INIT(Q2,   IN),
+       GPIO_INIT(Q5,   IN),
+       GPIO_INIT(Q6,   IN),
+       GPIO_INIT(Q7,   IN),
+       GPIO_INIT(R0,   OUT0),
+       GPIO_INIT(R1,   OUT0),
+       GPIO_INIT(R2,   OUT0),
+       GPIO_INIT(R4,   IN),
+       GPIO_INIT(R5,   OUT0),
+       GPIO_INIT(R7,   IN),
+       GPIO_INIT(S0,   IN),
+       GPIO_INIT(S3,   OUT0),
+       GPIO_INIT(S4,   OUT0),
+       GPIO_INIT(S5,   IN),
+       GPIO_INIT(S6,   OUT0),
+       GPIO_INIT(T0,   OUT0),
+       GPIO_INIT(T1,   OUT0),
+       GPIO_INIT(U0,   OUT0),
+       GPIO_INIT(U1,   IN),
+       GPIO_INIT(U2,   IN),
+       GPIO_INIT(U3,   OUT0),
+       GPIO_INIT(U4,   OUT0),
+       GPIO_INIT(U5,   IN),
+       GPIO_INIT(U6,   IN),
+       GPIO_INIT(V0,   IN),
+       GPIO_INIT(V1,   IN),
+       GPIO_INIT(W2,   IN),
+       GPIO_INIT(W3,   IN),
+       GPIO_INIT(X1,   OUT0),
+       GPIO_INIT(X3,   IN),
+       GPIO_INIT(X4,   OUT0),
+       GPIO_INIT(X5,   IN),
+       GPIO_INIT(X6,   IN),
+       GPIO_INIT(X7,   OUT0),
+       GPIO_INIT(BB3,  OUT0),
+       GPIO_INIT(BB5,  OUT0),
+       GPIO_INIT(BB6,  OUT0),
+       GPIO_INIT(BB7,  OUT0),
+       GPIO_INIT(CC1,  IN),
+       GPIO_INIT(CC2,  IN),
+       GPIO_INIT(CC5,  OUT0),
+       GPIO_INIT(EE1,  OUT0),
+       GPIO_INIT(FF1,  OUT0),
+       GPIO_INIT(FF2,  IN),
+};
+
 #define PINCFG(_pingrp, _mux, _pull, _tri, _io, _od, _rcv_sel) \
        {                                                       \
                .pingrp         = PMUX_PINGRP_##_pingrp,        \
@@ -41,43 +133,43 @@ static const struct pmux_pingrp_config jetson_tk1_pingrps[] = {
        PINCFG(UART2_RXD_PC3,          IRDA,         UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(GEN1_I2C_SCL_PC4,       I2C1,         NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
        PINCFG(GEN1_I2C_SDA_PC5,       I2C1,         NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
-       PINCFG(PC7,                    RSVD1,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PG0,                    RSVD1,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PG1,                    RSVD1,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PG2,                    RSVD1,        DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PG3,                    RSVD1,        DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PC7,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PG0,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PG1,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PG2,                    DEFAULT,      DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PG3,                    DEFAULT,      DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(PG4,                    SPI4,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PG5,                    SPI4,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PG6,                    SPI4,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PG7,                    SPI4,         NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(PH0,                    GMI,          DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PH1,                    PWM1,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PH2,                    GMI,          NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PH3,                    GMI,          NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PH4,                    RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PH5,                    RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PH6,                    GMI,          UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PH7,                    GMI,          NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PI0,                    RSVD1,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PH2,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PH3,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PH4,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PH5,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PH6,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PH7,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PI0,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PI1,                    RSVD1,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PI2,                    RSVD4,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PI2,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PI3,                    SPI4,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PI4,                    GMI,          NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PI5,                    RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PI6,                    RSVD1,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PI4,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PI5,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PI6,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(PI7,                    RSVD1,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PJ0,                    RSVD1,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PJ2,                    RSVD1,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PJ0,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PJ2,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(UART2_CTS_N_PJ5,        UARTB,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(UART2_RTS_N_PJ6,        UARTB,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PJ7,                    UARTD,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PK0,                    SOC,          UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PK1,                    RSVD4,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PK2,                    RSVD1,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PK3,                    GMI,          UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PK4,                    RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(SPDIF_OUT_PK5,          RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(SPDIF_IN_PK6,           RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PK1,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PK2,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PK3,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PK4,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(SPDIF_OUT_PK5,          DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(SPDIF_IN_PK6,           DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PK7,                    UARTD,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(DAP1_FS_PN0,            I2S0,         DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(DAP1_DIN_PN1,           I2S0,         DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
@@ -85,79 +177,79 @@ static const struct pmux_pingrp_config jetson_tk1_pingrps[] = {
        PINCFG(DAP1_SCLK_PN3,          I2S0,         DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(USB_VBUS_EN0_PN4,       USB,          UP,     NORMAL,   INPUT,   ENABLE,  DEFAULT),
        PINCFG(USB_VBUS_EN1_PN5,       USB,          UP,     NORMAL,   INPUT,   ENABLE,  DEFAULT),
-       PINCFG(HDMI_INT_PN7,           RSVD1,        DOWN,   NORMAL,   INPUT,   DEFAULT, NORMAL),
-       PINCFG(ULPI_DATA7_PO0,         ULPI,         UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(ULPI_DATA0_PO1,         ULPI,         UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(ULPI_DATA1_PO2,         ULPI,         UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(ULPI_DATA2_PO3,         ULPI,         UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(ULPI_DATA3_PO4,         ULPI,         UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(ULPI_DATA4_PO5,         ULPI,         UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(ULPI_DATA5_PO6,         ULPI,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(ULPI_DATA6_PO7,         ULPI,         UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(DAP3_FS_PP0,            I2S2,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(DAP3_DIN_PP1,           I2S2,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(DAP3_DOUT_PP2,          RSVD4,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(HDMI_INT_PN7,           DEFAULT,      DOWN,   NORMAL,   INPUT,   DEFAULT, NORMAL),
+       PINCFG(ULPI_DATA7_PO0,         DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA0_PO1,         DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA1_PO2,         DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA2_PO3,         DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA3_PO4,         DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA4_PO5,         DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA5_PO6,         DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA6_PO7,         DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP3_FS_PP0,            DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(DAP3_DIN_PP1,           DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(DAP3_DOUT_PP2,          DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(DAP3_SCLK_PP3,          RSVD3,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(DAP4_FS_PP4,            I2S3,         DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(DAP4_DIN_PP5,           I2S3,         DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(DAP4_DOUT_PP6,          I2S3,         DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(DAP4_SCLK_PP7,          I2S3,         DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_COL0_PQ0,            RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_COL1_PQ1,            RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_COL2_PQ2,            RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_COL0_PQ0,            DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_COL1_PQ1,            DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_COL2_PQ2,            DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(KB_COL3_PQ3,            KBC,          DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(KB_COL4_PQ4,            SDMMC3,       UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_COL5_PQ5,            RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_COL6_PQ6,            RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_COL7_PQ7,            RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_ROW0_PR0,            RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(KB_ROW1_PR1,            RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(KB_ROW2_PR2,            RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_COL5_PQ5,            DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_COL6_PQ6,            DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_COL7_PQ7,            DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW0_PR0,            DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW1_PR1,            DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW2_PR2,            DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(KB_ROW3_PR3,            SYS,          NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(KB_ROW4_PR4,            RSVD3,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_ROW5_PR5,            RSVD3,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW4_PR4,            DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW5_PR5,            DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(KB_ROW6_PR6,            DISPLAYA_ALT, DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_ROW7_PR7,            RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_ROW8_PS0,            RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW7_PR7,            DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW8_PS0,            DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(KB_ROW9_PS1,            RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(KB_ROW10_PS2,           RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_ROW11_PS3,           RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(KB_ROW12_PS4,           RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(KB_ROW13_PS5,           RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_ROW14_PS6,           RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW11_PS3,           DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW12_PS4,           DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW13_PS5,           DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW14_PS6,           DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(KB_ROW15_PS7,           SOC,          UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(KB_ROW16_PT0,           RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(KB_ROW17_PT1,           RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW16_PT0,           DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW17_PT1,           DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(GEN2_I2C_SCL_PT5,       I2C2,         NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
        PINCFG(GEN2_I2C_SDA_PT6,       I2C2,         NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
        PINCFG(SDMMC4_CMD_PT7,         SDMMC4,       UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PU0,                    RSVD4,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PU1,                    RSVD1,        DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PU2,                    RSVD1,        DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PU3,                    GMI,          NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PU4,                    GMI,          NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PU5,                    GMI,          UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PU6,                    RSVD3,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PV0,                    RSVD1,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PV1,                    RSVD1,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PU0,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PU1,                    DEFAULT,      DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PU2,                    DEFAULT,      DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PU3,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PU4,                    DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PU5,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PU6,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PV0,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PV1,                    DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(SDMMC3_CD_N_PV2,        SDMMC3,       UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(SDMMC1_WP_N_PV3,        SDMMC1,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(DDC_SCL_PV4,            I2C4,         NORMAL, NORMAL,   INPUT,   DEFAULT, NORMAL),
        PINCFG(DDC_SDA_PV5,            I2C4,         NORMAL, NORMAL,   INPUT,   DEFAULT, NORMAL),
-       PINCFG(GPIO_W2_AUD_PW2,        RSVD2,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(GPIO_W3_AUD_PW3,        SPI6,         UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(GPIO_W2_AUD_PW2,        DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(GPIO_W3_AUD_PW3,        DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(DAP_MCLK1_PW4,          EXTPERIPH1,   NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(CLK2_OUT_PW5,           EXTPERIPH2,   NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(UART3_TXD_PW6,          UARTC,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(UART3_RXD_PW7,          UARTC,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(DVFS_PWM_PX0,           CLDVFS,       NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(GPIO_X1_AUD_PX1,        RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(GPIO_X1_AUD_PX1,        DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(DVFS_CLK_PX2,           CLDVFS,       NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(GPIO_X3_AUD_PX3,        RSVD4,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(GPIO_X4_AUD_PX4,        GMI,          NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(GPIO_X5_AUD_PX5,        RSVD4,        UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(GPIO_X6_AUD_PX6,        GMI,          UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(GPIO_X7_AUD_PX7,        RSVD1,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(GPIO_X3_AUD_PX3,        DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(GPIO_X4_AUD_PX4,        DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(GPIO_X5_AUD_PX5,        DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(GPIO_X6_AUD_PX6,        DEFAULT,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(GPIO_X7_AUD_PX7,        DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(ULPI_CLK_PY0,           SPI1,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(ULPI_DIR_PY1,           SPI1,         DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(ULPI_NXT_PY2,           SPI1,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
@@ -181,25 +273,25 @@ static const struct pmux_pingrp_config jetson_tk1_pingrps[] = {
        PINCFG(PBB0,                   VIMCLK2_ALT,  NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(CAM_I2C_SCL_PBB1,       I2C3,         NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
        PINCFG(CAM_I2C_SDA_PBB2,       I2C3,         NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
-       PINCFG(PBB3,                   VGP3,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PBB3,                   DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PBB4,                   VGP4,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PBB5,                   RSVD3,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PBB6,                   RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PBB7,                   RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PBB5,                   DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PBB6,                   DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PBB7,                   DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(CAM_MCLK_PCC0,          VI_ALT3,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(PCC1,                   RSVD2,        DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(PCC2,                   RSVD2,        DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PCC1,                   DEFAULT,      DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PCC2,                   DEFAULT,      DOWN,   NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(SDMMC4_CLK_PCC4,        SDMMC4,       NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(CLK2_REQ_PCC5,          RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(CLK2_REQ_PCC5,          DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(CLK3_OUT_PEE0,          EXTPERIPH3,   NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
-       PINCFG(CLK3_REQ_PEE1,          RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(CLK3_REQ_PEE1,          DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(DAP_MCLK1_REQ_PEE2,     SATA,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(HDMI_CEC_PEE3,          CEC,          NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
        PINCFG(SDMMC3_CLK_LB_OUT_PEE4, SDMMC3,       UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(SDMMC3_CLK_LB_IN_PEE5,  SDMMC3,       UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
        PINCFG(DP_HPD_PFF0,            DP,           UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
-       PINCFG(USB_VBUS_EN2_PFF1,      RSVD2,        NORMAL, NORMAL,   OUTPUT,  DISABLE, DEFAULT),
-       PINCFG(PFF2,                   RSVD2,        UP,     NORMAL,   INPUT,   DISABLE, DEFAULT),
+       PINCFG(USB_VBUS_EN2_PFF1,      DEFAULT,      NORMAL, NORMAL,   OUTPUT,  DISABLE, DEFAULT),
+       PINCFG(PFF2,                   DEFAULT,      UP,     NORMAL,   INPUT,   DISABLE, DEFAULT),
        PINCFG(CORE_PWR_REQ,           PWRON,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(CPU_PWR_REQ,            RSVD2,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
        PINCFG(PWR_INT_N,              PMI,          UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
index 2f79ec75237e795df39bce9e091cd5634a3dd609..bf8e3fd9658132ca503b66a6fe9b2ead40879ddd 100644 (file)
 /*
- * (C) Copyright 2013
- * NVIDIA Corporation <www.nvidia.com>
+ * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved.
  *
- * SPDX-License-Identifier:     GPL-2.0+
+ * SPDX-License-Identifier: GPL-2.0+
  */
 
 #ifndef _PINMUX_CONFIG_VENICE2_H_
 #define _PINMUX_CONFIG_VENICE2_H_
 
-#define DEFAULT_PINMUX(_pingrp, _mux, _pull, _tri, _io)                \
-       {                                                       \
-               .pingrp         = PMUX_PINGRP_##_pingrp,        \
-               .func           = PMUX_FUNC_##_mux,             \
-               .pull           = PMUX_PULL_##_pull,            \
-               .tristate       = PMUX_TRI_##_tri,              \
-               .io             = PMUX_PIN_##_io,               \
-               .lock           = PMUX_PIN_LOCK_DEFAULT,        \
-               .od             = PMUX_PIN_OD_DEFAULT,          \
-               .ioreset        = PMUX_PIN_IO_RESET_DEFAULT,    \
+#define GPIO_INIT(_gpio, _init)                                \
+       {                                               \
+               .gpio   = GPIO_P##_gpio,                \
+               .init   = TEGRA_GPIO_INIT_##_init,      \
        }
 
-#define I2C_PINMUX(_pingrp, _mux, _pull, _tri, _io, _lock, _od)        \
-       {                                                       \
-               .pingrp         = PMUX_PINGRP_##_pingrp,        \
-               .func           = PMUX_FUNC_##_mux,             \
-               .pull           = PMUX_PULL_##_pull,            \
-               .tristate       = PMUX_TRI_##_tri,              \
-               .io             = PMUX_PIN_##_io,               \
-               .lock           = PMUX_PIN_LOCK_##_lock,        \
-               .od             = PMUX_PIN_OD_##_od,            \
-               .ioreset        = PMUX_PIN_IO_RESET_DEFAULT,    \
-       }
+static const struct tegra_gpio_config venice2_gpio_inits[] = {
+       /*        gpio, init_val */
+       GPIO_INIT(A0,   IN),
+       GPIO_INIT(C7,   IN),
+       GPIO_INIT(G0,   IN),
+       GPIO_INIT(G1,   IN),
+       GPIO_INIT(G2,   IN),
+       GPIO_INIT(G3,   IN),
+       GPIO_INIT(H2,   IN),
+       GPIO_INIT(H4,   IN),
+       GPIO_INIT(H5,   OUT0),
+       GPIO_INIT(H6,   IN),
+       GPIO_INIT(H7,   OUT1),
+       GPIO_INIT(I0,   IN),
+       GPIO_INIT(I1,   IN),
+       GPIO_INIT(I2,   OUT0),
+       GPIO_INIT(I4,   OUT0),
+       GPIO_INIT(I5,   OUT1),
+       GPIO_INIT(I6,   IN),
+       GPIO_INIT(J0,   IN),
+       GPIO_INIT(J7,   IN),
+       GPIO_INIT(K0,   IN),
+       GPIO_INIT(K1,   OUT0),
+       GPIO_INIT(K2,   IN),
+       GPIO_INIT(K3,   IN),
+       GPIO_INIT(K4,   OUT0),
+       GPIO_INIT(K6,   OUT0),
+       GPIO_INIT(K7,   IN),
+       GPIO_INIT(N7,   IN),
+       GPIO_INIT(O2,   IN),
+       GPIO_INIT(O5,   IN),
+       GPIO_INIT(O6,   OUT0),
+       GPIO_INIT(O7,   IN),
+       GPIO_INIT(P2,   OUT0),
+       GPIO_INIT(Q0,   IN),
+       GPIO_INIT(Q2,   IN),
+       GPIO_INIT(Q3,   IN),
+       GPIO_INIT(Q6,   IN),
+       GPIO_INIT(Q7,   IN),
+       GPIO_INIT(R0,   OUT0),
+       GPIO_INIT(R1,   IN),
+       GPIO_INIT(R4,   IN),
+       GPIO_INIT(S0,   IN),
+       GPIO_INIT(S3,   OUT0),
+       GPIO_INIT(S4,   OUT0),
+       GPIO_INIT(S7,   IN),
+       GPIO_INIT(T1,   IN),
+       GPIO_INIT(U4,   IN),
+       GPIO_INIT(U5,   IN),
+       GPIO_INIT(U6,   IN),
+       GPIO_INIT(V0,   IN),
+       GPIO_INIT(V1,   IN),
+       GPIO_INIT(W3,   IN),
+       GPIO_INIT(X1,   IN),
+       GPIO_INIT(X3,   IN),
+       GPIO_INIT(X4,   IN),
+       GPIO_INIT(X7,   OUT0),
+       GPIO_INIT(CC5,  OUT0),
+};
 
-#define DDC_PINMUX(_pingrp, _mux, _pull, _tri, _io, _lock, _rcv_sel) \
+#define PINCFG(_pingrp, _mux, _pull, _tri, _io, _od, _rcv_sel) \
        {                                                       \
                .pingrp         = PMUX_PINGRP_##_pingrp,        \
                .func           = PMUX_FUNC_##_mux,             \
                .pull           = PMUX_PULL_##_pull,            \
                .tristate       = PMUX_TRI_##_tri,              \
                .io             = PMUX_PIN_##_io,               \
-               .lock           = PMUX_PIN_LOCK_##_lock,        \
+               .od             = PMUX_PIN_OD_##_od,            \
                .rcv_sel        = PMUX_PIN_RCV_SEL_##_rcv_sel,  \
+               .lock           = PMUX_PIN_LOCK_DEFAULT,        \
                .ioreset        = PMUX_PIN_IO_RESET_DEFAULT,    \
        }
 
-#define VI_PINMUX(_pingrp, _mux, _pull, _tri, _io, _lock, _ioreset) \
-       {                                                       \
-               .pingrp         = PMUX_PINGRP_##_pingrp,        \
-               .func           = PMUX_FUNC_##_mux,             \
-               .pull           = PMUX_PULL_##_pull,            \
-               .tristate       = PMUX_TRI_##_tri,              \
-               .io             = PMUX_PIN_##_io,               \
-               .lock           = PMUX_PIN_LOCK_##_lock,        \
-               .od             = PMUX_PIN_OD_DEFAULT,          \
-               .ioreset        = PMUX_PIN_IO_RESET_##_ioreset  \
-       }
-
-#define CEC_PINMUX(_pingrp, _mux, _pull, _tri, _io, _lock, _od)        \
-       {                                                       \
-               .pingrp     = PMUX_PINGRP_##_pingrp,            \
-               .func       = PMUX_FUNC_##_mux,                 \
-               .pull       = PMUX_PULL_##_pull,                \
-               .tristate   = PMUX_TRI_##_tri,                  \
-               .io         = PMUX_PIN_##_io,                   \
-               .lock       = PMUX_PIN_LOCK_##_lock,            \
-               .od         = PMUX_PIN_OD_##_od,                \
-               .ioreset    = PMUX_PIN_IO_RESET_DEFAULT,        \
-       }
-
-#define USB_PINMUX CEC_PINMUX
+static const struct pmux_pingrp_config venice2_pingrps[] = {
+       /*     pingrp,                 mux,         pull,   tri,      e_input, od,      rcv_sel */
+       PINCFG(CLK_32K_OUT_PA0,        DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(UART3_CTS_N_PA1,        UARTC,       NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP2_FS_PA2,            I2S1,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP2_SCLK_PA3,          I2S1,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP2_DIN_PA4,           I2S1,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP2_DOUT_PA5,          I2S1,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC3_CLK_PA6,         SDMMC3,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(SDMMC3_CMD_PA7,         SDMMC3,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PB0,                    RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PB1,                    RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(SDMMC3_DAT3_PB4,        SDMMC3,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC3_DAT2_PB5,        SDMMC3,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC3_DAT1_PB6,        SDMMC3,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC3_DAT0_PB7,        SDMMC3,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(UART3_RTS_N_PC0,        UARTC,       NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(UART2_TXD_PC2,          IRDA,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(UART2_RXD_PC3,          IRDA,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(GEN1_I2C_SCL_PC4,       I2C1,        NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(GEN1_I2C_SDA_PC5,       I2C1,        NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(PC7,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PG0,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PG1,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PG2,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PG3,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PG4,                    SPI4,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PG5,                    SPI4,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PG6,                    SPI4,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PG7,                    SPI4,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PH0,                    PWM0,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PH1,                    PWM1,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PH2,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PH3,                    GMI,         DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PH4,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PH5,                    DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PH6,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PH7,                    DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PI0,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PI1,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PI2,                    DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PI3,                    SPI4,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PI4,                    DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PI5,                    DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PI6,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PI7,                    RSVD1,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PJ0,                    DEFAULT,     UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PJ2,                    RSVD1,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(UART2_CTS_N_PJ5,        UARTB,       NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(UART2_RTS_N_PJ6,        UARTB,       NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PJ7,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PK0,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PK1,                    DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PK2,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PK3,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PK4,                    DEFAULT,     UP,     NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(SPDIF_OUT_PK5,          RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(SPDIF_IN_PK6,           DEFAULT,     DOWN,   NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PK7,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP1_FS_PN0,            I2S0,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP1_DIN_PN1,           I2S0,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP1_DOUT_PN2,          I2S0,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP1_SCLK_PN3,          I2S0,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(USB_VBUS_EN0_PN4,       USB,         NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(USB_VBUS_EN1_PN5,       USB,         NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(HDMI_INT_PN7,           DEFAULT,     DOWN,   NORMAL,   INPUT,   DEFAULT, NORMAL),
+       PINCFG(ULPI_DATA7_PO0,         ULPI,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA0_PO1,         ULPI,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA1_PO2,         DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA2_PO3,         ULPI,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA3_PO4,         ULPI,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA4_PO5,         DEFAULT,     UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA5_PO6,         DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(ULPI_DATA6_PO7,         DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP3_FS_PP0,            I2S2,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(DAP3_DIN_PP1,           I2S2,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(DAP3_DOUT_PP2,          DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(DAP3_SCLK_PP3,          RSVD3,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(DAP4_FS_PP4,            I2S3,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(DAP4_DIN_PP5,           I2S3,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP4_DOUT_PP6,          I2S3,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(DAP4_SCLK_PP7,          I2S3,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_COL0_PQ0,            DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_COL1_PQ1,            RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_COL2_PQ2,            DEFAULT,     UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_COL3_PQ3,            DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_COL4_PQ4,            SDMMC3,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_COL5_PQ5,            RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_COL6_PQ6,            DEFAULT,     UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_COL7_PQ7,            DEFAULT,     UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW0_PR0,            DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW1_PR1,            DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW2_PR2,            RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW3_PR3,            KBC,         DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW4_PR4,            DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW5_PR5,            RSVD3,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW6_PR6,            KBC,         DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW7_PR7,            RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW8_PS0,            DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW9_PS1,            UARTA,       DOWN,   NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW10_PS2,           UARTA,       NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW11_PS3,           DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW12_PS4,           DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW13_PS5,           RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW14_PS6,           RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW15_PS7,           DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(KB_ROW16_PT0,           RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(KB_ROW17_PT1,           DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(GEN2_I2C_SCL_PT5,       I2C2,        NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(GEN2_I2C_SDA_PT6,       I2C2,        NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(SDMMC4_CMD_PT7,         SDMMC4,      NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PU0,                    UARTA,       NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PU1,                    UARTA,       NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PU2,                    UARTA,       NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PU3,                    UARTA,       NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PU4,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PU5,                    DEFAULT,     UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PU6,                    DEFAULT,     UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PV0,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PV1,                    DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC3_CD_N_PV2,        SDMMC3,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC1_WP_N_PV3,        SDMMC1,      DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(DDC_SCL_PV4,            I2C4,        NORMAL, NORMAL,   INPUT,   DEFAULT, NORMAL),
+       PINCFG(DDC_SDA_PV5,            I2C4,        NORMAL, NORMAL,   INPUT,   DEFAULT, NORMAL),
+       PINCFG(GPIO_W2_AUD_PW2,        RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(GPIO_W3_AUD_PW3,        DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DAP_MCLK1_PW4,          EXTPERIPH1,  NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(CLK2_OUT_PW5,           RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(UART3_TXD_PW6,          UARTC,       NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(UART3_RXD_PW7,          UARTC,       NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DVFS_PWM_PX0,           CLDVFS,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(GPIO_X1_AUD_PX1,        DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DVFS_CLK_PX2,           CLDVFS,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(GPIO_X3_AUD_PX3,        DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(GPIO_X4_AUD_PX4,        DEFAULT,     NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(GPIO_X5_AUD_PX5,        RSVD4,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(GPIO_X6_AUD_PX6,        GMI,         DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(GPIO_X7_AUD_PX7,        DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(ULPI_CLK_PY0,           SPI1,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(ULPI_DIR_PY1,           SPI1,        NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(ULPI_NXT_PY2,           SPI1,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(ULPI_STP_PY3,           SPI1,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(SDMMC1_DAT3_PY4,        SDMMC1,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC1_DAT2_PY5,        SDMMC1,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC1_DAT1_PY6,        SDMMC1,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC1_DAT0_PY7,        SDMMC1,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC1_CLK_PZ0,         SDMMC1,      NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC1_CMD_PZ1,         SDMMC1,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PWR_I2C_SCL_PZ6,        I2CPWR,      NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(PWR_I2C_SDA_PZ7,        I2CPWR,      NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(SDMMC4_DAT0_PAA0,       SDMMC4,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC4_DAT1_PAA1,       SDMMC4,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC4_DAT2_PAA2,       SDMMC4,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC4_DAT3_PAA3,       SDMMC4,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC4_DAT4_PAA4,       SDMMC4,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC4_DAT5_PAA5,       SDMMC4,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC4_DAT6_PAA6,       SDMMC4,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(SDMMC4_DAT7_PAA7,       SDMMC4,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(PBB0,                   VGP6,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(CAM_I2C_SCL_PBB1,       I2C3,        NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(CAM_I2C_SDA_PBB2,       I2C3,        NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(PBB3,                   VGP3,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PBB4,                   VGP4,        DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PBB5,                   RSVD3,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PBB6,                   RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PBB7,                   RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(CAM_MCLK_PCC0,          VI,          DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PCC1,                   RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PCC2,                   RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(SDMMC4_CLK_PCC4,        SDMMC4,      NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(CLK2_REQ_PCC5,          DEFAULT,     NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PEX_L0_RST_N_PDD1,      RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PEX_L0_CLKREQ_N_PDD2,   RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PEX_WAKE_N_PDD3,        RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PEX_L1_RST_N_PDD5,      RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PEX_L1_CLKREQ_N_PDD6,   RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(CLK3_OUT_PEE0,          EXTPERIPH3,  NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(CLK3_REQ_PEE1,          RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(DAP_MCLK1_REQ_PEE2,     RSVD4,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(HDMI_CEC_PEE3,          CEC,         NORMAL, NORMAL,   INPUT,   ENABLE,  DEFAULT),
+       PINCFG(SDMMC3_CLK_LB_OUT_PEE4, SDMMC3,      NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(SDMMC3_CLK_LB_IN_PEE5,  SDMMC3,      UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(DP_HPD_PFF0,            DP,          UP,     NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(USB_VBUS_EN2_PFF1,      RSVD2,       DOWN,   TRISTATE, OUTPUT,  DISABLE, DEFAULT),
+       PINCFG(PFF2,                   RSVD2,       DOWN,   TRISTATE, OUTPUT,  DISABLE, DEFAULT),
+       PINCFG(CORE_PWR_REQ,           PWRON,       NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(CPU_PWR_REQ,            CPU,         NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(PWR_INT_N,              PMI,         NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(RESET_OUT_N,            RESET_OUT_N, NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+       PINCFG(OWR,                    RSVD2,       DOWN,   TRISTATE, OUTPUT,  DEFAULT, NORMAL),
+       PINCFG(CLK_32K_IN,             CLK,         NORMAL, NORMAL,   INPUT,   DEFAULT, DEFAULT),
+       PINCFG(JTAG_RTCK,              RTCK,        NORMAL, NORMAL,   OUTPUT,  DEFAULT, DEFAULT),
+};
 
-#define DEFAULT_PADCFG(_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) \
+#define DRVCFG(_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) \
        {                                               \
                .drvgrp = PMUX_DRVGRP_##_drvgrp,        \
                .slwf   = _slwf,                        \
                .hsm    = PMUX_HSM_##_hsm,              \
        }
 
-static struct pmux_pingrp_config tegra124_pinmux_common[] = {
-       /* EXTPERIPH1 pinmux */
-       DEFAULT_PINMUX(DAP_MCLK1_PW4,     EXTPERIPH1,  NORMAL,    NORMAL,   OUTPUT),
-
-       /* I2S0 pinmux */
-       DEFAULT_PINMUX(DAP1_DIN_PN1,      I2S0,        NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(DAP1_DOUT_PN2,     I2S0,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(DAP1_FS_PN0,       I2S0,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(DAP1_SCLK_PN3,     I2S0,        NORMAL,    NORMAL,   INPUT),
-
-       /* I2S1 pinmux */
-       DEFAULT_PINMUX(DAP2_DIN_PA4,      I2S1,        NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(DAP2_DOUT_PA5,     I2S1,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(DAP2_FS_PA2,       I2S1,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(DAP2_SCLK_PA3,     I2S1,        NORMAL,    NORMAL,   INPUT),
-
-       /* I2S3 pinmux */
-       DEFAULT_PINMUX(DAP4_DIN_PP5,      I2S3,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(DAP4_DOUT_PP6,     I2S3,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(DAP4_FS_PP4,       I2S3,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(DAP4_SCLK_PP7,     I2S3,        NORMAL,    NORMAL,   INPUT),
-
-       /* CLDVFS pinmux */
-       DEFAULT_PINMUX(DVFS_PWM_PX0,      CLDVFS,      NORMAL,    NORMAL,   OUTPUT),
-       DEFAULT_PINMUX(DVFS_CLK_PX2,      CLDVFS,      NORMAL,    NORMAL,   OUTPUT),
-
-       /* ULPI pinmux */
-       DEFAULT_PINMUX(ULPI_DATA0_PO1,    ULPI,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(ULPI_DATA1_PO2,    ULPI,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(ULPI_DATA2_PO3,    ULPI,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(ULPI_DATA3_PO4,    ULPI,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(ULPI_DATA4_PO5,    ULPI,        UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(ULPI_DATA5_PO6,    ULPI,        UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(ULPI_DATA6_PO7,    ULPI,        NORMAL,    NORMAL,   INPUT),
-
-       /* EC KBC/SPI */
-       DEFAULT_PINMUX(ULPI_CLK_PY0,      SPI1,        UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(ULPI_DIR_PY1,      SPI1,        UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(ULPI_NXT_PY2,      SPI1,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(ULPI_STP_PY3,      SPI1,        NORMAL,    NORMAL,   INPUT),
-
-       /* I2C3 (TPM) pinmux */
-       I2C_PINMUX(CAM_I2C_SCL_PBB1, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
-       I2C_PINMUX(CAM_I2C_SDA_PBB2, I2C3, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
-
-       /* I2C2 pinmux */
-       I2C_PINMUX(GEN2_I2C_SCL_PT5, I2C2, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
-       I2C_PINMUX(GEN2_I2C_SDA_PT6, I2C2, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
-
-       /* UARTD pinmux (UART4 on Servo board, unused) */
-       DEFAULT_PINMUX(PJ7,      UARTD,       NORMAL,    NORMAL,   OUTPUT),
-       DEFAULT_PINMUX(PB0,      UARTD,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PB1,      UARTD,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PK7,      UARTD,       NORMAL,    NORMAL,   OUTPUT),
-
-       /* SPI4 (Winbond 'boot ROM') */
-       DEFAULT_PINMUX(PG5,       SPI4,        NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(PG6,       SPI4,        UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(PG7,       SPI4,        UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(PI3,       SPI4,        NORMAL,    NORMAL,   INPUT),
-
-       /* Touch IRQ */
-       DEFAULT_PINMUX(GPIO_W3_AUD_PW3,   RSVD1,       NORMAL,    NORMAL,   INPUT),
-
-       /* PWM1 pinmux */
-       DEFAULT_PINMUX(PH1,       PWM1,       NORMAL,    NORMAL,   OUTPUT),
-
-       /* SDMMC1 pinmux */
-       DEFAULT_PINMUX(SDMMC1_CLK_PZ0,    SDMMC1,      NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC1_CMD_PZ1,    SDMMC1,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC1_DAT0_PY7,   SDMMC1,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC1_DAT1_PY6,   SDMMC1,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC1_DAT2_PY5,   SDMMC1,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC1_DAT3_PY4,   SDMMC1,      UP,        NORMAL,   INPUT),
-
-       /* SDMMC3 pinmux */
-       DEFAULT_PINMUX(SDMMC3_CLK_PA6,    SDMMC3,      NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC3_CMD_PA7,    SDMMC3,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC3_DAT0_PB7,   SDMMC3,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC3_DAT1_PB6,   SDMMC3,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC3_DAT2_PB5,   SDMMC3,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC3_DAT3_PB4,   SDMMC3,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC3_CLK_LB_IN_PEE5,  SDMMC3,  UP,        TRISTATE, INPUT),
-       DEFAULT_PINMUX(SDMMC3_CLK_LB_OUT_PEE4, SDMMC3,  DOWN,      NORMAL,   INPUT),
-
-       /* SDMMC4 pinmux */
-       DEFAULT_PINMUX(SDMMC4_CLK_PCC4,    SDMMC4,      NORMAL,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC4_CMD_PT7,     SDMMC4,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC4_DAT0_PAA0,   SDMMC4,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC4_DAT1_PAA1,   SDMMC4,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC4_DAT2_PAA2,   SDMMC4,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC4_DAT3_PAA3,   SDMMC4,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC4_DAT4_PAA4,   SDMMC4,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC4_DAT5_PAA5,   SDMMC4,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC4_DAT6_PAA6,   SDMMC4,      UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC4_DAT7_PAA7,   SDMMC4,      UP,        NORMAL,   INPUT),
-
-       /* BLINK pinmux */
-       DEFAULT_PINMUX(CLK_32K_OUT_PA0,   BLINK,       NORMAL,    NORMAL,   OUTPUT),
-
-       /* KBC pinmux */
-       DEFAULT_PINMUX(KB_COL0_PQ0,       KBC,         UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(KB_COL1_PQ1,       KBC,         UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(KB_COL2_PQ2,       KBC,         UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(KB_ROW0_PR0,       KBC,         UP,        NORMAL,   INPUT),
-       DEFAULT_PINMUX(KB_ROW1_PR1,       KBC,         UP,        NORMAL,   INPUT),
-
-       /* Misc */
-       DEFAULT_PINMUX(PV0,               RSVD1,       NORMAL,    TRISTATE, OUTPUT),
-       DEFAULT_PINMUX(KB_ROW7_PR7,       RSVD1,       UP,        NORMAL,   INPUT),
-
-       /* UARTA pinmux (BR_UART_TXD/RXD on Servo board) */
-       DEFAULT_PINMUX(KB_ROW9_PS1,       UARTA,       UP,        NORMAL,   OUTPUT),
-       DEFAULT_PINMUX(KB_ROW10_PS2,      UARTA,       UP,        TRISTATE, INPUT),
-
-       /* I2CPWR pinmux (I2C5) */
-       I2C_PINMUX(PWR_I2C_SCL_PZ6, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
-       I2C_PINMUX(PWR_I2C_SDA_PZ7, I2CPWR, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
-
-       /* RTCK pinmux */
-       DEFAULT_PINMUX(JTAG_RTCK,     RTCK,        NORMAL,    NORMAL,   INPUT),
-
-       /* CLK pinmux */
-       DEFAULT_PINMUX(CLK_32K_IN,    CLK,         NORMAL,    TRISTATE, INPUT),
-
-       /* PWRON pinmux */
-       DEFAULT_PINMUX(CORE_PWR_REQ,  PWRON,       NORMAL,    NORMAL,   OUTPUT),
-
-       /* CPU pinmux */
-       DEFAULT_PINMUX(CPU_PWR_REQ,   CPU,         NORMAL,    NORMAL,   OUTPUT),
-
-       /* PMI pinmux */
-       DEFAULT_PINMUX(PWR_INT_N,     PMI,         NORMAL,    TRISTATE, INPUT),
-
-       /* RESET_OUT_N pinmux */
-       DEFAULT_PINMUX(RESET_OUT_N,   RESET_OUT_N, NORMAL,    NORMAL,   OUTPUT),
-
-       /* EXTPERIPH3 pinmux */
-       DEFAULT_PINMUX(CLK3_OUT_PEE0, EXTPERIPH3,  NORMAL,    NORMAL,   OUTPUT),
-
-       /* I2C1 pinmux */
-       I2C_PINMUX(GEN1_I2C_SCL_PC4, I2C1, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
-       I2C_PINMUX(GEN1_I2C_SDA_PC5, I2C1, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
-
-       /* UARTB, GPS */
-       DEFAULT_PINMUX(UART2_CTS_N_PJ5,   UARTB,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(UART2_RTS_N_PJ6,   UARTB,       NORMAL,    NORMAL,   OUTPUT),
-       DEFAULT_PINMUX(UART2_RXD_PC3,     IRDA,        NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(UART2_TXD_PC2,     IRDA,        NORMAL,    NORMAL,   OUTPUT),
-
-       /* UARTC (WIFI/BT) */
-       DEFAULT_PINMUX(UART3_CTS_N_PA1,   UARTC,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(UART3_RTS_N_PC0,   UARTC,       NORMAL,    NORMAL,   OUTPUT),
-       DEFAULT_PINMUX(UART3_RXD_PW7,     UARTC,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(UART3_TXD_PW6,     UARTC,       NORMAL,    NORMAL,   OUTPUT),
-
-       /* CEC pinmux */
-       CEC_PINMUX(HDMI_CEC_PEE3, CEC, NORMAL, NORMAL, INPUT, DEFAULT, DISABLE),
-
-       /* I2C4 (HDMI_DDC) pinmux */
-       DDC_PINMUX(DDC_SCL_PV4, I2C4, NORMAL, NORMAL, INPUT, DEFAULT, HIGH),
-       DDC_PINMUX(DDC_SDA_PV5, I2C4, NORMAL, NORMAL, INPUT, DEFAULT, HIGH),
-
-       /* USB pinmux */
-       USB_PINMUX(USB_VBUS_EN0_PN4, USB, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
-       USB_PINMUX(USB_VBUS_EN1_PN5, USB, NORMAL, NORMAL, INPUT, DEFAULT, ENABLE),
-
-       /* Unused, marked SNN_ on schematic, TRISTATE 'em */
-       DEFAULT_PINMUX(PBB0,     RSVD3,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PBB3,     RSVD3,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PBB4,     RSVD3,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PBB5,     RSVD2,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PBB6,     RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PBB7,     RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PCC1,     RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PCC2,     RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PH3,      GMI,         NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PI7,      GMI,         NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PJ2,      RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(GPIO_X5_AUD_PX5,   RSVD3,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(GPIO_X6_AUD_PX6,   GMI,         NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(GPIO_W2_AUD_PW2,   RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(PFF2,     RSVD1,   NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(USB_VBUS_EN2_PFF1, RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(KB_COL5_PQ5,       RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(KB_ROW2_PR2,       RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(KB_ROW3_PR3,       KBC,         NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(KB_ROW5_PR5,       RSVD2,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(KB_ROW6_PR6,       KBC,         NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(KB_ROW13_PS5,      RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(KB_ROW14_PS6,      RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(KB_ROW16_PT0,      RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(OWR,               RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(ULPI_DATA7_PO0,    ULPI,        NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(DAP3_DIN_PP1,      RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(DAP3_FS_PP0,       RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(DAP3_SCLK_PP3,     RSVD2,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(CLK2_OUT_PW5,      RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(SDMMC1_WP_N_PV3,   RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(CAM_MCLK_PCC0,     RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(CLK3_REQ_PEE1,     RSVD1,       NORMAL,    TRISTATE, INPUT),
-       DEFAULT_PINMUX(SPDIF_OUT_PK5,     RSVD1,       NORMAL,    TRISTATE, INPUT),
-};
-
-static struct pmux_pingrp_config unused_pins_lowpower[] = {
-       DEFAULT_PINMUX(DAP_MCLK1_REQ_PEE2,      RSVD3,    DOWN, TRISTATE, OUTPUT),
-};
-
-/* Initially setting all used GPIO's to non-TRISTATE */
-static struct pmux_pingrp_config tegra124_pinmux_set_nontristate[] = {
-       DEFAULT_PINMUX(GPIO_X4_AUD_PX4,     RSVD1,  DOWN,    NORMAL,    OUTPUT),
-       DEFAULT_PINMUX(GPIO_X7_AUD_PX7,     RSVD1,  DOWN,    NORMAL,    OUTPUT),
-       DEFAULT_PINMUX(GPIO_W2_AUD_PW2,     RSVD1,  UP,      NORMAL,    INPUT),
-       DEFAULT_PINMUX(GPIO_X3_AUD_PX3,     RSVD3,  UP,      NORMAL,    INPUT),
-
-       /* EN_VDD_BL */
-       DEFAULT_PINMUX(DAP3_DOUT_PP2,       I2S2,   DOWN,    NORMAL,    OUTPUT),
-
-       /* MODEM */
-       DEFAULT_PINMUX(PV0,        RSVD3,  NORMAL,  NORMAL,    INPUT),
-       DEFAULT_PINMUX(PV1,        RSVD1,  NORMAL,  NORMAL,    INPUT),
-
-       /* BOOT_SEL0-3 */
-       DEFAULT_PINMUX(PG0,         GMI,    NORMAL,  NORMAL,    INPUT),
-       DEFAULT_PINMUX(PG1,         GMI,    NORMAL,  NORMAL,    INPUT),
-       DEFAULT_PINMUX(PG2,         GMI,    NORMAL,  NORMAL,    INPUT),
-       DEFAULT_PINMUX(PG3,         GMI,    NORMAL,  NORMAL,    INPUT),
-
-       DEFAULT_PINMUX(CLK2_REQ_PCC5,        RSVD3,  NORMAL,  NORMAL,    OUTPUT),
-
-       DEFAULT_PINMUX(KB_COL3_PQ3,         KBC,    UP,      NORMAL,    OUTPUT),
-       DEFAULT_PINMUX(KB_COL4_PQ4,         SDMMC3, UP,      NORMAL,    INPUT),
-       DEFAULT_PINMUX(KB_COL6_PQ6,         KBC,    UP,      NORMAL,    OUTPUT),
-       DEFAULT_PINMUX(KB_COL7_PQ7,         KBC,    UP,      NORMAL,    OUTPUT),
-       DEFAULT_PINMUX(KB_ROW4_PR4,         KBC,    DOWN,    NORMAL,    INPUT),
-       DEFAULT_PINMUX(KB_ROW8_PS0,         KBC,    UP,      NORMAL,    INPUT),
-
-       DEFAULT_PINMUX(PU4,        RSVD3,  NORMAL,  NORMAL,    INPUT),
-       DEFAULT_PINMUX(PU5,        RSVD3,  NORMAL,  NORMAL,    OUTPUT),
-       DEFAULT_PINMUX(PU6,        RSVD3,  NORMAL,  NORMAL,    INPUT),
-
-       DEFAULT_PINMUX(HDMI_INT_PN7,        RSVD1,  DOWN,    NORMAL,   INPUT),
-       DEFAULT_PINMUX(SPDIF_IN_PK6,        RSVD2,  NORMAL,  NORMAL,   INPUT),
-       DEFAULT_PINMUX(SDMMC3_CD_N_PV2,     SDMMC3, UP,      NORMAL,   INPUT),
-
-       /* TS_SHDN_L */
-       DEFAULT_PINMUX(PK1,        GMI,    NORMAL,   NORMAL,   OUTPUT),
+static const struct pmux_drvgrp_config venice2_drvgrps[] = {
 };
 
-static struct pmux_drvgrp_config venice2_padctrl[] = {
-       /* (_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) */
-       DEFAULT_PADCFG(SDIO3, SDIOCFG_DRVUP_SLWF, SDIOCFG_DRVDN_SLWR,
-                      SDIOCFG_DRVUP, SDIOCFG_DRVDN, NONE, NONE, NONE),
-};
 #endif /* PINMUX_CONFIG_VENICE2_H */
index 15082c4195078db3b8d6265571b809c5cc3131a2..c56ef129d6c7a5138994e1e3e213a5dd63d30010 100644 (file)
@@ -6,12 +6,9 @@
  */
 
 #include <common.h>
-#include <asm-generic/gpio.h>
 #include <asm/arch/gpio.h>
-#include <asm/arch/gp_padctrl.h>
 #include <asm/arch/pinmux.h>
 #include "pinmux-config-venice2.h"
-#include <i2c.h>
 
 /*
  * Routine: pinmux_init
  */
 void pinmux_init(void)
 {
-       pinmux_config_pingrp_table(tegra124_pinmux_set_nontristate,
-               ARRAY_SIZE(tegra124_pinmux_set_nontristate));
+       pinmux_set_tristate_input_clamping();
 
-       pinmux_config_pingrp_table(tegra124_pinmux_common,
-               ARRAY_SIZE(tegra124_pinmux_common));
+       gpio_config_table(venice2_gpio_inits,
+                         ARRAY_SIZE(venice2_gpio_inits));
 
-       pinmux_config_pingrp_table(unused_pins_lowpower,
-               ARRAY_SIZE(unused_pins_lowpower));
+       pinmux_config_pingrp_table(venice2_pingrps,
+                                  ARRAY_SIZE(venice2_pingrps));
 
-       /* Initialize any non-default pad configs (APB_MISC_GP regs) */
-       pinmux_config_drvgrp_table(venice2_padctrl,
-               ARRAY_SIZE(venice2_padctrl));
+       pinmux_config_drvgrp_table(venice2_drvgrps,
+                                  ARRAY_SIZE(venice2_drvgrps));
 }
index 9efc355dab22f933dcc17c3df85febc4f5a2b55f..ef88314f7db38a63ef9d87d5b16f41fb8d88bb25 100644 (file)
@@ -16,17 +16,14 @@ DECLARE_GLOBAL_DATA_PTR;
 #ifdef CONFIG_USB_EHCI_EXYNOS
 int board_usb_init(int index, enum usb_init_type init)
 {
-       struct exynos5_gpio_part1 *gpio = (struct exynos5_gpio_part1 *)
-                                               samsung_get_base_gpio_part1();
-
        /* Configure gpios for usb 3503 hub:
         * disconnect, toggle reset and connect
         */
-       s5p_gpio_direction_output(&gpio->d1, 7, 0);
-       s5p_gpio_direction_output(&gpio->x3, 5, 0);
+       gpio_direction_output(EXYNOS5_GPIO_D17, 0);
+       gpio_direction_output(EXYNOS5_GPIO_X35, 0);
 
-       s5p_gpio_direction_output(&gpio->x3, 5, 1);
-       s5p_gpio_direction_output(&gpio->d1, 7, 1);
+       gpio_direction_output(EXYNOS5_GPIO_X35, 1);
+       gpio_direction_output(EXYNOS5_GPIO_D17, 1);
 
        return 0;
 }
index 3ff4289780a8fe665cf89ff92f182e6ae6b0b9ad..03106fdb9fb15f8514884c6da9e41d8b48128fef 100644 (file)
@@ -116,12 +116,14 @@ static int check_keys(void)
  * 4 BOOT_MODE_EXIT
  */
 static char *
-mode_name[BOOT_MODE_EXIT + 1] = {
-       "DEVICE",
-       "THOR",
-       "UMS",
-       "DFU",
-       "EXIT"
+mode_name[BOOT_MODE_EXIT + 1][2] = {
+       {"DEVICE", ""},
+       {"THOR", "thor"},
+       {"UMS", "ums"},
+       {"DFU", "dfu"},
+       {"GPT", "gpt"},
+       {"ENV", "env"},
+       {"EXIT", ""},
 };
 
 static char *
@@ -130,18 +132,20 @@ mode_info[BOOT_MODE_EXIT + 1] = {
        "downloader",
        "mass storage",
        "firmware update",
+       "restore",
+       "default",
        "and run normal boot"
 };
 
-#define MODE_CMD_ARGC  4
-
 static char *
-mode_cmd[BOOT_MODE_EXIT + 1][MODE_CMD_ARGC] = {
-       {"", "", "", ""},
-       {"thor", "0", "mmc", "0"},
-       {"ums", "0", "mmc", "0"},
-       {"dfu", "0", "mmc", "0"},
-       {"", "", "", ""},
+mode_cmd[BOOT_MODE_EXIT + 1] = {
+       "",
+       "thor 0 mmc 0",
+       "ums 0 mmc 0",
+       "dfu 0 mmc 0",
+       "gpt write mmc 0 $partitions",
+       "env default -a; saveenv",
+       "",
 };
 
 static void display_board_info(void)
@@ -182,11 +186,10 @@ static void display_board_info(void)
 static int mode_leave_menu(int mode)
 {
        char *exit_option;
-       char *exit_boot = "boot";
+       char *exit_reset = "reset";
        char *exit_back = "back";
        cmd_tbl_t *cmd;
        int cmd_result;
-       int cmd_repeatable;
        int leave;
 
        lcd_clear();
@@ -200,31 +203,29 @@ static int mode_leave_menu(int mode)
                leave = 0;
                break;
        default:
-               cmd = find_cmd(mode_cmd[mode][0]);
+               cmd = find_cmd(mode_name[mode][1]);
                if (cmd) {
-                       printf("Enter: %s %s\n", mode_name[mode],
+                       printf("Enter: %s %s\n", mode_name[mode][0],
                                                 mode_info[mode]);
-                       lcd_printf("\n\n\t%s %s\n", mode_name[mode],
+                       lcd_printf("\n\n\t%s %s\n", mode_name[mode][0],
                                                    mode_info[mode]);
                        lcd_puts("\n\tDo not turn off device before finish!\n");
 
-                       cmd_result = cmd_process(0, MODE_CMD_ARGC,
-                                                *(mode_cmd + mode),
-                                                &cmd_repeatable, NULL);
+                       cmd_result = run_command(mode_cmd[mode], 0);
 
                        if (cmd_result == CMD_RET_SUCCESS) {
                                printf("Command finished\n");
                                lcd_clear();
                                lcd_printf("\n\n\t%s finished\n",
-                                          mode_name[mode]);
+                                          mode_name[mode][0]);
 
-                               exit_option = exit_boot;
+                               exit_option = exit_reset;
                                leave = 1;
                        } else {
                                printf("Command error\n");
                                lcd_clear();
                                lcd_printf("\n\n\t%s command error\n",
-                                          mode_name[mode]);
+                                          mode_name[mode][0]);
 
                                exit_option = exit_back;
                                leave = 0;
@@ -260,11 +261,11 @@ static void display_download_menu(int mode)
        selection[mode] = "[=>]";
 
        lcd_clear();
-       lcd_printf("\n\t\tDownload Mode Menu\n");
+       lcd_printf("\n\n\t\tDownload Mode Menu\n\n");
 
        for (i = 0; i <= BOOT_MODE_EXIT; i++)
                lcd_printf("\t%s  %s - %s\n\n", selection[i],
-                                               mode_name[i],
+                                               mode_name[i][0],
                                                mode_info[i]);
 }
 
@@ -273,10 +274,38 @@ static void download_menu(void)
        int mode = 0;
        int last_mode = 0;
        int run;
-       int key;
+       int key = 0;
+       int timeout = 15; /* sec */
+       int i;
 
        display_download_menu(mode);
 
+       lcd_puts("\n");
+
+       /* Start count if no key is pressed */
+       while (check_keys())
+               continue;
+
+       while (timeout--) {
+               lcd_printf("\r\tNormal boot will start in: %2.d seconds.",
+                          timeout);
+
+               /* about 1000 ms in for loop */
+               for (i = 0; i < 10; i++) {
+                       mdelay(100);
+                       key = check_keys();
+                       if (key)
+                               break;
+               }
+               if (key)
+                       break;
+       }
+
+       if (!key) {
+               lcd_clear();
+               return;
+       }
+
        while (1) {
                run = 0;
 
@@ -284,7 +313,7 @@ static void download_menu(void)
                        display_download_menu(mode);
 
                last_mode = mode;
-               mdelay(100);
+               mdelay(200);
 
                key = check_keys();
                switch (key) {
@@ -305,7 +334,7 @@ static void download_menu(void)
 
                if (run) {
                        if (mode_leave_menu(mode))
-                               break;
+                               run_command("reset", 0);
 
                        display_download_menu(mode);
                }
@@ -314,45 +343,6 @@ static void download_menu(void)
        lcd_clear();
 }
 
-static void display_mode_info(void)
-{
-       lcd_position_cursor(4, 4);
-       lcd_printf("%s\n", U_BOOT_VERSION);
-       lcd_puts("\nDownload Mode Menu\n");
-#ifdef CONFIG_SYS_BOARD
-       lcd_printf("Board name: %s\n", CONFIG_SYS_BOARD);
-#endif
-       lcd_printf("Press POWER KEY to display MENU options.");
-}
-
-static int boot_menu(void)
-{
-       int key = 0;
-       int timeout = 10;
-
-       display_mode_info();
-
-       while (timeout--) {
-               lcd_printf("\rNormal boot will start in: %d seconds.", timeout);
-               mdelay(1000);
-
-               key = key_pressed(KEY_POWER);
-               if (key)
-                       break;
-       }
-
-       lcd_clear();
-
-       /* If PWR pressed - show download menu */
-       if (key) {
-               printf("Power pressed - go to download menu\n");
-               download_menu();
-               printf("Download mode exit.\n");
-       }
-
-       return 0;
-}
-
 void check_boot_mode(void)
 {
        int pwr_key;
@@ -365,7 +355,7 @@ void check_boot_mode(void)
        power_key_pressed(KEY_PWR_INTERRUPT_REG);
 
        if (key_pressed(KEY_VOLUMEUP))
-               boot_menu();
+               download_menu();
        else if (key_pressed(KEY_VOLUMEDOWN))
                mode_leave_menu(BOOT_MODE_THOR);
 }
index 61b9ece0387ee3b0916aefaefb4d59890817c689..4cea63b813ed3f5ba16c6b0a971aab6adba8c344 100644 (file)
@@ -17,8 +17,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static struct s5pc110_gpio *s5pc110_gpio;
-
 u32 get_board_rev(void)
 {
        return 0;
@@ -27,8 +25,6 @@ u32 get_board_rev(void)
 int board_init(void)
 {
        /* Set Initial global variables */
-       s5pc110_gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE;
-
        gd->bd->bi_arch_number = MACH_TYPE_GONI;
        gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
 
@@ -82,7 +78,7 @@ int board_mmc_init(bd_t *bis)
        int i, ret, ret_sd = 0;
 
        /* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */
-       s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1);
+       gpio_direction_output(S5PC110_GPIO_J27, 1);
 
        /*
         * MMC0 GPIO
@@ -91,15 +87,15 @@ int board_mmc_init(bd_t *bis)
         * GPG0[2]      SD_0_CDn        -> Not used
         * GPG0[3:6]    SD_0_DATA[0:3]
         */
-       for (i = 0; i < 7; i++) {
-               if (i == 2)
+       for (i = S5PC110_GPIO_G00; i < S5PC110_GPIO_G07; i++) {
+               if (i == S5PC110_GPIO_G02)
                        continue;
                /* GPG0[0:6] special function 2 */
-               s5p_gpio_cfg_pin(&s5pc110_gpio->g0, i, 0x2);
+               gpio_cfg_pin(i, 0x2);
                /* GPG0[0:6] pull disable */
-               s5p_gpio_set_pull(&s5pc110_gpio->g0, i, GPIO_PULL_NONE);
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
                /* GPG0[0:6] drv 4x */
-               s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X);
+               gpio_set_drv(i, S5P_GPIO_DRV_4X);
        }
 
        ret = s5p_mmc_init(0, 4);
@@ -110,20 +106,20 @@ int board_mmc_init(bd_t *bis)
         * SD card (T_FLASH) detect and init
         * T_FLASH_DETECT: EINT28: GPH3[4] input mode
         */
-       s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT);
-       s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP);
+       gpio_cfg_pin(S5PC110_GPIO_H34, S5P_GPIO_INPUT);
+       gpio_set_pull(S5PC110_GPIO_H34, S5P_GPIO_PULL_UP);
 
-       if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) {
-               for (i = 0; i < 7; i++) {
-                       if (i == 2)
+       if (!gpio_get_value(S5PC110_GPIO_H34)) {
+               for (i = S5PC110_GPIO_G20; i < S5PC110_GPIO_G27; i++) {
+                       if (i == S5PC110_GPIO_G22)
                                continue;
 
                        /* GPG2[0:6] special function 2 */
-                       s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2);
+                       gpio_cfg_pin(i, 0x2);
                        /* GPG2[0:6] pull disable */
-                       s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE);
+                       gpio_set_pull(i, S5P_GPIO_PULL_NONE);
                        /* GPG2[0:6] drv 4x */
-                       s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X);
+                       gpio_set_drv(i, S5P_GPIO_DRV_4X);
                }
 
                ret_sd = s5p_mmc_init(2, 4);
index 379a45cc23c51a24213afbaa89ab9d58f5bf1cee..58821c41a41b0337ee50daf37119e1514f52dfed 100644 (file)
@@ -27,12 +27,9 @@ DECLARE_GLOBAL_DATA_PTR;
 #ifdef CONFIG_SOUND_MAX98095
 static void board_enable_audio_codec(void)
 {
-       struct exynos5_gpio_part1 *gpio1 = (struct exynos5_gpio_part1 *)
-                                               samsung_get_base_gpio_part1();
-
        /* Enable MAX98095 Codec */
-       s5p_gpio_direction_output(&gpio1->x1, 7, 1);
-       s5p_gpio_set_pull(&gpio1->x1, 7, GPIO_PULL_NONE);
+       gpio_direction_output(EXYNOS5_GPIO_X17, 1);
+       gpio_set_pull(EXYNOS5_GPIO_X17, S5P_GPIO_PULL_NONE);
 }
 #endif
 
@@ -47,19 +44,16 @@ int exynos_init(void)
 #ifdef CONFIG_LCD
 void exynos_cfg_lcd_gpio(void)
 {
-       struct exynos5_gpio_part1 *gpio1 =
-               (struct exynos5_gpio_part1 *)samsung_get_base_gpio_part1();
-
        /* For Backlight */
-       s5p_gpio_cfg_pin(&gpio1->b2, 0, GPIO_OUTPUT);
-       s5p_gpio_set_value(&gpio1->b2, 0, 1);
+       gpio_cfg_pin(EXYNOS5_GPIO_B20, S5P_GPIO_OUTPUT);
+       gpio_set_value(EXYNOS5_GPIO_B20, 1);
 
        /* LCD power on */
-       s5p_gpio_cfg_pin(&gpio1->x1, 5, GPIO_OUTPUT);
-       s5p_gpio_set_value(&gpio1->x1, 5, 1);
+       gpio_cfg_pin(EXYNOS5_GPIO_X15, S5P_GPIO_OUTPUT);
+       gpio_set_value(EXYNOS5_GPIO_X15, 1);
 
        /* Set Hotplug detect for DP */
-       s5p_gpio_cfg_pin(&gpio1->x0, 7, GPIO_FUNC(0x3));
+       gpio_cfg_pin(EXYNOS5_GPIO_X07, S5P_GPIO_FUNC(0x3));
 }
 
 void exynos_set_dp_phy(unsigned int onoff)
index 28a6d9e718614c01764398e712e00d89c634501d..014b7bdf8902dbde6d73fb8ffd505c369038027b 100644 (file)
@@ -29,12 +29,9 @@ DECLARE_GLOBAL_DATA_PTR;
 #ifdef CONFIG_SOUND_MAX98095
 static void  board_enable_audio_codec(void)
 {
-       struct exynos5_gpio_part1 *gpio1 = (struct exynos5_gpio_part1 *)
-                                               samsung_get_base_gpio_part1();
-
        /* Enable MAX98095 Codec */
-       s5p_gpio_direction_output(&gpio1->x1, 7, 1);
-       s5p_gpio_set_pull(&gpio1->x1, 7, GPIO_PULL_NONE);
+       gpio_direction_output(EXYNOS5_GPIO_X17, 1);
+       gpio_set_pull(EXYNOS5_GPIO_X17, S5P_GPIO_PULL_NONE);
 }
 #endif
 
@@ -275,19 +272,17 @@ int exynos_power_init(void)
 #ifdef CONFIG_LCD
 void exynos_cfg_lcd_gpio(void)
 {
-       struct exynos5_gpio_part1 *gpio1 =
-               (struct exynos5_gpio_part1 *) samsung_get_base_gpio_part1();
 
        /* For Backlight */
-       s5p_gpio_cfg_pin(&gpio1->b2, 0, GPIO_OUTPUT);
-       s5p_gpio_set_value(&gpio1->b2, 0, 1);
+       gpio_cfg_pin(EXYNOS5_GPIO_B20, S5P_GPIO_OUTPUT);
+       gpio_set_value(EXYNOS5_GPIO_B20, 1);
 
        /* LCD power on */
-       s5p_gpio_cfg_pin(&gpio1->x1, 5, GPIO_OUTPUT);
-       s5p_gpio_set_value(&gpio1->x1, 5, 1);
+       gpio_cfg_pin(EXYNOS5_GPIO_X15, S5P_GPIO_OUTPUT);
+       gpio_set_value(EXYNOS5_GPIO_X15, 1);
 
        /* Set Hotplug detect for DP */
-       s5p_gpio_cfg_pin(&gpio1->x0, 7, GPIO_FUNC(0x3));
+       gpio_cfg_pin(EXYNOS5_GPIO_X07, S5P_GPIO_FUNC(0x3));
 }
 
 void exynos_set_dp_phy(unsigned int onoff)
index e4606ecd2aa2a1bc787d9b67327904d3b3ecbdca..920752295354d01c26708ccebe89a18e2f25ff9e 100644 (file)
@@ -21,11 +21,8 @@ DECLARE_GLOBAL_DATA_PTR;
 #ifdef CONFIG_USB_EHCI_EXYNOS
 static int board_usb_vbus_init(void)
 {
-       struct exynos5_gpio_part1 *gpio1 = (struct exynos5_gpio_part1 *)
-                                               samsung_get_base_gpio_part1();
-
        /* Enable VBUS power switch */
-       s5p_gpio_direction_output(&gpio1->x2, 6, 1);
+       gpio_direction_output(EXYNOS5420_GPIO_X26, 1);
 
        /* VBUS turn ON time */
        mdelay(3);
@@ -49,15 +46,15 @@ void cfg_lcd_gpio(void)
                (struct exynos5_gpio_part1 *)samsung_get_base_gpio_part1();
 
        /* For Backlight */
-       s5p_gpio_cfg_pin(&gpio1->b2, 0, GPIO_OUTPUT);
-       s5p_gpio_set_value(&gpio1->b2, 0, 1);
+       gpio_cfg_pin(EXYNOS5420_GPIO_B20, S5P_GPIO_OUTPUT);
+       gpio_set_value(EXYNOS5420_GPIO_B20, 1);
 
        /* LCD power on */
-       s5p_gpio_cfg_pin(&gpio1->x1, 5, GPIO_OUTPUT);
-       s5p_gpio_set_value(&gpio1->x1, 5, 1);
+       gpio_cfg_pin(EXYNOS5420_GPIO_X15, S5P_GPIO_OUTPUT);
+       gpio_set_value(EXYNOS5420_GPIO_X15, 1);
 
        /* Set Hotplug detect for DP */
-       s5p_gpio_cfg_pin(&gpio1->x0, 7, GPIO_FUNC(0x3));
+       gpio_cfg_pin(EXYNOS5420_GPIO_X07, S5P_GPIO_FUNC(0x3));
 }
 
 vidinfo_t panel_info = {
index 860c851b25751481e6ac67feaec33bb7eea155b2..e009564a5988ce8a79a9bd7e83634ee9e8ca7ac4 100644 (file)
@@ -21,11 +21,8 @@ static void smc9115_pre_init(void)
 {
        u32 smc_bw_conf, smc_bc_conf;
 
-       struct s5pc100_gpio *const gpio =
-               (struct s5pc100_gpio *)samsung_get_base_gpio();
-
        /* gpio configuration GPK0CON */
-       s5p_gpio_cfg_pin(&gpio->k0, CONFIG_ENV_SROM_BANK, GPIO_FUNC(2));
+       gpio_cfg_pin(S5PC100_GPIO_K00 + CONFIG_ENV_SROM_BANK, S5P_GPIO_FUNC(2));
 
        /* Ethernet needs bus width of 16 bits */
        smc_bw_conf = SMC_DATA16_WIDTH(CONFIG_ENV_SROM_BANK);
index 81a306082d865de24a13d8f8b78c75deb4ab1b18..8eca358981f10351a639c7775a58e19504072106 100644 (file)
 #include <asm/arch/sromc.h>
 
 DECLARE_GLOBAL_DATA_PTR;
-struct exynos4_gpio_part1 *gpio1;
-struct exynos4_gpio_part2 *gpio2;
 
 static void smc9115_pre_init(void)
 {
        u32 smc_bw_conf, smc_bc_conf;
 
        /* gpio configuration GPK0CON */
-       s5p_gpio_cfg_pin(&gpio2->y0, CONFIG_ENV_SROM_BANK, GPIO_FUNC(2));
+       gpio_cfg_pin(EXYNOS4_GPIO_Y00 + CONFIG_ENV_SROM_BANK, S5P_GPIO_FUNC(2));
 
        /* Ethernet needs bus width of 16 bits */
        smc_bw_conf = SROMC_DATA16_WIDTH(CONFIG_ENV_SROM_BANK);
@@ -38,9 +36,6 @@ static void smc9115_pre_init(void)
 
 int board_init(void)
 {
-       gpio1 = (struct exynos4_gpio_part1 *) EXYNOS4_GPIO_PART1_BASE;
-       gpio2 = (struct exynos4_gpio_part2 *) EXYNOS4_GPIO_PART2_BASE;
-
        smc9115_pre_init();
 
        gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL);
@@ -103,21 +98,21 @@ int board_mmc_init(bd_t *bis)
         * GPK2[2]      SD_2_CDn
         * GPK2[3:6]    SD_2_DATA[0:3](2)
         */
-       for (i = 0; i < 7; i++) {
+       for (i = EXYNOS4_GPIO_K20; i < EXYNOS4_GPIO_K27; i++) {
                /* GPK2[0:6] special function 2 */
-               s5p_gpio_cfg_pin(&gpio2->k2, i, GPIO_FUNC(0x2));
+               gpio_cfg_pin(i, S5P_GPIO_FUNC(0x2));
 
                /* GPK2[0:6] drv 4x */
-               s5p_gpio_set_drv(&gpio2->k2, i, GPIO_DRV_4X);
+               gpio_set_drv(i, S5P_GPIO_DRV_4X);
 
                /* GPK2[0:1] pull disable */
-               if (i == 0 || i == 1) {
-                       s5p_gpio_set_pull(&gpio2->k2, i, GPIO_PULL_NONE);
+               if (i == EXYNOS4_GPIO_K20 || i == EXYNOS4_GPIO_K21) {
+                       gpio_set_pull(i, S5P_GPIO_PULL_NONE);
                        continue;
                }
 
                /* GPK2[2:6] pull up */
-               s5p_gpio_set_pull(&gpio2->k2, i, GPIO_PULL_UP);
+               gpio_set_pull(i, S5P_GPIO_PULL_UP);
        }
        err = s5p_mmc_init(2, 4);
        return err;
index ab0ad1d6505b9ae94e5f98fc0bec824092b7a100..fec72d4c54223dfdd653809533addd934c7db3b1 100644 (file)
@@ -54,8 +54,6 @@ int exynos_init(void)
 void i2c_init_board(void)
 {
        int err;
-       struct exynos4_gpio_part2 *gpio2 =
-               (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
 
        /* I2C_5 -> PMIC */
        err = exynos_pinmux_config(PERIPH_ID_I2C5, PINMUX_FLAG_NONE);
@@ -65,8 +63,8 @@ void i2c_init_board(void)
        }
 
        /* I2C_8 -> FG */
-       s5p_gpio_direction_output(&gpio2->y4, 0, 1);
-       s5p_gpio_direction_output(&gpio2->y4, 1, 1);
+       gpio_direction_output(EXYNOS4_GPIO_Y40, 1);
+       gpio_direction_output(EXYNOS4_GPIO_Y41, 1);
 }
 
 static void trats_low_power_mode(void)
@@ -347,21 +345,19 @@ int exynos_power_init(void)
 
 static unsigned int get_hw_revision(void)
 {
-       struct exynos4_gpio_part1 *gpio =
-               (struct exynos4_gpio_part1 *)samsung_get_base_gpio_part1();
        int hwrev = 0;
        int i;
 
        /* hw_rev[3:0] == GPE1[3:0] */
-       for (i = 0; i < 4; i++) {
-               s5p_gpio_cfg_pin(&gpio->e1, i, GPIO_INPUT);
-               s5p_gpio_set_pull(&gpio->e1, i, GPIO_PULL_NONE);
+       for (i = EXYNOS4_GPIO_E10; i < EXYNOS4_GPIO_E14; i++) {
+               gpio_cfg_pin(i, S5P_GPIO_INPUT);
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
        }
 
        udelay(1);
 
        for (i = 0; i < 4; i++)
-               hwrev |= (s5p_gpio_get_value(&gpio->e1, i) << i);
+               hwrev |= (gpio_get_value(EXYNOS4_GPIO_E10 + i) << i);
 
        debug("hwrev 0x%x\n", hwrev);
 
@@ -442,11 +438,8 @@ int g_dnl_board_usb_cable_connected(void)
 
 static void pmic_reset(void)
 {
-       struct exynos4_gpio_part2 *gpio =
-               (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
-
-       s5p_gpio_direction_output(&gpio->x0, 7, 1);
-       s5p_gpio_set_pull(&gpio->x2, 7, GPIO_PULL_NONE);
+       gpio_direction_output(EXYNOS4_GPIO_X07, 1);
+       gpio_set_pull(EXYNOS4_GPIO_X27, S5P_GPIO_PULL_NONE);
 }
 
 static void board_clock_init(void)
@@ -523,12 +516,9 @@ static void board_power_init(void)
 
 static void exynos_uart_init(void)
 {
-       struct exynos4_gpio_part2 *gpio2 =
-               (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
-
        /* UART_SEL GPY4[7] (part2) at EXYNOS4 */
-       s5p_gpio_set_pull(&gpio2->y4, 7, GPIO_PULL_UP);
-       s5p_gpio_direction_output(&gpio2->y4, 7, 1);
+       gpio_set_pull(EXYNOS4_GPIO_Y47, S5P_GPIO_PULL_UP);
+       gpio_direction_output(EXYNOS4_GPIO_Y47, 1);
 }
 
 int exynos_early_init_f(void)
@@ -544,14 +534,11 @@ int exynos_early_init_f(void)
 
 void exynos_reset_lcd(void)
 {
-       struct exynos4_gpio_part2 *gpio2 =
-               (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
-
-       s5p_gpio_direction_output(&gpio2->y4, 5, 1);
+       gpio_direction_output(EXYNOS4_GPIO_Y45, 1);
        udelay(10000);
-       s5p_gpio_direction_output(&gpio2->y4, 5, 0);
+       gpio_direction_output(EXYNOS4_GPIO_Y45, 0);
        udelay(10000);
-       s5p_gpio_direction_output(&gpio2->y4, 5, 1);
+       gpio_direction_output(EXYNOS4_GPIO_Y45, 1);
 }
 
 int lcd_power(void)
index 47095252a7522e82256f832ce35267001808436f..e4987ce8b4fe45cf73431d7a4b36611942b73d66 100644 (file)
@@ -25,9 +25,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static struct exynos4x12_gpio_part1 *gpio1;
-static struct exynos4x12_gpio_part2 *gpio2;
-
 static unsigned int board_rev = -1;
 
 static inline u32 get_model_rev(void);
@@ -37,26 +34,24 @@ static void check_hw_revision(void)
        int modelrev = 0;
        int i;
 
-       gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2();
-
        /*
         * GPM1[1:0]: MODEL_REV[1:0]
         * Don't set as pull-none for these N/C pin.
         * TRM say that it may cause unexcepted state and leakage current.
         * and pull-none is only for output function.
         */
-       for (i = 0; i < 2; i++)
-               s5p_gpio_cfg_pin(&gpio2->m1, i, GPIO_INPUT);
+       for (i = EXYNOS4X12_GPIO_M10; i < EXYNOS4X12_GPIO_M12; i++)
+               gpio_cfg_pin(i, S5P_GPIO_INPUT);
 
        /* GPM1[5:2]: HW_REV[3:0] */
-       for (i = 2; i < 6; i++) {
-               s5p_gpio_cfg_pin(&gpio2->m1, i, GPIO_INPUT);
-               s5p_gpio_set_pull(&gpio2->m1, i, GPIO_PULL_NONE);
+       for (i = EXYNOS4X12_GPIO_M12; i < EXYNOS4X12_GPIO_M16; i++) {
+               gpio_cfg_pin(i, S5P_GPIO_INPUT);
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
        }
 
        /* GPM1[1:0]: MODEL_REV[1:0] */
        for (i = 0; i < 2; i++)
-               modelrev |= (s5p_gpio_get_value(&gpio2->m1, i) << i);
+               modelrev |= (gpio_get_value(EXYNOS4X12_GPIO_M10 + i) << i);
 
        /* board_rev[15:8] = model */
        board_rev = modelrev << 8;
@@ -74,26 +69,24 @@ static inline u32 get_model_rev(void)
 
 static void board_external_gpio_init(void)
 {
-       gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2();
-
        /*
         * some pins which in alive block are connected with external pull-up
         * but it's default setting is pull-down.
         * if that pin set as input then that floated
         */
 
-       s5p_gpio_set_pull(&gpio2->x0, 2, GPIO_PULL_NONE);       /* PS_ALS_INT */
-       s5p_gpio_set_pull(&gpio2->x0, 4, GPIO_PULL_NONE);       /* TSP_nINT */
-       s5p_gpio_set_pull(&gpio2->x0, 7, GPIO_PULL_NONE);       /* AP_PMIC_IRQ*/
-       s5p_gpio_set_pull(&gpio2->x1, 5, GPIO_PULL_NONE);       /* IF_PMIC_IRQ*/
-       s5p_gpio_set_pull(&gpio2->x2, 0, GPIO_PULL_NONE);       /* VOL_UP */
-       s5p_gpio_set_pull(&gpio2->x2, 1, GPIO_PULL_NONE);       /* VOL_DOWN */
-       s5p_gpio_set_pull(&gpio2->x2, 3, GPIO_PULL_NONE);       /* FUEL_ALERT */
-       s5p_gpio_set_pull(&gpio2->x2, 4, GPIO_PULL_NONE);       /* ADC_INT */
-       s5p_gpio_set_pull(&gpio2->x2, 7, GPIO_PULL_NONE);       /* nPOWER */
-       s5p_gpio_set_pull(&gpio2->x3, 0, GPIO_PULL_NONE);       /* WPC_INT */
-       s5p_gpio_set_pull(&gpio2->x3, 5, GPIO_PULL_NONE);       /* OK_KEY */
-       s5p_gpio_set_pull(&gpio2->x3, 7, GPIO_PULL_NONE);       /* HDMI_HPD */
+       gpio_set_pull(EXYNOS4X12_GPIO_X02, S5P_GPIO_PULL_NONE); /* PS_ALS_INT */
+       gpio_set_pull(EXYNOS4X12_GPIO_X04, S5P_GPIO_PULL_NONE); /* TSP_nINT */
+       gpio_set_pull(EXYNOS4X12_GPIO_X07, S5P_GPIO_PULL_NONE); /* AP_PMIC_IRQ*/
+       gpio_set_pull(EXYNOS4X12_GPIO_X15, S5P_GPIO_PULL_NONE); /* IF_PMIC_IRQ*/
+       gpio_set_pull(EXYNOS4X12_GPIO_X20, S5P_GPIO_PULL_NONE); /* VOL_UP */
+       gpio_set_pull(EXYNOS4X12_GPIO_X21, S5P_GPIO_PULL_NONE); /* VOL_DOWN */
+       gpio_set_pull(EXYNOS4X12_GPIO_X23, S5P_GPIO_PULL_NONE); /* FUEL_ALERT */
+       gpio_set_pull(EXYNOS4X12_GPIO_X24, S5P_GPIO_PULL_NONE); /* ADC_INT */
+       gpio_set_pull(EXYNOS4X12_GPIO_X27, S5P_GPIO_PULL_NONE); /* nPOWER */
+       gpio_set_pull(EXYNOS4X12_GPIO_X30, S5P_GPIO_PULL_NONE); /* WPC_INT */
+       gpio_set_pull(EXYNOS4X12_GPIO_X35, S5P_GPIO_PULL_NONE); /* OK_KEY */
+       gpio_set_pull(EXYNOS4X12_GPIO_X37, S5P_GPIO_PULL_NONE); /* HDMI_HPD */
 }
 
 #ifdef CONFIG_SYS_I2C_INIT_BOARD
@@ -101,9 +94,6 @@ static void board_init_i2c(void)
 {
        int err;
 
-       gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1();
-       gpio2 = (struct exynos4x12_gpio_part2 *)samsung_get_base_gpio_part2();
-
        /* I2C_7 */
        err = exynos_pinmux_config(PERIPH_ID_I2C7, PINMUX_FLAG_NONE);
        if (err) {
@@ -112,12 +102,12 @@ static void board_init_i2c(void)
        }
 
        /* I2C_8 */
-       s5p_gpio_direction_output(&gpio1->f1, 4, 1);
-       s5p_gpio_direction_output(&gpio1->f1, 5, 1);
+       gpio_direction_output(EXYNOS4X12_GPIO_F14, 1);
+       gpio_direction_output(EXYNOS4X12_GPIO_F15, 1);
 
        /* I2C_9 */
-       s5p_gpio_direction_output(&gpio2->m2, 1, 1);
-       s5p_gpio_direction_output(&gpio2->m2, 0, 1);
+       gpio_direction_output(EXYNOS4X12_GPIO_M21, 1);
+       gpio_direction_output(EXYNOS4X12_GPIO_M20, 1);
 }
 #endif
 
@@ -125,17 +115,17 @@ static void board_init_i2c(void)
 int get_soft_i2c_scl_pin(void)
 {
        if (I2C_ADAP_HWNR)
-               return exynos4x12_gpio_get(2, m2, 1); /* I2C9 */
+               return EXYNOS4X12_GPIO_M21; /* I2C9 */
        else
-               return exynos4x12_gpio_get(1, f1, 4); /* I2C8 */
+               return EXYNOS4X12_GPIO_F14; /* I2C8 */
 }
 
 int get_soft_i2c_sda_pin(void)
 {
        if (I2C_ADAP_HWNR)
-               return exynos4x12_gpio_get(2, m2, 0); /* I2C9 */
+               return EXYNOS4X12_GPIO_M20; /* I2C9 */
        else
-               return exynos4x12_gpio_get(1, f1, 5); /* I2C8 */
+               return EXYNOS4X12_GPIO_F15; /* I2C8 */
 }
 #endif
 
@@ -396,11 +386,9 @@ void exynos_lcd_power_on(void)
 {
        struct pmic *p = pmic_get("MAX77686_PMIC");
 
-       gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1();
-
        /* LCD_2.2V_EN: GPC0[1] */
-       s5p_gpio_set_pull(&gpio1->c0, 1, GPIO_PULL_UP);
-       s5p_gpio_direction_output(&gpio1->c0, 1, 1);
+       gpio_set_pull(EXYNOS4X12_GPIO_C01, S5P_GPIO_PULL_UP);
+       gpio_direction_output(EXYNOS4X12_GPIO_C01, 1);
 
        /* LDO25 VCC_3.1V_LCD */
        pmic_probe(p);
@@ -410,12 +398,10 @@ void exynos_lcd_power_on(void)
 
 void exynos_reset_lcd(void)
 {
-       gpio1 = (struct exynos4x12_gpio_part1 *)samsung_get_base_gpio_part1();
-
        /* reset lcd */
-       s5p_gpio_direction_output(&gpio1->f2, 1, 0);
+       gpio_direction_output(EXYNOS4X12_GPIO_F21, 0);
        udelay(10);
-       s5p_gpio_set_value(&gpio1->f2, 1, 1);
+       gpio_set_value(EXYNOS4X12_GPIO_F21, 1);
 }
 
 void exynos_lcd_misc_init(vidinfo_t *vid)
index 8e49195fe1c05d005d24f51baebebe17c5c065c8..47e7f538d65b7cd35943328d91ecb44385096961 100644 (file)
@@ -27,8 +27,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-struct exynos4_gpio_part1 *gpio1;
-struct exynos4_gpio_part2 *gpio2;
 unsigned int board_rev;
 
 u32 get_board_rev(void)
@@ -305,35 +303,35 @@ void exynos_cfg_lcd_gpio(void)
 
        for (i = 0; i < 8; i++) {
                /* set GPF0,1,2[0:7] for RGB Interface and Data lines (32bit) */
-               s5p_gpio_cfg_pin(&gpio1->f0, i, GPIO_FUNC(2));
-               s5p_gpio_cfg_pin(&gpio1->f1, i, GPIO_FUNC(2));
-               s5p_gpio_cfg_pin(&gpio1->f2, i, GPIO_FUNC(2));
+               gpio_cfg_pin(EXYNOS4_GPIO_F00 + i, S5P_GPIO_FUNC(2));
+               gpio_cfg_pin(EXYNOS4_GPIO_F10 + i, S5P_GPIO_FUNC(2));
+               gpio_cfg_pin(EXYNOS4_GPIO_F20 + i, S5P_GPIO_FUNC(2));
                /* pull-up/down disable */
-               s5p_gpio_set_pull(&gpio1->f0, i, GPIO_PULL_NONE);
-               s5p_gpio_set_pull(&gpio1->f1, i, GPIO_PULL_NONE);
-               s5p_gpio_set_pull(&gpio1->f2, i, GPIO_PULL_NONE);
+               gpio_set_pull(EXYNOS4_GPIO_F00 + i, S5P_GPIO_PULL_NONE);
+               gpio_set_pull(EXYNOS4_GPIO_F10 + i, S5P_GPIO_PULL_NONE);
+               gpio_set_pull(EXYNOS4_GPIO_F20 + i, S5P_GPIO_PULL_NONE);
 
                /* drive strength to max (24bit) */
-               s5p_gpio_set_drv(&gpio1->f0, i, GPIO_DRV_4X);
-               s5p_gpio_set_rate(&gpio1->f0, i, GPIO_DRV_SLOW);
-               s5p_gpio_set_drv(&gpio1->f1, i, GPIO_DRV_4X);
-               s5p_gpio_set_rate(&gpio1->f1, i, GPIO_DRV_SLOW);
-               s5p_gpio_set_drv(&gpio1->f2, i, GPIO_DRV_4X);
-               s5p_gpio_set_rate(&gpio1->f0, i, GPIO_DRV_SLOW);
+               gpio_set_drv(EXYNOS4_GPIO_F00 + i, S5P_GPIO_DRV_4X);
+               gpio_set_rate(EXYNOS4_GPIO_F00 + i, S5P_GPIO_DRV_SLOW);
+               gpio_set_drv(EXYNOS4_GPIO_F10 + i, S5P_GPIO_DRV_4X);
+               gpio_set_rate(EXYNOS4_GPIO_F10 + i, S5P_GPIO_DRV_SLOW);
+               gpio_set_drv(EXYNOS4_GPIO_F20 + i, S5P_GPIO_DRV_4X);
+               gpio_set_rate(EXYNOS4_GPIO_F00 + i, S5P_GPIO_DRV_SLOW);
        }
 
-       for (i = 0; i < f3_end; i++) {
+       for (i = EXYNOS4_GPIO_F30; i < (EXYNOS4_GPIO_F30 + f3_end); i++) {
                /* set GPF3[0:3] for RGB Interface and Data lines (32bit) */
-               s5p_gpio_cfg_pin(&gpio1->f3, i, GPIO_FUNC(2));
+               gpio_cfg_pin(i, S5P_GPIO_FUNC(2));
                /* pull-up/down disable */
-               s5p_gpio_set_pull(&gpio1->f3, i, GPIO_PULL_NONE);
+               gpio_set_pull(i, S5P_GPIO_PULL_NONE);
                /* drive strength to max (24bit) */
-               s5p_gpio_set_drv(&gpio1->f3, i, GPIO_DRV_4X);
-               s5p_gpio_set_rate(&gpio1->f3, i, GPIO_DRV_SLOW);
+               gpio_set_drv(i, S5P_GPIO_DRV_4X);
+               gpio_set_rate(i, S5P_GPIO_DRV_SLOW);
        }
 
        /* gpio pad configuration for LCD reset. */
-       s5p_gpio_cfg_pin(&gpio2->y4, 5, GPIO_OUTPUT);
+       gpio_cfg_pin(EXYNOS4_GPIO_Y45, S5P_GPIO_OUTPUT);
 
        spi_init();
 }
@@ -345,11 +343,11 @@ int mipi_power(void)
 
 void exynos_reset_lcd(void)
 {
-       s5p_gpio_set_value(&gpio2->y4, 5, 1);
+       gpio_set_value(EXYNOS4_GPIO_Y45, 1);
        udelay(10000);
-       s5p_gpio_set_value(&gpio2->y4, 5, 0);
+       gpio_set_value(EXYNOS4_GPIO_Y45, 0);
        udelay(10000);
-       s5p_gpio_set_value(&gpio2->y4, 5, 1);
+       gpio_set_value(EXYNOS4_GPIO_Y45, 1);
        udelay(100);
 }
 
@@ -379,9 +377,6 @@ void exynos_enable_ldo(unsigned int onoff)
 
 int exynos_init(void)
 {
-       gpio1 = (struct exynos4_gpio_part1 *) EXYNOS4_GPIO_PART1_BASE;
-       gpio2 = (struct exynos4_gpio_part2 *) EXYNOS4_GPIO_PART2_BASE;
-
        gd->bd->bi_arch_number = MACH_TYPE_UNIVERSAL_C210;
 
        switch (get_hwrev()) {
@@ -392,7 +387,7 @@ int exynos_init(void)
                 * you should set it HIGH since it removes the inverter
                 */
                /* MASSMEMORY_EN: XMDMDATA_6: GPE3[6] */
-               s5p_gpio_direction_output(&gpio1->e3, 6, 0);
+               gpio_direction_output(EXYNOS4_GPIO_E36, 0);
                break;
        default:
                /*
@@ -400,7 +395,7 @@ int exynos_init(void)
                 * But set it as HIGH to ensure
                 */
                /* MASSMEMORY_EN: XMDMADDR_3: GPE1[3] */
-               s5p_gpio_direction_output(&gpio1->e1, 3, 1);
+               gpio_direction_output(EXYNOS4_GPIO_E13, 1);
                break;
        }
 
index a9e3d34df9681a24ff5d296e6e58c3eac31cd4d1..2c5a0f8a117e9626813b3947f0a0c8eded6566ca 100644 (file)
@@ -34,6 +34,7 @@ SECTIONS
        .text :
        {
                *(.__image_copy_start)
+               *(.vectors)
                CPUDIR/start.o (.text*)
                board/ti/am335x/built-in.o (.text*)
                *(.text*)
index 8aaf74939f8abe7237af3e9a47668d352c3c4f36..99c3e929ea60150f85d3c1f6df85cc77cde8781a 100644 (file)
@@ -372,7 +372,7 @@ Active  arm         armv7          rmobile     renesas         koelsch
 Active  arm         armv7          rmobile     renesas         koelsch             koelsch_nor                          koelsch:NORFLASH                                                                                                                  Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
 Active  arm         armv7          rmobile     renesas         lager               lager                                -                                                                                                                                 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
 Active  arm         armv7          rmobile     renesas         lager               lager_nor                            lager:NORFLASH                                                                                                                    Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
-Active  arm         armv7          s5pc1xx     samsung         goni                s5p_goni                             -                                                                                                                                 Mateusz Zalega <m.zalega@samsung.com>
+Active  arm         armv7          s5pc1xx     samsung         goni                s5p_goni                             -                                                                                                                                 Przemyslaw Marczak <p.marczak@samsung.com>
 Active  arm         armv7          s5pc1xx     samsung         smdkc100            smdkc100                             -                                                                                                                                 Minkyu Kang <mk7.kang@samsung.com>
 Active  arm         armv7          socfpga     altera          socfpga             socfpga_cyclone5                     -                                                                                                                                 -
 Active  arm         armv7          u8500       st-ericsson     snowball            snowball                             -                                                                                                                                 Mathieu Poirier <mathieu.poirier@linaro.org>
index 11a0472c695eeb4c9aeae1e663a7a62e186ff411..db7b67373101636b61034b3fc90d2b147a33219a 100644 (file)
@@ -8,11 +8,9 @@
 #include <common.h>
 #include <asm/io.h>
 #include <asm/gpio.h>
+#include <asm/arch/gpio.h>
 
-#define S5P_GPIO_GET_BANK(x)   ((x >> S5P_GPIO_BANK_SHIFT) \
-                               & S5P_GPIO_BANK_MASK)
-
-#define S5P_GPIO_GET_PIN(x)    (x & S5P_GPIO_PIN_MASK)
+#define S5P_GPIO_GET_PIN(x)    (x % GPIO_PER_BANK)
 
 #define CON_MASK(x)            (0xf << ((x) << 2))
 #define CON_SFR(x, v)          ((v) << ((x) << 2))
 #define RATE_MASK(x)           (0x1 << (x + 16))
 #define RATE_SET(x)            (0x1 << (x + 16))
 
-void s5p_gpio_cfg_pin(struct s5p_gpio_bank *bank, int gpio, int cfg)
+#define name_to_gpio(n) s5p_name_to_gpio(n)
+static inline int s5p_name_to_gpio(const char *name)
+{
+       unsigned num, irregular_set_number, irregular_bank_base;
+       const struct gpio_name_num_table *tabp;
+       char this_bank, bank_name, irregular_bank_name;
+       char *endp;
+
+       /*
+        * The gpio name starts with either 'g' or 'gp' followed by the bank
+        * name character. Skip one or two characters depending on the prefix.
+        */
+       if (name[0] == 'g' && name[1] == 'p')
+               name += 2;
+       else if (name[0] == 'g')
+               name++;
+       else
+               return -1; /* Name must start with 'g' */
+
+       bank_name = *name++;
+       if (!*name)
+               return -1; /* At least one digit is required/expected. */
+
+       /*
+        * On both exynos5 and exynos5420 architectures there is a bank of
+        * GPIOs which does not fall into the regular address pattern. Those
+        * banks are c4 on Exynos5 and y7 on Exynos5420. The rest of the below
+        * assignments help to handle these irregularities.
+        */
+#if defined(CONFIG_EXYNOS4) || defined(CONFIG_EXYNOS5)
+       if (cpu_is_exynos5()) {
+               if (proid_is_exynos5420()) {
+                       tabp = exynos5420_gpio_table;
+                       irregular_bank_name = 'y';
+                       irregular_set_number = '7';
+                       irregular_bank_base = EXYNOS5420_GPIO_Y70;
+               } else {
+                       tabp = exynos5_gpio_table;
+                       irregular_bank_name = 'c';
+                       irregular_set_number = '4';
+                       irregular_bank_base = EXYNOS5_GPIO_C40;
+               }
+       } else {
+               if (proid_is_exynos4412())
+                       tabp = exynos4x12_gpio_table;
+               else
+                       tabp = exynos4_gpio_table;
+               irregular_bank_name = 0;
+               irregular_set_number = 0;
+               irregular_bank_base = 0;
+       }
+#else
+       if (cpu_is_s5pc110())
+               tabp = s5pc110_gpio_table;
+       else
+               tabp = s5pc100_gpio_table;
+       irregular_bank_name = 0;
+       irregular_set_number = 0;
+       irregular_bank_base = 0;
+#endif
+
+       this_bank = tabp->bank;
+       do {
+               if (bank_name == this_bank) {
+                       unsigned pin_index; /* pin number within the bank */
+                       if ((bank_name == irregular_bank_name) &&
+                           (name[0] == irregular_set_number)) {
+                               pin_index = name[1] - '0';
+                               /* Irregular sets have 8 pins. */
+                               if (pin_index >= GPIO_PER_BANK)
+                                       return -1;
+                               num = irregular_bank_base + pin_index;
+                       } else {
+                               pin_index = simple_strtoul(name, &endp, 8);
+                               pin_index -= tabp->bank_offset;
+                               /*
+                                * Sanity check: bunk 'z' has no set number,
+                                * for all other banks there must be exactly
+                                * two octal digits, and the resulting number
+                                * should not exceed the number of pins in the
+                                * bank.
+                                */
+                               if (((bank_name != 'z') && !name[1]) ||
+                                   *endp ||
+                                   (pin_index >= tabp->bank_size))
+                                       return -1;
+                               num = tabp->base + pin_index;
+                       }
+                       return num;
+               }
+               this_bank = (++tabp)->bank;
+       } while (this_bank);
+
+       return -1;
+}
+
+static void s5p_gpio_cfg_pin(struct s5p_gpio_bank *bank, int gpio, int cfg)
 {
        unsigned int value;
 
@@ -38,18 +132,7 @@ void s5p_gpio_cfg_pin(struct s5p_gpio_bank *bank, int gpio, int cfg)
        writel(value, &bank->con);
 }
 
-void s5p_gpio_direction_output(struct s5p_gpio_bank *bank, int gpio, int en)
-{
-       s5p_gpio_cfg_pin(bank, gpio, GPIO_OUTPUT);
-       s5p_gpio_set_value(bank, gpio, en);
-}
-
-void s5p_gpio_direction_input(struct s5p_gpio_bank *bank, int gpio)
-{
-       s5p_gpio_cfg_pin(bank, gpio, GPIO_INPUT);
-}
-
-void s5p_gpio_set_value(struct s5p_gpio_bank *bank, int gpio, int en)
+static void s5p_gpio_set_value(struct s5p_gpio_bank *bank, int gpio, int en)
 {
        unsigned int value;
 
@@ -60,7 +143,19 @@ void s5p_gpio_set_value(struct s5p_gpio_bank *bank, int gpio, int en)
        writel(value, &bank->dat);
 }
 
-unsigned int s5p_gpio_get_value(struct s5p_gpio_bank *bank, int gpio)
+static void s5p_gpio_direction_output(struct s5p_gpio_bank *bank,
+                                     int gpio, int en)
+{
+       s5p_gpio_cfg_pin(bank, gpio, S5P_GPIO_OUTPUT);
+       s5p_gpio_set_value(bank, gpio, en);
+}
+
+static void s5p_gpio_direction_input(struct s5p_gpio_bank *bank, int gpio)
+{
+       s5p_gpio_cfg_pin(bank, gpio, S5P_GPIO_INPUT);
+}
+
+static unsigned int s5p_gpio_get_value(struct s5p_gpio_bank *bank, int gpio)
 {
        unsigned int value;
 
@@ -68,7 +163,7 @@ unsigned int s5p_gpio_get_value(struct s5p_gpio_bank *bank, int gpio)
        return !!(value & DAT_MASK(gpio));
 }
 
-void s5p_gpio_set_pull(struct s5p_gpio_bank *bank, int gpio, int mode)
+static void s5p_gpio_set_pull(struct s5p_gpio_bank *bank, int gpio, int mode)
 {
        unsigned int value;
 
@@ -76,8 +171,8 @@ void s5p_gpio_set_pull(struct s5p_gpio_bank *bank, int gpio, int mode)
        value &= ~PULL_MASK(gpio);
 
        switch (mode) {
-       case GPIO_PULL_DOWN:
-       case GPIO_PULL_UP:
+       case S5P_GPIO_PULL_DOWN:
+       case S5P_GPIO_PULL_UP:
                value |= PULL_MODE(gpio, mode);
                break;
        default:
@@ -87,7 +182,7 @@ void s5p_gpio_set_pull(struct s5p_gpio_bank *bank, int gpio, int mode)
        writel(value, &bank->pull);
 }
 
-void s5p_gpio_set_drv(struct s5p_gpio_bank *bank, int gpio, int mode)
+static void s5p_gpio_set_drv(struct s5p_gpio_bank *bank, int gpio, int mode)
 {
        unsigned int value;
 
@@ -95,10 +190,10 @@ void s5p_gpio_set_drv(struct s5p_gpio_bank *bank, int gpio, int mode)
        value &= ~DRV_MASK(gpio);
 
        switch (mode) {
-       case GPIO_DRV_1X:
-       case GPIO_DRV_2X:
-       case GPIO_DRV_3X:
-       case GPIO_DRV_4X:
+       case S5P_GPIO_DRV_1X:
+       case S5P_GPIO_DRV_2X:
+       case S5P_GPIO_DRV_3X:
+       case S5P_GPIO_DRV_4X:
                value |= DRV_SET(gpio, mode);
                break;
        default:
@@ -108,7 +203,7 @@ void s5p_gpio_set_drv(struct s5p_gpio_bank *bank, int gpio, int mode)
        writel(value, &bank->drv);
 }
 
-void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode)
+static void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode)
 {
        unsigned int value;
 
@@ -116,8 +211,8 @@ void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode)
        value &= ~RATE_MASK(gpio);
 
        switch (mode) {
-       case GPIO_DRV_FAST:
-       case GPIO_DRV_SLOW:
+       case S5P_GPIO_DRV_FAST:
+       case S5P_GPIO_DRV_SLOW:
                value |= RATE_SET(gpio);
                break;
        default:
@@ -127,12 +222,31 @@ void s5p_gpio_set_rate(struct s5p_gpio_bank *bank, int gpio, int mode)
        writel(value, &bank->drv);
 }
 
-struct s5p_gpio_bank *s5p_gpio_get_bank(unsigned gpio)
+struct s5p_gpio_bank *s5p_gpio_get_bank(unsigned int gpio)
 {
-       unsigned bank = S5P_GPIO_GET_BANK(gpio);
-       unsigned base = s5p_gpio_base(gpio);
+       const struct gpio_info *data;
+       unsigned int upto;
+       int i, count;
+
+       data = get_gpio_data();
+       count = get_bank_num();
+       upto = 0;
+
+       for (i = 0; i < count; i++) {
+               debug("i=%d, upto=%d\n", i, upto);
+               if (gpio < data->max_gpio) {
+                       struct s5p_gpio_bank *bank;
+                       bank = (struct s5p_gpio_bank *)data->reg_addr;
+                       bank += (gpio - upto) / GPIO_PER_BANK;
+                       debug("gpio=%d, bank=%p\n", gpio, bank);
+                       return bank;
+               }
+
+               upto = data->max_gpio;
+               data++;
+       }
 
-       return (struct s5p_gpio_bank *)(base + bank);
+       return NULL;
 }
 
 int s5p_gpio_get_pin(unsigned gpio)
@@ -179,3 +293,27 @@ int gpio_set_value(unsigned gpio, int value)
 
        return 0;
 }
+
+void gpio_set_pull(int gpio, int mode)
+{
+       s5p_gpio_set_pull(s5p_gpio_get_bank(gpio),
+                         s5p_gpio_get_pin(gpio), mode);
+}
+
+void gpio_set_drv(int gpio, int mode)
+{
+       s5p_gpio_set_drv(s5p_gpio_get_bank(gpio),
+                        s5p_gpio_get_pin(gpio), mode);
+}
+
+void gpio_cfg_pin(int gpio, int cfg)
+{
+       s5p_gpio_cfg_pin(s5p_gpio_get_bank(gpio),
+                        s5p_gpio_get_pin(gpio), cfg);
+}
+
+void gpio_set_rate(int gpio, int mode)
+{
+       s5p_gpio_set_rate(s5p_gpio_get_bank(gpio),
+                         s5p_gpio_get_pin(gpio), mode);
+}
index 82b30d5ab682eb77ad93d5ee3b6caafbb214c7f3..fea9d17f8e628b1a98fdbd2c921396ba78f3d644 100644 (file)
@@ -221,6 +221,26 @@ int gpio_set_value(unsigned gpio, int value)
        return 0;
 }
 
+void gpio_config_table(const struct tegra_gpio_config *config, int len)
+{
+       int i;
+
+       for (i = 0; i < len; i++) {
+               switch (config[i].init) {
+               case TEGRA_GPIO_INIT_IN:
+                       gpio_direction_input(config[i].gpio);
+                       break;
+               case TEGRA_GPIO_INIT_OUT0:
+                       gpio_direction_output(config[i].gpio, 0);
+                       break;
+               case TEGRA_GPIO_INIT_OUT1:
+                       gpio_direction_output(config[i].gpio, 1);
+                       break;
+               }
+               set_config(config[i].gpio, 1);
+       }
+}
+
 /*
  * Display Tegra GPIO information
  */
index ed67eec2527347740ea731153e368876e56e28f5..ca9c4aa15feea77686f8d5e87b7f24bdb8e1be89 100644 (file)
@@ -18,7 +18,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-struct mmc_host mmc_host[MAX_HOSTS];
+struct mmc_host mmc_host[CONFIG_SYS_MMC_MAX_DEVICE];
 
 #ifndef CONFIG_OF_CONTROL
 #error "Please enable device tree support to use this driver"
@@ -669,13 +669,14 @@ static int process_nodes(const void *blob, int node_list[], int count)
 
 void tegra_mmc_init(void)
 {
-       int node_list[MAX_HOSTS], count;
+       int node_list[CONFIG_SYS_MMC_MAX_DEVICE], count;
        const void *blob = gd->fdt_blob;
        debug("%s entry\n", __func__);
 
        /* See if any Tegra124 MMC controllers are present */
        count = fdtdec_find_aliases_for_id(blob, "sdhci",
-               COMPAT_NVIDIA_TEGRA124_SDMMC, node_list, MAX_HOSTS);
+               COMPAT_NVIDIA_TEGRA124_SDMMC, node_list,
+               CONFIG_SYS_MMC_MAX_DEVICE);
        debug("%s: count of Tegra124 sdhci nodes is %d\n", __func__, count);
        if (process_nodes(blob, node_list, count)) {
                printf("%s: Error processing T30 mmc node(s)!\n", __func__);
@@ -684,7 +685,8 @@ void tegra_mmc_init(void)
 
        /* See if any Tegra30 MMC controllers are present */
        count = fdtdec_find_aliases_for_id(blob, "sdhci",
-               COMPAT_NVIDIA_TEGRA30_SDMMC, node_list, MAX_HOSTS);
+               COMPAT_NVIDIA_TEGRA30_SDMMC, node_list,
+               CONFIG_SYS_MMC_MAX_DEVICE);
        debug("%s: count of T30 sdhci nodes is %d\n", __func__, count);
        if (process_nodes(blob, node_list, count)) {
                printf("%s: Error processing T30 mmc node(s)!\n", __func__);
@@ -693,7 +695,8 @@ void tegra_mmc_init(void)
 
        /* Now look for any Tegra20 MMC controllers */
        count = fdtdec_find_aliases_for_id(blob, "sdhci",
-               COMPAT_NVIDIA_TEGRA20_SDMMC, node_list, MAX_HOSTS);
+               COMPAT_NVIDIA_TEGRA20_SDMMC, node_list,
+               CONFIG_SYS_MMC_MAX_DEVICE);
        debug("%s: count of T20 sdhci nodes is %d\n", __func__, count);
        if (process_nodes(blob, node_list, count)) {
                printf("%s: Error processing T20 mmc node(s)!\n", __func__);
index df9a98bca6e22c2962c14e6ffb2d30f7af77a3d3..9ff089e67c368ce7df1a7e53588decd470daad27 100644 (file)
@@ -21,6 +21,9 @@
 
 #include "tegra30-common.h"
 
+/* VDD core PMIC */
+#define CONFIG_TEGRA_VDD_CORE_TPS62366A_SET1
+
 /* Enable fdt support for Beaver. Flash the image in u-boot-dtb.bin */
 #define CONFIG_DEFAULT_DEVICE_TREE     tegra30-beaver
 #define CONFIG_OF_CONTROL
index e15b52737b24ea4302ab0a1f9ae581a99d38603a..59f429cf5784def97ff4a19428cded9f845ddf7f 100644 (file)
@@ -21,6 +21,9 @@
 
 #include "tegra30-common.h"
 
+/* VDD core PMIC */
+#define CONFIG_TEGRA_VDD_CORE_TPS62361B_SET3
+
 /* Enable fdt support for Cardhu. Flash the image in u-boot-dtb.bin */
 #define CONFIG_DEFAULT_DEVICE_TREE     tegra30-cardhu
 #define CONFIG_OF_CONTROL
index 414db420dc30684ebc8d42614198a951fe195a52..5a9b1b42d31090466008d9a985560a76052a8909 100644 (file)
 
 #define CONFIG_CMD_BOOTZ
 
+#define CONFIG_CMD_GPIO
+
 #endif /* __CONFIG_H */
index 991c43e1cc2c3638816ac15124d684174194bbf8..799d4fe9d8c986406905024d2ba6c47e4412dd57 100644 (file)
 /*
  * I2C Settings
  */
-#define CONFIG_SOFT_I2C_GPIO_SCL s5pc110_gpio_get(j4, 3)
-#define CONFIG_SOFT_I2C_GPIO_SDA s5pc110_gpio_get(j4, 0)
+#define CONFIG_SOFT_I2C_GPIO_SCL S5PC110_GPIO_J43
+#define CONFIG_SOFT_I2C_GPIO_SDA S5PC110_GPIO_J40
 
 #define CONFIG_SYS_I2C
 #define CONFIG_SYS_I2C_SOFT            /* I2C bit-banged */
index 2da887109d985a0d0d91c11c0c05c73ef0f2219c..eb046cdac92aa403197c7808b62bf2d3312a07fd 100644 (file)
                "onenand write 0x41008000 0xc00000 0x500000\0" \
        "bootk=" \
                "run loaduimage; bootm 0x40007FC0\0" \
-       "updatemmc=" \
-               "mmc boot 0 1 1 1; mmc write 0 0x42008000 0 0x200;" \
-               "mmc boot 0 1 1 0\0" \
        "updatebackup=" \
-               "mmc boot 0 1 1 2; mmc write 0 0x42100000 0 0x200;" \
-               "mmc boot 0 1 1 0\0" \
+               "mmc dev 0 2; mmc write 0 0x42100000 0 0x200;" \
+               "mmc dev 0 0\0" \
        "updatebootb=" \
                "mmc read 0 0x42100000 0x80 0x200; run updatebackup\0" \
        "lpj=lpj=3981312\0" \
 /*
  * I2C Settings
  */
-#define CONFIG_SOFT_I2C_GPIO_SCL exynos4_gpio_get(1, b, 7)
-#define CONFIG_SOFT_I2C_GPIO_SDA exynos4_gpio_get(1, b, 6)
+#define CONFIG_SOFT_I2C_GPIO_SCL EXYNOS4_GPIO_B7
+#define CONFIG_SOFT_I2C_GPIO_SDA EXYNOS4_GPIO_B6
 
 #define CONFIG_CMD_I2C
 
  */
 #define CONFIG_SOFT_SPI
 #define CONFIG_SOFT_SPI_MODE SPI_MODE_3
-#define CONFIG_SOFT_SPI_GPIO_SCLK exynos4_gpio_get(2, y3, 1)
-#define CONFIG_SOFT_SPI_GPIO_MOSI exynos4_gpio_get(2, y3, 3)
-#define CONFIG_SOFT_SPI_GPIO_MISO exynos4_gpio_get(2, y3, 0)
-#define CONFIG_SOFT_SPI_GPIO_CS exynos4_gpio_get(2, y4, 3)
+#define CONFIG_SOFT_SPI_GPIO_SCLK EXYNOS4_GPIO_Y31
+#define CONFIG_SOFT_SPI_GPIO_MOSI EXYNOS4_GPIO_Y33
+#define CONFIG_SOFT_SPI_GPIO_MISO EXYNOS4_GPIO_Y30
+#define CONFIG_SOFT_SPI_GPIO_CS EXYNOS4_GPIO_Y43
 
 #define SPI_DELAY udelay(1)
 #undef SPI_INIT
@@ -231,8 +228,8 @@ int universal_spi_read(void);
 #define KEY_PWR_INTERRUPT_REG          MAX8998_REG_IRQ1
 #define KEY_PWR_INTERRUPT_MASK         (1 << 7)
 
-#define KEY_VOL_UP_GPIO                        exynos4_gpio_get(2, x2, 0)
-#define KEY_VOL_DOWN_GPIO              exynos4_gpio_get(2, x2, 1)
+#define KEY_VOL_UP_GPIO                        EXYNOS4_GPIO_X20
+#define KEY_VOL_DOWN_GPIO              EXYNOS4_GPIO_X21
 #endif /* __ASSEMBLY__ */
 
 /* LCD console */
index 183aae726d57970cd7aa76bba03c1ceb7fdfa299..66fa1799e7b53edc8ea7dad78a82710bdcf04c43 100644 (file)
@@ -14,4 +14,8 @@
 #undef CONFIG_DEFAULT_DEVICE_TREE
 #define CONFIG_DEFAULT_DEVICE_TREE     exynos5250-smdk5250
 
+/* Enable FIT support and comparison */
+#define CONFIG_FIT
+#define CONFIG_FIT_BEST_MATCH
+
 #endif /* __CONFIG_SMDK_H */
index b96eea88908cca851cd69a236a3f6115f9b0dd8d..58f706a3a7ffb1161a2089c5b9fb500bcc43c497 100644 (file)
@@ -51,4 +51,8 @@
 
 #define CONFIG_MAX_I2C_NUM     11
 
+/* Enable FIT support and comparison */
+#define CONFIG_FIT
+#define CONFIG_FIT_BEST_MATCH
+
 #endif /* __CONFIG_5420_H */
index 1388f49986067785dc5d8517b5254ef39fab34f5..34adfaf60853d8f93789ba31c06338248a856fa1 100644 (file)
@@ -12,6 +12,7 @@
 /* High Level Configuration Options */
 #define CONFIG_SAMSUNG                 1       /* in a SAMSUNG core */
 #define CONFIG_S5P                     1       /* S5P Family */
+#define CONFIG_EXYNOS4                         /* EXYNOS4 Family */
 #define CONFIG_EXYNOS4210              1       /* which is a EXYNOS4210 SoC */
 #define CONFIG_SMDKV310                        1       /* working with SMDKV310*/
 
index ed5c0b614fa0f589fb3d6fa4240b290bca542a6b..673fa1469b88e2fc468072a5b29bcedb3f74ba55 100644 (file)
@@ -14,4 +14,8 @@
 #undef CONFIG_DEFAULT_DEVICE_TREE
 #define CONFIG_DEFAULT_DEVICE_TREE     exynos5250-snow
 
+/* Enable FIT support and comparison */
+#define CONFIG_FIT
+#define CONFIG_FIT_BEST_MATCH
+
 #endif /* __CONFIG_SNOW_H */
index ae786cfd7a0f17e97f6bb9851fd069c0abd2853c..129acf2cbf81551c35608ffbba17b0f1228e7dbb 100644 (file)
 #define CONFIG_SYS_NS16550_REG_SIZE    (-4)
 #define CONFIG_SYS_NS16550_CLK         V_NS16550_CLK
 
+/*
+ * Common HW configuration.
+ * If this varies between SoCs later, move to tegraNN-common.h
+ * Note: This is number of devices, not max device ID.
+ */
+#define CONFIG_SYS_MMC_MAX_DEVICE 4
+
 /*
  * select serial console configuration
  */
index c4afecf3dab86a5e391059b87eecd11b4000f0cc..90f19626a39e22b5b9f4c42886f7e38a91c4b73c 100644 (file)
@@ -59,7 +59,7 @@
 
 #define CONFIG_BOOTARGS                        "Please use defined boot"
 #define CONFIG_BOOTCOMMAND             "run mmcboot"
-#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC1,115200n8\0"
+#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC2,115200n8\0"
 
 #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_LOAD_ADDR \
                                        - GENERATED_GBL_DATA_SIZE)
                        "bootm 0x40007FC0 - ${fdtaddr};" \
                "fi;" \
                "bootm 0x40007FC0;\0" \
-       "updatemmc=" \
-               "mmc boot 0 1 1 1; mmc write 0 0x42008000 0 0x200;" \
-               "mmc boot 0 1 1 0\0" \
        "updatebackup=" \
-               "mmc boot 0 1 1 2; mmc write 0 0x42100000 0 0x200;" \
-               "mmc boot 0 1 1 0\0" \
+               "mmc dev 0 2; mmc write 0 0x42100000 0 0x200;" \
+               "mmc dev 0 0\0" \
        "updatebootb=" \
                "mmc read 0 0x42100000 0x80 0x200; run updatebackup\0" \
        "lpj=lpj=3981312\0" \
 #define CONFIG_SYS_I2C_INIT_BOARD
 
 /* I2C FG */
-#define CONFIG_SOFT_I2C_GPIO_SCL exynos4_gpio_get(2, y4, 1)
-#define CONFIG_SOFT_I2C_GPIO_SDA exynos4_gpio_get(2, y4, 0)
+#define CONFIG_SOFT_I2C_GPIO_SCL EXYNOS4_GPIO_Y41
+#define CONFIG_SOFT_I2C_GPIO_SDA EXYNOS4_GPIO_Y40
 
 /* POWER */
 #define CONFIG_POWER
 #define KEY_PWR_INTERRUPT_REG          MAX8997_REG_INT1
 #define KEY_PWR_INTERRUPT_MASK         (1 << 0)
 
-#define KEY_VOL_UP_GPIO                        exynos4_gpio_get(2, x2, 0)
-#define KEY_VOL_DOWN_GPIO              exynos4_gpio_get(2, x2, 1)
+#define KEY_VOL_UP_GPIO                        EXYNOS4_GPIO_X20
+#define KEY_VOL_DOWN_GPIO              EXYNOS4_GPIO_X21
 #endif /* __ASSEMBLY__ */
 
 /* LCD console */
index 14def7d16e8f2bbcd79532178f46c41addd5a23b..206975bcae0ec4b88ac543186c1d9d7053394df4 100644 (file)
@@ -52,7 +52,7 @@
 
 #define CONFIG_BOOTARGS                        "Please use defined boot"
 #define CONFIG_BOOTCOMMAND             "run mmcboot"
-#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC1,115200n8\0"
+#define CONFIG_DEFAULT_CONSOLE         "console=ttySAC2,115200n8\0"
 
 #define CONFIG_SYS_INIT_SP_ADDR        (CONFIG_SYS_LOAD_ADDR \
                                        - GENERATED_GBL_DATA_SIZE)
                        "bootm 0x40007FC0 - ${fdtaddr};" \
                "fi;" \
                "bootm 0x40007FC0;\0" \
-       "updatemmc=" \
-               "mmc boot 0 1 1 1; mmc write 0x42008000 0 0x200;" \
-               "mmc boot 0 1 1 0\0" \
        "updatebackup=" \
-               "mmc boot 0 1 1 2; mmc write 0x42100000 0 0x200;" \
-               " mmc boot 0 1 1 0\0" \
+               "mmc dev 0 2; mmc write 0x51000000 0 0x800;" \
+               " mmc dev 0 0\0" \
        "updatebootb=" \
-               "mmc read 0x51000000 0x80 0x200; run updatebackup\0" \
-       "updateuboot=" \
-               "mmc write 0x50000000 0x80 0x400\0" \
+               "mmc read 0x51000000 0x80 0x800; run updatebackup\0" \
        "mmcboot=" \
                "setenv bootargs root=/dev/mmcblk${mmcdev}p${mmcrootpart} " \
                "${lpj} rootwait ${console} ${meminfo} ${opts} ${lcdinfo}; " \
@@ -227,8 +222,8 @@ int get_soft_i2c_sda_pin(void);
 #define KEY_PWR_INTERRUPT_REG          MAX77686_REG_PMIC_INT1
 #define KEY_PWR_INTERRUPT_MASK         (1 << 1)
 
-#define KEY_VOL_UP_GPIO                        exynos4x12_gpio_get(2, x2, 2)
-#define KEY_VOL_DOWN_GPIO              exynos4x12_gpio_get(2, x3, 3)
+#define KEY_VOL_UP_GPIO                        EXYNOS4X12_GPIO_X22
+#define KEY_VOL_DOWN_GPIO              EXYNOS4X12_GPIO_X33
 #endif /* __ASSEMBLY__ */
 
 /* LCD console */
index ede6c1583a93675758d1e2a8c0dff1cc03bc55a2..10653a1b1789ae63fa424ee9335e13ee7e0f166b 100644 (file)
@@ -15,6 +15,8 @@ enum {
        BOOT_MODE_THOR,
        BOOT_MODE_UMS,
        BOOT_MODE_DFU,
+       BOOT_MODE_GPT,
+       BOOT_MODE_ENV,
        BOOT_MODE_EXIT,
 };