From d933cc7dba397c40c20a084d63e211fd85b4cff3 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Fri, 17 May 2013 02:57:17 -0700 Subject: [PATCH] exynos5420: Replace the 5250 GPIO code with code that should work on 5420. BUG=chrome-os-partner:16132 TEST=Built for pit and verified that it was able to get past setting up the pinmux for the serial port which it wasn't before. Used some primitive checks to verify that some of the registers being modified were in the right place. BRANCH=None Change-Id: I2fff71d821a6ed092cd2ecbd197a93e2189e6596 Signed-off-by: Gabe Black Reviewed-on: https://gerrit.chromium.org/gerrit/55567 Commit-Queue: Stefan Reinauer Reviewed-by: Stefan Reinauer Tested-by: Stefan Reinauer --- src/cpu/samsung/exynos5420/cpu.h | 10 +- src/cpu/samsung/exynos5420/gpio.h | 428 +++++++++++++++--------------- 2 files changed, 212 insertions(+), 226 deletions(-) diff --git a/src/cpu/samsung/exynos5420/cpu.h b/src/cpu/samsung/exynos5420/cpu.h index 62ff424611..7cdd35e38f 100644 --- a/src/cpu/samsung/exynos5420/cpu.h +++ b/src/cpu/samsung/exynos5420/cpu.h @@ -55,11 +55,7 @@ #define EXYNOS5_ACE_SFR_BASE 0x10830000 #define EXYNOS5_DMC_PHY0_BASE 0x10C00000 #define EXYNOS5_DMC_PHY1_BASE 0x10C10000 -#define EXYNOS5_GPIO_PART4_BASE 0x10D10000 /* V00..V37 */ -#define EXYNOS5_GPIO_PART5_BASE 0x10D100C0 /* V40..V47 */ #define EXYNOS5_DMC_CTRL_BASE 0x10DD0000 -#define EXYNOS5_GPIO_PART1_BASE 0x11400000 /* A00..Y67 */ -#define EXYNOS5_GPIO_PART2_BASE 0x11400c00 /* X00..X37 */ #define EXYNOS5_USB_HOST_EHCI_BASE 0x12110000 #define EXYNOS5_USBPHY_BASE 0x12130000 #define EXYNOS5_USBOTG_BASE 0x12140000 @@ -76,7 +72,11 @@ #define EXYNOS5_PWMTIMER_BASE 0x12DD0000 #define EXYNOS5_SPI_ISP_BASE 0x131A0000 #define EXYNOS5_I2S_BASE 0x12D60000 -#define EXYNOS5_GPIO_PART3_BASE 0x13400000 /* E00..H17 */ +#define EXYNOS5_GPIO_PART3_BASE 0x13410000 /* C00..Y67 */ +#define EXYNOS5_GPIO_PART1_BASE 0x13400000 /* Y70..Y77 */ +#define EXYNOS5_GPIO_PART2_BASE 0x13400c00 /* X00..X37 */ +#define EXYNOS5_GPIO_PART4_BASE 0x14000000 /* E00..J47 */ +#define EXYNOS5_GPIO_PART5_BASE 0x14010000 /* A00..H07 */ #define EXYNOS5_FIMD_BASE 0x14400000 #define EXYNOS5_DISP1_CTRL_BASE 0x14420000 #define EXYNOS5_MIPI_DSI1_BASE 0x14500000 diff --git a/src/cpu/samsung/exynos5420/gpio.h b/src/cpu/samsung/exynos5420/gpio.h index 0787826f01..0011904eb5 100644 --- a/src/cpu/samsung/exynos5420/gpio.h +++ b/src/cpu/samsung/exynos5420/gpio.h @@ -52,10 +52,12 @@ struct gpio_bank { #define GPIO_DRV_FAST 0x0 #define GPIO_DRV_SLOW 0x1 -#define EXYNOS5_GPIO_BASE0 0x11400000 -#define EXYNOS5_GPIO_BASE1 0x13400000 -#define EXYNOS5_GPIO_BASE2 0x10d10000 -#define EXYNOS5_GPIO_BASE3 0x03860000 +#define EXYNOS5_GPIO_BASE0 0x13400000 +#define EXYNOS5_GPIO_BASE1 0x13400c00 +#define EXYNOS5_GPIO_BASE2 0x13410000 +#define EXYNOS5_GPIO_BASE3 0x14000000 +#define EXYNOS5_GPIO_BASE4 0x14010000 +#define EXYNOS5_GPIO_BASE5 0x03860000 enum exynos5_gpio_port { /* @@ -64,59 +66,59 @@ enum exynos5_gpio_port { */ /* base == EXYNOS_GPIO_BASE0 */ - EXYNOS5_GPA0 = EXYNOS5_GPIO_BASE0 + 0x0000, - EXYNOS5_GPA1 = EXYNOS5_GPIO_BASE0 + 0x0020, - EXYNOS5_GPA2 = EXYNOS5_GPIO_BASE0 + 0x0040, - - EXYNOS5_GPB0 = EXYNOS5_GPIO_BASE0 + 0x0060, - EXYNOS5_GPB1 = EXYNOS5_GPIO_BASE0 + 0x0080, - EXYNOS5_GPB2 = EXYNOS5_GPIO_BASE0 + 0x00a0, - EXYNOS5_GPB3 = EXYNOS5_GPIO_BASE0 + 0x00c0, - - EXYNOS5_GPC0 = EXYNOS5_GPIO_BASE0 + 0x00e0, - EXYNOS5_GPC1 = EXYNOS5_GPIO_BASE0 + 0x0100, - EXYNOS5_GPC2 = EXYNOS5_GPIO_BASE0 + 0x0120, - EXYNOS5_GPC3 = EXYNOS5_GPIO_BASE0 + 0x0140, - - EXYNOS5_GPD0 = EXYNOS5_GPIO_BASE0 + 0x0160, - EXYNOS5_GPD1 = EXYNOS5_GPIO_BASE0 + 0x0180, - - EXYNOS5_GPY0 = EXYNOS5_GPIO_BASE0 + 0x01a0, - EXYNOS5_GPY1 = EXYNOS5_GPIO_BASE0 + 0x01c0, - EXYNOS5_GPY2 = EXYNOS5_GPIO_BASE0 + 0x01e0, - EXYNOS5_GPY3 = EXYNOS5_GPIO_BASE0 + 0x0200, - EXYNOS5_GPY4 = EXYNOS5_GPIO_BASE0 + 0x0220, - EXYNOS5_GPY5 = EXYNOS5_GPIO_BASE0 + 0x0240, - EXYNOS5_GPY6 = EXYNOS5_GPIO_BASE0 + 0x0260, - - EXYNOS5_GPX0 = EXYNOS5_GPIO_BASE0 + 0x0c00, - EXYNOS5_GPX1 = EXYNOS5_GPIO_BASE0 + 0x0c20, - EXYNOS5_GPX2 = EXYNOS5_GPIO_BASE0 + 0x0c40, - EXYNOS5_GPX3 = EXYNOS5_GPIO_BASE0 + 0x0c60, + EXYNOS5_GPY7 = EXYNOS5_GPIO_BASE0 + 0x0000, /* base == EXYNOS_GPIO_BASE1 */ - EXYNOS5_GPE0 = EXYNOS5_GPIO_BASE1 + 0x0000, - EXYNOS5_GPE1 = EXYNOS5_GPIO_BASE1 + 0x0020, - - EXYNOS5_GPF0 = EXYNOS5_GPIO_BASE1 + 0x0040, - EXYNOS5_GPF1 = EXYNOS5_GPIO_BASE1 + 0x0060, - - EXYNOS5_GPG0 = EXYNOS5_GPIO_BASE1 + 0x0080, - EXYNOS5_GPG1 = EXYNOS5_GPIO_BASE1 + 0x00a0, - EXYNOS5_GPG2 = EXYNOS5_GPIO_BASE1 + 0x00c0, - - EXYNOS5_GPH0 = EXYNOS5_GPIO_BASE1 + 0x00e0, - EXYNOS5_GPH1 = EXYNOS5_GPIO_BASE1 + 0x0100, + EXYNOS5_GPX0 = EXYNOS5_GPIO_BASE1 + 0x0000, + EXYNOS5_GPX1 = EXYNOS5_GPIO_BASE1 + 0x0020, + EXYNOS5_GPX2 = EXYNOS5_GPIO_BASE1 + 0x0040, + EXYNOS5_GPX3 = EXYNOS5_GPIO_BASE1 + 0x0060, /* base == EXYNOS_GPIO_BASE2 */ - EXYNOS5_GPV0 = EXYNOS5_GPIO_BASE2 + 0x0000, - EXYNOS5_GPV1 = EXYNOS5_GPIO_BASE2 + 0x0020, - EXYNOS5_GPV2 = EXYNOS5_GPIO_BASE2 + 0x0060, - EXYNOS5_GPV3 = EXYNOS5_GPIO_BASE2 + 0x0080, - EXYNOS5_GPV4 = EXYNOS5_GPIO_BASE2 + 0x00c0, + EXYNOS5_GPC0 = EXYNOS5_GPIO_BASE2 + 0x0000, + EXYNOS5_GPC1 = EXYNOS5_GPIO_BASE2 + 0x0020, + EXYNOS5_GPC2 = EXYNOS5_GPIO_BASE2 + 0x0040, + EXYNOS5_GPC3 = EXYNOS5_GPIO_BASE2 + 0x0060, + EXYNOS5_GPC4 = EXYNOS5_GPIO_BASE2 + 0x0080, - /* base == EXYNOS_GPIO_BASE3 */ - EXYNOS5_GPZ = EXYNOS5_GPIO_BASE3 + 0x0000, + EXYNOS5_GPD1 = EXYNOS5_GPIO_BASE2 + 0x00a0, + + EXYNOS5_GPY0 = EXYNOS5_GPIO_BASE2 + 0x00c0, + EXYNOS5_GPY1 = EXYNOS5_GPIO_BASE2 + 0x00e0, + EXYNOS5_GPY2 = EXYNOS5_GPIO_BASE2 + 0x0100, + EXYNOS5_GPY3 = EXYNOS5_GPIO_BASE2 + 0x0120, + EXYNOS5_GPY4 = EXYNOS5_GPIO_BASE2 + 0x0140, + EXYNOS5_GPY5 = EXYNOS5_GPIO_BASE2 + 0x0160, + EXYNOS5_GPY6 = EXYNOS5_GPIO_BASE2 + 0x0180, + + /* base == EXYNOS5_GPIO_BASE3 */ + EXYNOS5_GPE0 = EXYNOS5_GPIO_BASE3 + 0x0000, + EXYNOS5_GPE1 = EXYNOS5_GPIO_BASE3 + 0x0020, + + EXYNOS5_GPF0 = EXYNOS5_GPIO_BASE3 + 0x0040, + EXYNOS5_GPF1 = EXYNOS5_GPIO_BASE3 + 0x0060, + + EXYNOS5_GPG0 = EXYNOS5_GPIO_BASE3 + 0x0080, + EXYNOS5_GPG1 = EXYNOS5_GPIO_BASE3 + 0x00a0, + EXYNOS5_GPG2 = EXYNOS5_GPIO_BASE3 + 0x00c0, + + EXYNOS5_GPJ4 = EXYNOS5_GPIO_BASE3 + 0x00e0, + + /* base == EXYNOS5_GPIO_BASE4 */ + EXYNOS5_GPA0 = EXYNOS5_GPIO_BASE4 + 0x0000, + EXYNOS5_GPA1 = EXYNOS5_GPIO_BASE4 + 0x0020, + EXYNOS5_GPA2 = EXYNOS5_GPIO_BASE4 + 0x0040, + + EXYNOS5_GPB0 = EXYNOS5_GPIO_BASE4 + 0x0060, + EXYNOS5_GPB1 = EXYNOS5_GPIO_BASE4 + 0x0080, + EXYNOS5_GPB2 = EXYNOS5_GPIO_BASE4 + 0x00a0, + EXYNOS5_GPB3 = EXYNOS5_GPIO_BASE4 + 0x00c0, + EXYNOS5_GPB4 = EXYNOS5_GPIO_BASE4 + 0x00e0, + + EXYNOS5_GPH0 = EXYNOS5_GPIO_BASE4 + 0x0100, + + /* base == EXYNOS5_GPIO_BASE5 */ + EXYNOS5_GPZ0 = EXYNOS5_GPIO_BASE5 + 0x0000, }; enum { @@ -127,63 +129,53 @@ enum { /* A list of valid GPIO numbers for the asm-generic/gpio.h interface */ enum exynos5_gpio_pin { /* GPIO_PART1_STARTS */ - GPIO_A00, - GPIO_A01, - GPIO_A02, - GPIO_A03, - GPIO_A04, - GPIO_A05, - GPIO_A06, - GPIO_A07, - GPIO_A10, - GPIO_A11, - GPIO_A12, - GPIO_A13, - GPIO_A14, - GPIO_A15, - GPIO_A16, - GPIO_A17, - GPIO_A20, - GPIO_A21, - GPIO_A22, - GPIO_A23, - GPIO_A24, - GPIO_A25, - GPIO_A26, - GPIO_A27, - GPIO_B00, /* 0x18 */ - GPIO_B01, - GPIO_B02, - GPIO_B03, - GPIO_B04, - GPIO_B05, - GPIO_B06, - GPIO_B07, - GPIO_B10, - GPIO_B11, - GPIO_B12, - GPIO_B13, - GPIO_B14, - GPIO_B15, - GPIO_B16, - GPIO_B17, - GPIO_B20, - GPIO_B21, - GPIO_B22, - GPIO_B23, - GPIO_B24, - GPIO_B25, - GPIO_B26, - GPIO_B27, - GPIO_B30, - GPIO_B31, - GPIO_B32, - GPIO_B33, - GPIO_B34, - GPIO_B35, - GPIO_B36, - GPIO_B37, - GPIO_C00, /* 0x38 */ + GPIO_Y70, + GPIO_Y71, + GPIO_Y72, + GPIO_Y73, + GPIO_Y74, + GPIO_Y75, + GPIO_Y76, + GPIO_Y77, + + /* GPIO_PART2_STARTS */ + GPIO_MAX_PORT_PART_1, + GPIO_X00 = GPIO_MAX_PORT_PART_1, /* 0x08 */ + GPIO_X01, + GPIO_X02, + GPIO_X03, + GPIO_X04, + GPIO_X05, + GPIO_X06, + GPIO_X07, + GPIO_X10, + GPIO_X11, + GPIO_X12, + GPIO_X13, + GPIO_X14, + GPIO_X15, + GPIO_X16, + GPIO_X17, + GPIO_X20, + GPIO_X21, + GPIO_X22, + GPIO_X23, + GPIO_X24, + GPIO_X25, + GPIO_X26, + GPIO_X27, + GPIO_X30, + GPIO_X31, + GPIO_X32, + GPIO_X33, + GPIO_X34, + GPIO_X35, + GPIO_X36, + GPIO_X37, + + /* GPIO_PART3_STARTS */ + GPIO_MAX_PORT_PART_2, + GPIO_C00 = GPIO_MAX_PORT_PART_2, /* 0x28 */ GPIO_C01, GPIO_C02, GPIO_C03, @@ -215,15 +207,16 @@ enum exynos5_gpio_pin { GPIO_C35, GPIO_C36, GPIO_C37, - GPIO_D00, /* 0x58 */ - GPIO_D01, - GPIO_D02, - GPIO_D03, - GPIO_D04, - GPIO_D05, - GPIO_D06, - GPIO_D07, - GPIO_D10, + GPIO_C40, + GPIO_C41, + GPIO_C42, + GPIO_C43, + GPIO_C44, + GPIO_C45, + GPIO_C46, + GPIO_C47, + + GPIO_D10, /* 0x50 */ GPIO_D11, GPIO_D12, GPIO_D13, @@ -231,7 +224,8 @@ enum exynos5_gpio_pin { GPIO_D15, GPIO_D16, GPIO_D17, - GPIO_Y00, /* 0x68 */ + + GPIO_Y00, /* 0x58 */ GPIO_Y01, GPIO_Y02, GPIO_Y03, @@ -288,44 +282,9 @@ enum exynos5_gpio_pin { GPIO_Y66, GPIO_Y67, - /* GPIO_PART2_STARTS */ - GPIO_MAX_PORT_PART_1, - GPIO_X00 = GPIO_MAX_PORT_PART_1, /* 0xa0 */ - GPIO_X01, - GPIO_X02, - GPIO_X03, - GPIO_X04, - GPIO_X05, - GPIO_X06, - GPIO_X07, - GPIO_X10, - GPIO_X11, - GPIO_X12, - GPIO_X13, - GPIO_X14, - GPIO_X15, - GPIO_X16, - GPIO_X17, - GPIO_X20, - GPIO_X21, - GPIO_X22, - GPIO_X23, - GPIO_X24, - GPIO_X25, - GPIO_X26, - GPIO_X27, - GPIO_X30, - GPIO_X31, - GPIO_X32, - GPIO_X33, - GPIO_X34, - GPIO_X35, - GPIO_X36, - GPIO_X37, - - /* GPIO_PART3_STARTS */ - GPIO_MAX_PORT_PART_2, - GPIO_E00 = GPIO_MAX_PORT_PART_2, /* 0xc0 */ + /* GPIO_PART4_STARTS */ + GPIO_MAX_PORT_PART_3, + GPIO_E00 = GPIO_MAX_PORT_PART_3, /* 0x90 */ GPIO_E01, GPIO_E02, GPIO_E03, @@ -341,7 +300,8 @@ enum exynos5_gpio_pin { GPIO_E15, GPIO_E16, GPIO_E17, - GPIO_F00, /* 0xd0 */ + + GPIO_F00, /* 0xa0 */ GPIO_F01, GPIO_F02, GPIO_F03, @@ -357,7 +317,8 @@ enum exynos5_gpio_pin { GPIO_F15, GPIO_F16, GPIO_F17, - GPIO_G00, + + GPIO_G00, /* 0xb0 */ GPIO_G01, GPIO_G02, GPIO_G03, @@ -381,7 +342,85 @@ enum exynos5_gpio_pin { GPIO_G25, GPIO_G26, GPIO_G27, - GPIO_H00, + + GPIO_J40, /* 0xc8 */ + GPIO_J41, + GPIO_J42, + GPIO_J43, + GPIO_J44, + GPIO_J45, + GPIO_J46, + GPIO_J47, + + /* GPIO_PART5_STARTS */ + GPIO_MAX_PORT_PART_4, + GPIO_A00 = GPIO_MAX_PORT_PART_4, /* 0xd0 */ + GPIO_A01, + GPIO_A02, + GPIO_A03, + GPIO_A04, + GPIO_A05, + GPIO_A06, + GPIO_A07, + GPIO_A10, + GPIO_A11, + GPIO_A12, + GPIO_A13, + GPIO_A14, + GPIO_A15, + GPIO_A16, + GPIO_A17, + GPIO_A20, + GPIO_A21, + GPIO_A22, + GPIO_A23, + GPIO_A24, + GPIO_A25, + GPIO_A26, + GPIO_A27, + + GPIO_B00, /* 0xe8 */ + GPIO_B01, + GPIO_B02, + GPIO_B03, + GPIO_B04, + GPIO_B05, + GPIO_B06, + GPIO_B07, + GPIO_B10, + GPIO_B11, + GPIO_B12, + GPIO_B13, + GPIO_B14, + GPIO_B15, + GPIO_B16, + GPIO_B17, + GPIO_B20, + GPIO_B21, + GPIO_B22, + GPIO_B23, + GPIO_B24, + GPIO_B25, + GPIO_B26, + GPIO_B27, + GPIO_B30, + GPIO_B31, + GPIO_B32, + GPIO_B33, + GPIO_B34, + GPIO_B35, + GPIO_B36, + GPIO_B37, + GPIO_B40, + GPIO_B41, + GPIO_B42, + GPIO_B43, + GPIO_B44, + GPIO_B45, + GPIO_B46, + GPIO_B47, + + GPIO_H00, /* 0x110 */ GPIO_H01, GPIO_H02, GPIO_H03, @@ -389,70 +428,17 @@ enum exynos5_gpio_pin { GPIO_H05, GPIO_H06, GPIO_H07, - GPIO_H10, - GPIO_H11, - GPIO_H12, - GPIO_H13, - GPIO_H14, - GPIO_H15, - GPIO_H16, - GPIO_H17, - - /* GPIO_PART4_STARTS */ - GPIO_MAX_PORT_PART_3, - GPIO_V00 = GPIO_MAX_PORT_PART_3, - GPIO_V01, - GPIO_V02, - GPIO_V03, - GPIO_V04, - GPIO_V05, - GPIO_V06, - GPIO_V07, - GPIO_V10, - GPIO_V11, - GPIO_V12, - GPIO_V13, - GPIO_V14, - GPIO_V15, - GPIO_V16, - GPIO_V17, - GPIO_V20, - GPIO_V21, - GPIO_V22, - GPIO_V23, - GPIO_V24, - GPIO_V25, - GPIO_V26, - GPIO_V27, - GPIO_V30, - GPIO_V31, - GPIO_V32, - GPIO_V33, - GPIO_V34, - GPIO_V35, - GPIO_V36, - GPIO_V37, - - /* GPIO_PART5_STARTS */ - GPIO_MAX_PORT_PART_4, - GPIO_V40 = GPIO_MAX_PORT_PART_4, - GPIO_V41, - GPIO_V42, - GPIO_V43, - GPIO_V44, - GPIO_V45, - GPIO_V46, - GPIO_V47, /* GPIO_PART6_STARTS */ GPIO_MAX_PORT_PART_5, - GPIO_Z0 = GPIO_MAX_PORT_PART_5, - GPIO_Z1, - GPIO_Z2, - GPIO_Z3, - GPIO_Z4, - GPIO_Z5, - GPIO_Z6, + GPIO_Z00 = GPIO_MAX_PORT_PART_5, /* 0x118 */ + GPIO_Z01, + GPIO_Z02, + GPIO_Z03, + GPIO_Z04, + GPIO_Z05, + GPIO_Z06, + GPIO_Z07, GPIO_MAX_PORT };