diff options
Diffstat (limited to 'packages/u-boot/u-boot-1.3.2/boc01/002-081212-GPIO.patch')
-rw-r--r-- | packages/u-boot/u-boot-1.3.2/boc01/002-081212-GPIO.patch | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/packages/u-boot/u-boot-1.3.2/boc01/002-081212-GPIO.patch b/packages/u-boot/u-boot-1.3.2/boc01/002-081212-GPIO.patch new file mode 100644 index 0000000000..0fb3daf98e --- /dev/null +++ b/packages/u-boot/u-boot-1.3.2/boc01/002-081212-GPIO.patch @@ -0,0 +1,252 @@ +Index: u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c +=================================================================== +--- u-boot-1.3.2.orig/board/freescale/mpc8313erdb/mpc8313erdb.c ++++ u-boot-1.3.2/board/freescale/mpc8313erdb/mpc8313erdb.c +@@ -29,6 +29,7 @@ + #include <pci.h> + #include <mpc83xx.h> + #include <spi.h> ++#include <gpio.h> + + DECLARE_GLOBAL_DATA_PTR; + +@@ -44,6 +45,48 @@ int board_early_init_f(void) + return 0; + } + ++int misc_init_f(void) ++{ ++ uchar value; ++ uchar i; ++ ++#ifdef PRE_INIT_GPIO ++ value=PRE_INIT_GPIO; ++ ++ for(i=0;i<MAX_GPIO_OUT;i++) ++ { ++ if(value&(1<<i)) ++ { ++ gpio_set(i); ++ } ++ else ++ { ++ gpio_clear(i); ++ } ++ } ++ udelay(1000); ++#endif ++ ++ ++#ifdef INIT_GPIO ++ value=INIT_GPIO; ++ for(i=0;i<MAX_GPIO_OUT;i++) ++ { ++ if(value&(1<<i)) ++ { ++ gpio_set(i); ++ } ++ else ++ { ++ gpio_clear(i); ++ } ++ } ++ puts("GPIO: ready\n"); ++#endif ++ ++ return 0; ++} ++ + int checkboard(void) + { + puts("Board: Freescale MPC8313ERDB\n"); +@@ -109,7 +152,42 @@ void ft_board_setup(void *blob, bd_t *bd + } + #endif + ++#ifdef CONFIG_CMD_GPIO ++void gpio_set(unsigned char ucGpio) ++{ ++ unsigned long ulMask=0; ++ volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0]; ++ if(ucGpio<32) ++ { ++ ulMask=1<<(31-ucGpio); ++ iopd->dir |= ulMask; ++ iopd->dat |= ulMask; ++ } ++} ++ ++void gpio_clear(unsigned char ucGpio) ++{ ++ unsigned long ulMask=0; ++ volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0]; ++ if(ucGpio<32) ++ { ++ ulMask=1<<(31-ucGpio); ++ iopd->dir |= ulMask; ++ iopd->dat &= ~ulMask; ++ } ++} + ++char gpio_get(unsigned char ucGpio) ++{ ++ unsigned long ulMask=0; ++ volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0]; ++ if(ucGpio<32) ++ { ++ ulMask=1<<(31-ucGpio); ++ } ++ return (iopd->dat& ulMask)? 1:0; ++} ++#endif + /* + * The following are used to control the SPI chip selects for the SPI command. + */ +Index: u-boot-1.3.2/common/cmd_gpio.c +=================================================================== +--- /dev/null ++++ u-boot-1.3.2/common/cmd_gpio.c +@@ -0,0 +1,76 @@ ++/* ++ * (C) Copyright 2001 ++ * Alexandre Coffignal, CenoSYS, alexandre.coffignal@cenosys.com ++ * ++ * See file CREDITS for list of people who contributed to this ++ * project. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License as ++ * published by the Free Software Foundation; either version 2 of ++ * the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, ++ * MA 02111-1307 USA ++ */ ++ ++ ++#include <common.h> ++#include <config.h> ++#include <command.h> ++#include <gpio.h> ++ ++ ++int do_gpio (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) ++{ ++ unsigned char ucGpio; ++ ++ if (argc < 3) ++ goto usage; ++ ++ ucGpio = simple_strtoul (argv[2], NULL, 10); ++ ++ if (!strncmp(argv[1], "set", 3)) ++ { ++ gpio_set(ucGpio); ++ } ++ else ++ if (!strncmp(argv[1], "clear", 5)) ++ { ++ gpio_clear(ucGpio); ++ } ++ else ++ if (!strncmp(argv[1], "get", 3)) ++ { ++ printf("%s %s %d = %d\n",argv[0],argv[1],ucGpio, gpio_get(ucGpio)); ++ return 0; ++ } ++ else ++ goto usage; ++ ++ printf("%s %s %d\n",argv[0],argv[1],ucGpio); ++ ++ return 0; ++ ++usage : ++ printf ("Usage:\n%s\n", cmdtp->usage); ++ return 1; ++} /* do_gpio() */ ++ ++/***************************************************/ ++ ++U_BOOT_CMD( ++ gpio, 3, 1, do_gpio, ++ "gpio - General Purpose Input/Output\n", ++ " - Set or clear General Purpose Output.\n" ++ "<set/clear/get> - Set or clear General Purpose Output.\n" ++ "<gpio> - number of gpio to be set/clear/get \n" ++); ++ +Index: u-boot-1.3.2/common/Makefile +=================================================================== +--- u-boot-1.3.2.orig/common/Makefile ++++ u-boot-1.3.2/common/Makefile +@@ -50,6 +50,7 @@ endif + COBJS-$(CONFIG_CMD_DISPLAY) += cmd_display.o + COBJS-$(CONFIG_CMD_DOC) += cmd_doc.o + COBJS-$(CONFIG_CMD_DTT) += cmd_dtt.o ++COBJS-$(CONFIG_CMD_GPIO) += cmd_gpio.o + COBJS-y += cmd_eeprom.o + COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o + COBJS-$(CONFIG_CMD_EXT2) += cmd_ext2.o +Index: u-boot-1.3.2/include/configs/MPC8313ERDB.h +=================================================================== +--- u-boot-1.3.2.orig/include/configs/MPC8313ERDB.h ++++ u-boot-1.3.2/include/configs/MPC8313ERDB.h +@@ -49,6 +49,7 @@ + #define CONFIG_SYS_CLK_FREQ CONFIG_83XX_CLKIN + + #define CONFIG_BOARD_EARLY_INIT_F /* call board_pre_init */ ++#define CONFIG_MISC_INIT_F + + #define CFG_IMMR 0xE0000000 + +@@ -370,6 +371,7 @@ + #define CONFIG_CMD_NAND + #define CONFIG_CMD_JFFS2 + #define CONFIG_CMD_SPI ++#define CONFIG_CMD_GPIO + + #if defined(CFG_RAMBOOT) + #undef CONFIG_CMD_ENV +@@ -392,6 +394,11 @@ + #define CONFIG_HARD_SPI /* SPI with hardware support */ + #undef CONFIG_SOFT_SPI /* SPI bit-banged */ + ++/* GPIO */ ++#define PRE_INIT_GPIO 0x28 ++#define INIT_GPIO 0x08 ++#define MAX_GPIO_OUT 7 ++ + /* + * Miscellaneous configurable options + */ +@@ -457,7 +464,7 @@ + + /* System IO Config */ + #define CFG_SICRH (SICRH_TSOBI1 | SICRH_TSOBI2) /* RGMII */ +-#define CFG_SICRL SICRL_USBDR /* Enable Internal USB Phy */ ++#define CFG_SICRL (SICRL_USBDR |SICRL_LBC) /* Enable Internal USB Phy */ + + #define CFG_HID0_INIT 0x000000000 + #define CFG_HID0_FINAL (HID0_ENABLE_MACHINE_CHECK | \ +Index: u-boot-1.3.2/include/gpio.h +=================================================================== +--- /dev/null ++++ u-boot-1.3.2/include/gpio.h +@@ -0,0 +1,9 @@ ++#ifndef __GPIO_H__ ++#define __GPIO_H__ ++ ++extern void gpio_set(unsigned char ucGpio); ++extern void gpio_clear(unsigned char ucGpio); ++extern char gpio_get(unsigned char ucGpio); ++ ++#endif /* __GPIO_H__ */ ++ |