mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	Blackfin: unify custom gpio commands
Now that we have a unified gpio layer, the misc partial gpio commands can be unified and made complete (support all possible gpios). Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
		| @@ -18,6 +18,7 @@ CEXTRA   := initcode.o | |||||||
| SEXTRA   := start.o | SEXTRA   := start.o | ||||||
| SOBJS    := interrupt.o cache.o | SOBJS    := interrupt.o cache.o | ||||||
| COBJS-$(CONFIG_BOOTCOUNT_LIMIT) += bootcount.o | COBJS-$(CONFIG_BOOTCOUNT_LIMIT) += bootcount.o | ||||||
|  | COBJS-$(CONFIG_CMD_GPIO) += cmd_gpio.o | ||||||
| COBJS-y  += cpu.o | COBJS-y  += cpu.o | ||||||
| COBJS-y  += gpio.o | COBJS-y  += gpio.o | ||||||
| COBJS-y  += interrupts.o | COBJS-y  += interrupts.o | ||||||
|   | |||||||
							
								
								
									
										120
									
								
								arch/blackfin/cpu/cmd_gpio.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								arch/blackfin/cpu/cmd_gpio.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | |||||||
|  | /* | ||||||
|  |  * Control GPIO pins on the fly | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2008-2010 Analog Devices Inc. | ||||||
|  |  * | ||||||
|  |  * Licensed under the GPL-2 or later. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <common.h> | ||||||
|  | #include <command.h> | ||||||
|  |  | ||||||
|  | #include <asm/blackfin.h> | ||||||
|  | #include <asm/gpio.h> | ||||||
|  |  | ||||||
|  | enum { | ||||||
|  | 	GPIO_INPUT, | ||||||
|  | 	GPIO_SET, | ||||||
|  | 	GPIO_CLEAR, | ||||||
|  | 	GPIO_TOGGLE, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | ||||||
|  | { | ||||||
|  | 	if (argc == 2 && !strcmp(argv[1], "status")) { | ||||||
|  | 		bfin_gpio_labels(); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (argc != 3) { | ||||||
|  |  show_usage: | ||||||
|  | 		printf("Usage:\n%s\n", cmdtp->usage); | ||||||
|  | 		return 1; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/* parse the behavior */ | ||||||
|  | 	ulong sub_cmd; | ||||||
|  | 	switch (argv[1][0]) { | ||||||
|  | 		case 'i': sub_cmd = GPIO_INPUT;  break; | ||||||
|  | 		case 's': sub_cmd = GPIO_SET;    break; | ||||||
|  | 		case 'c': sub_cmd = GPIO_CLEAR;  break; | ||||||
|  | 		case 't': sub_cmd = GPIO_TOGGLE; break; | ||||||
|  | 		default:  goto show_usage; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/* parse the pin with format: [p][port]<#> */ | ||||||
|  | 	const char *str_pin = argv[2]; | ||||||
|  |  | ||||||
|  | 	/* grab the [p]<port> portion */ | ||||||
|  | 	ulong port_base; | ||||||
|  | 	if (*str_pin == 'p') ++str_pin; | ||||||
|  | 	switch (*str_pin) { | ||||||
|  | #ifdef GPIO_PA0 | ||||||
|  | 		case 'a': port_base = GPIO_PA0; break; | ||||||
|  | #endif | ||||||
|  | #ifdef GPIO_PB0 | ||||||
|  | 		case 'b': port_base = GPIO_PB0; break; | ||||||
|  | #endif | ||||||
|  | #ifdef GPIO_PC0 | ||||||
|  | 		case 'c': port_base = GPIO_PC0; break; | ||||||
|  | #endif | ||||||
|  | #ifdef GPIO_PD0 | ||||||
|  | 		case 'd': port_base = GPIO_PD0; break; | ||||||
|  | #endif | ||||||
|  | #ifdef GPIO_PE0 | ||||||
|  | 		case 'e': port_base = GPIO_PE0; break; | ||||||
|  | #endif | ||||||
|  | #ifdef GPIO_PF0 | ||||||
|  | 		case 'f': port_base = GPIO_PF0; break; | ||||||
|  | #endif | ||||||
|  | #ifdef GPIO_PG0 | ||||||
|  | 		case 'g': port_base = GPIO_PG0; break; | ||||||
|  | #endif | ||||||
|  | #ifdef GPIO_PH0 | ||||||
|  | 		case 'h': port_base = GPIO_PH0; break; | ||||||
|  | #endif | ||||||
|  | #ifdef GPIO_PI0 | ||||||
|  | 		case 'i': port_base = GPIO_PI0; break; | ||||||
|  | #endif | ||||||
|  | #ifdef GPIO_PJ | ||||||
|  | 		case 'j': port_base = GPIO_PJ0; break; | ||||||
|  | #endif | ||||||
|  | 		default:  goto show_usage; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/* grab the <#> portion */ | ||||||
|  | 	ulong pin = simple_strtoul(str_pin + 1, NULL, 10); | ||||||
|  | 	if (pin > 15) | ||||||
|  | 		goto show_usage; | ||||||
|  |  | ||||||
|  | 	/* grab the pin before we tweak it */ | ||||||
|  | 	ulong gpio = port_base + pin; | ||||||
|  | 	gpio_request(gpio, "cmd_gpio"); | ||||||
|  |  | ||||||
|  | 	/* finally, let's do it: set direction and exec command */ | ||||||
|  | 	if (sub_cmd == GPIO_INPUT) { | ||||||
|  | 		gpio_direction_input(gpio); | ||||||
|  | 		printf("gpio: pin %lu on port %c set to input\n", pin, *str_pin); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	ulong value; | ||||||
|  | 	switch (sub_cmd) { | ||||||
|  | 		case GPIO_SET:    value = 1; break; | ||||||
|  | 		case GPIO_CLEAR:  value = 0; break; | ||||||
|  | 		case GPIO_TOGGLE: value = !gpio_get_value(gpio); break; | ||||||
|  | 		default:          goto show_usage; | ||||||
|  | 	} | ||||||
|  | 	gpio_direction_output(gpio, value); | ||||||
|  | 	printf("gpio: pin %lu on port %c (gpio %lu) value is %lu\n", | ||||||
|  | 		pin, *str_pin, gpio, value); | ||||||
|  |  | ||||||
|  | 	gpio_free(gpio); | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | U_BOOT_CMD(gpio, 3, 0, do_gpio, | ||||||
|  | 	"set/clear/toggle gpio output pins", | ||||||
|  | 	"<set|clear|toggle> <port><pin>\n" | ||||||
|  | 	"    - set/clear/toggle the specified pin (e.g. PF10)"); | ||||||
| @@ -29,7 +29,7 @@ include $(TOPDIR)/config.mk | |||||||
|  |  | ||||||
| LIB	= $(obj)lib$(BOARD).a | LIB	= $(obj)lib$(BOARD).a | ||||||
|  |  | ||||||
| COBJS-y	:= $(BOARD).o cmd_bf537led.o | COBJS-y	:= $(BOARD).o | ||||||
| COBJS-$(CONFIG_BFIN_IDE)   += ide-cf.o | COBJS-$(CONFIG_BFIN_IDE)   += ide-cf.o | ||||||
| COBJS-$(CONFIG_POST)       += post.o post-memory.o | COBJS-$(CONFIG_POST)       += post.o post-memory.o | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,201 +0,0 @@ | |||||||
| /* |  | ||||||
|  * U-boot - cmd_bf537led.c |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2006 Aaron Gage, Ocean Optics Inc. |  | ||||||
|  * |  | ||||||
|  * 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 <asm/blackfin.h> |  | ||||||
| #include <asm/string.h> |  | ||||||
| #ifdef CONFIG_BF537_STAMP_LEDCMD |  | ||||||
|  |  | ||||||
| /* Define the command usage in a reusable way */ |  | ||||||
| #define USAGE_LONG \ |  | ||||||
| 	"led <number> <action>\n" \ |  | ||||||
| 	"    <number>  - Index (0-5) of LED to change, or \"all\"\n" \ |  | ||||||
| 	"    <action>  - Must be one of:\n" \ |  | ||||||
| 	"		on off toggle" |  | ||||||
|  |  | ||||||
| /* Number of LEDs supported by the board */ |  | ||||||
| #define NUMBER_LEDS     6 |  | ||||||
| /* The BF537 stamp has 6 LEDs.  This mask indicates that all should be lit. */ |  | ||||||
| #define LED_ALL_MASK    0x003F |  | ||||||
|  |  | ||||||
| void show_cmd_usage(void); |  | ||||||
| void set_led_state(int index, int state); |  | ||||||
| void configure_GPIO_to_output(int index); |  | ||||||
|  |  | ||||||
| /* Map of LEDs according to their GPIO ports.  This can be rearranged or |  | ||||||
|  * otherwise changed to account for different GPIO configurations. |  | ||||||
|  */ |  | ||||||
| int led_ports[] = { PF6, PF7, PF8, PF9, PF10, PF11 }; |  | ||||||
|  |  | ||||||
| #define ACTION_TOGGLE   -1 |  | ||||||
| #define ACTION_OFF      0 |  | ||||||
| #define ACTION_ON       1 |  | ||||||
|  |  | ||||||
| #define LED_STATE_OFF   0 |  | ||||||
| #define LED_STATE_ON    1 |  | ||||||
|  |  | ||||||
| /* This is a trivial atoi implementation since we don't have one available */ |  | ||||||
| int atoi(char *string) |  | ||||||
| { |  | ||||||
| 	int length; |  | ||||||
| 	int retval = 0; |  | ||||||
| 	int i; |  | ||||||
| 	int sign = 1; |  | ||||||
|  |  | ||||||
| 	length = strlen(string); |  | ||||||
| 	for (i = 0; i < length; i++) { |  | ||||||
| 		if (0 == i && string[0] == '-') { |  | ||||||
| 			sign = -1; |  | ||||||
| 			continue; |  | ||||||
| 		} |  | ||||||
| 		if (string[i] > '9' || string[i] < '0') { |  | ||||||
| 			break; |  | ||||||
| 		} |  | ||||||
| 		retval *= 10; |  | ||||||
| 		retval += string[i] - '0'; |  | ||||||
| 	} |  | ||||||
| 	retval *= sign; |  | ||||||
| 	return retval; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| int do_bf537led(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) |  | ||||||
| { |  | ||||||
| 	int led_mask = 0; |  | ||||||
| 	int led_current_state = 0; |  | ||||||
| 	int action = ACTION_OFF; |  | ||||||
| 	int temp; |  | ||||||
|  |  | ||||||
| 	if (3 != argc) { |  | ||||||
| 		/* Not enough arguments, so just show usage information */ |  | ||||||
| 		show_cmd_usage(); |  | ||||||
| 		return 1; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (strcmp(argv[1], "all") == 0) { |  | ||||||
| 		led_mask = LED_ALL_MASK; |  | ||||||
| 	} else { |  | ||||||
| 		temp = atoi(argv[1]); |  | ||||||
| 		if (temp < 0 || temp >= NUMBER_LEDS) { |  | ||||||
| 			printf("Invalid LED number [%s]\n", argv[1]); |  | ||||||
| 			show_cmd_usage(); |  | ||||||
| 			return 2; |  | ||||||
| 		} |  | ||||||
| 		led_mask |= (1 << temp); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (strcmp(argv[2], "off") == 0) { |  | ||||||
| 		action = ACTION_OFF; |  | ||||||
| 	} else if (strcmp(argv[2], "on") == 0) { |  | ||||||
| 		action = ACTION_ON; |  | ||||||
| 	} else if (strcmp(argv[2], "toggle") == 0) { |  | ||||||
| 		action = ACTION_TOGGLE; |  | ||||||
| 	} else { |  | ||||||
| 		printf("Invalid action [%s]\n", argv[2]); |  | ||||||
| 		show_cmd_usage(); |  | ||||||
| 		return 3; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	for (temp = 0; temp < NUMBER_LEDS; temp++) { |  | ||||||
| 		if ((led_mask & (1 << temp)) > 0) { |  | ||||||
| 			/* |  | ||||||
| 			 * It is possible that the user has wired one of PF6-PF11 to |  | ||||||
| 			 * something other than an LED, so this will only change a pin |  | ||||||
| 			 * to output if the user has indicated a state change.  This may |  | ||||||
| 			 * happen a lot, but this way is safer than just setting all pins |  | ||||||
| 			 * to output. |  | ||||||
| 			 */ |  | ||||||
| 			configure_GPIO_to_output(temp); |  | ||||||
|  |  | ||||||
| 			led_current_state = |  | ||||||
| 			    ((*pPORTFIO & led_ports[temp]) > |  | ||||||
| 			     0) ? LED_STATE_ON : LED_STATE_OFF; |  | ||||||
| 	/* |  | ||||||
| 		printf("LED state for index %d (%x) is %d\n", temp, led_ports[temp], |  | ||||||
| 			led_current_state); |  | ||||||
| 		printf("*pPORTFIO is %x\n", *pPORTFIO); |  | ||||||
| 	*/ |  | ||||||
| 			if (ACTION_ON == action |  | ||||||
| 			    || (ACTION_TOGGLE == action |  | ||||||
| 				&& 0 == led_current_state)) { |  | ||||||
| 				printf("Turning LED %d on\n", temp); |  | ||||||
| 				set_led_state(temp, LED_STATE_ON); |  | ||||||
| 			} else { |  | ||||||
| 				printf("Turning LED %d off\n", temp); |  | ||||||
| 				set_led_state(temp, LED_STATE_OFF); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * The GPIO pins that go to the LEDs on the BF537 stamp must be configured |  | ||||||
|  * as output.  This function simply configures them that way.  This could |  | ||||||
|  * be done to all of the GPIO lines at once, but if a user is using a |  | ||||||
|  * custom board, this will try to be nice and only change the GPIO lines |  | ||||||
|  * that the user specifically names. |  | ||||||
|  */ |  | ||||||
| void configure_GPIO_to_output(int index) |  | ||||||
| { |  | ||||||
| 	int port; |  | ||||||
|  |  | ||||||
| 	port = led_ports[index]; |  | ||||||
|  |  | ||||||
| 	/* Clear the Port F Function Enable Register */ |  | ||||||
| 	*pPORTF_FER &= ~port; |  | ||||||
| 	/* Set the Port F I/O direction register */ |  | ||||||
| 	*pPORTFIO_DIR |= port; |  | ||||||
| 	/* Clear the Port F I/O Input Enable Register */ |  | ||||||
| 	*pPORTFIO_INEN &= ~port; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* Enforce the given state on the GPIO line for the indicated LED */ |  | ||||||
| void set_led_state(int index, int state) |  | ||||||
| { |  | ||||||
| 	int port; |  | ||||||
|  |  | ||||||
| 	port = led_ports[index]; |  | ||||||
|  |  | ||||||
| 	if (LED_STATE_OFF == state) { |  | ||||||
| 		/* Clear the bit to turn off the LED */ |  | ||||||
| 		*pPORTFIO &= ~port; |  | ||||||
| 	} else { |  | ||||||
| 		/* Set the bit to turn on the LED */ |  | ||||||
| 		*pPORTFIO |= port; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* Display usage information */ |  | ||||||
| void show_cmd_usage() |  | ||||||
| { |  | ||||||
| 	printf("Usage:\n%s\n", USAGE_LONG); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| /* Register information for u-boot to find this command */ |  | ||||||
| U_BOOT_CMD(led, 3, 1, do_bf537led, |  | ||||||
| 	   "Control BF537 stamp LEDs", USAGE_LONG); |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
| @@ -29,7 +29,7 @@ include $(TOPDIR)/config.mk | |||||||
|  |  | ||||||
| LIB	= $(obj)lib$(BOARD).a | LIB	= $(obj)lib$(BOARD).a | ||||||
|  |  | ||||||
| COBJS-y	:= $(BOARD).o gpio.o gpio_cfi_flash.o | COBJS-y	:= $(BOARD).o gpio_cfi_flash.o | ||||||
|  |  | ||||||
| SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) | SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) | ||||||
| OBJS	:= $(addprefix $(obj),$(COBJS-y)) | OBJS	:= $(addprefix $(obj),$(COBJS-y)) | ||||||
|   | |||||||
| @@ -1,74 +0,0 @@ | |||||||
| /* |  | ||||||
|  * Control GPIO pins on the fly |  | ||||||
|  * |  | ||||||
|  * Copyright (c) 2008 Analog Devices Inc. |  | ||||||
|  * |  | ||||||
|  * Licensed under the GPL-2 or later. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <common.h> |  | ||||||
| #include <command.h> |  | ||||||
|  |  | ||||||
| #include <asm/blackfin.h> |  | ||||||
|  |  | ||||||
| int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |  | ||||||
| { |  | ||||||
| 	if (argc != 3) { |  | ||||||
|  show_usage: |  | ||||||
| 		printf("Usage:\n%s\n", cmdtp->usage); |  | ||||||
| 		return 1; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/* parse the behavior */ |  | ||||||
| 	ulong port_cmd = 0; |  | ||||||
| 	switch (argv[1][0]) { |  | ||||||
| 		case 'i': break; |  | ||||||
| 		case 's': port_cmd = (PORTFIO_SET - PORTFIO); break; |  | ||||||
| 		case 'c': port_cmd = (PORTFIO_CLEAR - PORTFIO); break; |  | ||||||
| 		case 't': port_cmd = (PORTFIO_TOGGLE - PORTFIO); break; |  | ||||||
| 		default:  goto show_usage; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/* parse the pin with format: [p]<fgh><#> */ |  | ||||||
| 	const char *str_pin = argv[2]; |  | ||||||
|  |  | ||||||
| 	/* grab the [p]<fgh> portion */ |  | ||||||
| 	ulong port_base; |  | ||||||
| 	if (*str_pin == 'p') ++str_pin; |  | ||||||
| 	switch (*str_pin) { |  | ||||||
| 		case 'f': port_base = PORTFIO; break; |  | ||||||
| 		case 'g': port_base = PORTGIO; break; |  | ||||||
| 		case 'h': port_base = PORTHIO; break; |  | ||||||
| 		default:  goto show_usage; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/* grab the <#> portion */ |  | ||||||
| 	ulong pin = simple_strtoul(str_pin+1, NULL, 10); |  | ||||||
| 	ulong pin_mask = (1 << pin); |  | ||||||
| 	if (pin > 15) |  | ||||||
| 		goto show_usage; |  | ||||||
|  |  | ||||||
| 	/* finally, let's do it: set direction and exec command */ |  | ||||||
| 	switch (*str_pin) { |  | ||||||
| 		case 'f': bfin_write_PORTF_FER(bfin_read_PORTF_FER() & ~pin_mask); break; |  | ||||||
| 		case 'g': bfin_write_PORTG_FER(bfin_read_PORTG_FER() & ~pin_mask); break; |  | ||||||
| 		case 'h': bfin_write_PORTH_FER(bfin_read_PORTH_FER() & ~pin_mask); break; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ulong port_dir = port_base + (PORTFIO_DIR - PORTFIO); |  | ||||||
| 	if (argv[1][0] == 'i') |  | ||||||
| 		bfin_write16(port_dir, bfin_read16(port_dir) & ~pin_mask); |  | ||||||
| 	else { |  | ||||||
| 		bfin_write16(port_dir, bfin_read16(port_dir) | pin_mask); |  | ||||||
| 		bfin_write16(port_base + port_cmd, pin_mask); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	printf("gpio: pin %li on port %c has been %c\n", pin, *str_pin, argv[1][0]); |  | ||||||
|  |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| U_BOOT_CMD(gpio, 3, 0, do_gpio, |  | ||||||
| 	"gpio    - set/clear/toggle gpio output pins\n", |  | ||||||
| 	"<s|c|t> <port><pin>\n" |  | ||||||
| 	"    - set/clear/toggle the specified pin\n"); |  | ||||||
| @@ -29,7 +29,7 @@ include $(TOPDIR)/config.mk | |||||||
|  |  | ||||||
| LIB	= $(obj)lib$(BOARD).a | LIB	= $(obj)lib$(BOARD).a | ||||||
|  |  | ||||||
| COBJS-y	:= $(BOARD).o flash.o gpio_cfi_flash.o | COBJS-y	:= $(BOARD).o gpio_cfi_flash.o | ||||||
|  |  | ||||||
| SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) | SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) | ||||||
| OBJS	:= $(addprefix $(obj),$(COBJS-y)) | OBJS	:= $(addprefix $(obj),$(COBJS-y)) | ||||||
|   | |||||||
| @@ -1,34 +0,0 @@ | |||||||
| /* |  | ||||||
|  * flash.c - helper commands for working with GPIO-assisted flash |  | ||||||
|  * |  | ||||||
|  * Copyright (c) 2005-2009 Analog Devices Inc. |  | ||||||
|  * |  | ||||||
|  * Licensed under the GPL-2 or later. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <common.h> |  | ||||||
| #include <command.h> |  | ||||||
| #include <asm/blackfin.h> |  | ||||||
| #include "gpio_cfi_flash.h" |  | ||||||
|  |  | ||||||
| int do_pf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |  | ||||||
| { |  | ||||||
| 	ulong faddr = CONFIG_SYS_FLASH_BASE; |  | ||||||
| 	ushort data; |  | ||||||
| 	ulong dflg; |  | ||||||
|  |  | ||||||
| 	if (argc > 1) { |  | ||||||
| 		dflg = simple_strtoul(argv[1], NULL, 16); |  | ||||||
| 		faddr |= (dflg << 21); |  | ||||||
| 		gpio_cfi_flash_swizzle((void *)faddr); |  | ||||||
| 	} else { |  | ||||||
| 		data = bfin_read_PORTFIO(); |  | ||||||
| 		printf("Port F data %04x (PF4:%i)\n", data, !!(data & PF4)); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| U_BOOT_CMD(pf, 3, 0, do_pf, |  | ||||||
| 	"set/clear PF4 GPIO flash bank switch\n", |  | ||||||
| 	"<pf4> - set PF4 GPIO pin state\n"); |  | ||||||
| @@ -29,7 +29,7 @@ include $(TOPDIR)/config.mk | |||||||
|  |  | ||||||
| LIB	= $(obj)lib$(BOARD).a | LIB	= $(obj)lib$(BOARD).a | ||||||
|  |  | ||||||
| COBJS-y	:= $(BOARD).o flash.o gpio_cfi_flash.o | COBJS-y	:= $(BOARD).o gpio_cfi_flash.o | ||||||
|  |  | ||||||
| SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) | SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) | ||||||
| OBJS	:= $(addprefix $(obj),$(COBJS-y)) | OBJS	:= $(addprefix $(obj),$(COBJS-y)) | ||||||
|   | |||||||
| @@ -1,34 +0,0 @@ | |||||||
| /* |  | ||||||
|  * flash.c - helper commands for working with GPIO-assisted flash |  | ||||||
|  * |  | ||||||
|  * Copyright (c) 2005-2009 Analog Devices Inc. |  | ||||||
|  * |  | ||||||
|  * Licensed under the GPL-2 or later. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <common.h> |  | ||||||
| #include <command.h> |  | ||||||
| #include <asm/blackfin.h> |  | ||||||
| #include "gpio_cfi_flash.h" |  | ||||||
|  |  | ||||||
| int do_ph(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |  | ||||||
| { |  | ||||||
| 	ulong faddr = CONFIG_SYS_FLASH_BASE; |  | ||||||
| 	ushort data; |  | ||||||
| 	ulong dflg; |  | ||||||
|  |  | ||||||
| 	if (argc > 1) { |  | ||||||
| 		dflg = simple_strtoul(argv[1], NULL, 16); |  | ||||||
| 		faddr |= (dflg << 21); |  | ||||||
| 		gpio_cfi_flash_swizzle((void *)faddr); |  | ||||||
| 	} else { |  | ||||||
| 		data = bfin_read_PORTHIO(); |  | ||||||
| 		printf("Port H data %04x (PH0:%i)\n", data, !!(data & PH0)); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| U_BOOT_CMD(ph, 3, 0, do_ph, |  | ||||||
| 	"set/clear PH0 GPIO flash bank switch\n", |  | ||||||
| 	"<ph0> - set PH0 GPIO pin state\n"); |  | ||||||
| @@ -29,7 +29,7 @@ include $(TOPDIR)/config.mk | |||||||
|  |  | ||||||
| LIB	= $(obj)lib$(BOARD).a | LIB	= $(obj)lib$(BOARD).a | ||||||
|  |  | ||||||
| COBJS-y	:= $(BOARD).o flash.o gpio_cfi_flash.o | COBJS-y	:= $(BOARD).o gpio_cfi_flash.o | ||||||
|  |  | ||||||
| SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) | SRCS	:= $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c) | ||||||
| OBJS	:= $(addprefix $(obj),$(COBJS-y)) | OBJS	:= $(addprefix $(obj),$(COBJS-y)) | ||||||
|   | |||||||
| @@ -1,37 +0,0 @@ | |||||||
| /* |  | ||||||
|  * flash.c - helper commands for working with GPIO-assisted flash |  | ||||||
|  * |  | ||||||
|  * Copyright (c) 2005-2009 Analog Devices Inc. |  | ||||||
|  * |  | ||||||
|  * Licensed under the GPL-2 or later. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <common.h> |  | ||||||
| #include <command.h> |  | ||||||
| #include <asm/blackfin.h> |  | ||||||
| #include "gpio_cfi_flash.h" |  | ||||||
|  |  | ||||||
| int do_pf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |  | ||||||
| { |  | ||||||
| 	ulong faddr = CONFIG_SYS_FLASH_BASE; |  | ||||||
| 	ushort data; |  | ||||||
| 	ulong dflg; |  | ||||||
|  |  | ||||||
| 	if (argc == 3) { |  | ||||||
| 		dflg = simple_strtoul(argv[1], NULL, 16); |  | ||||||
| 		faddr |= (dflg << 21); |  | ||||||
| 		dflg = simple_strtoul(argv[2], NULL, 16); |  | ||||||
| 		faddr |= (dflg << 22); |  | ||||||
| 		gpio_cfi_flash_swizzle((void *)faddr); |  | ||||||
| 	} else { |  | ||||||
| 		data = bfin_read_PORTFIO(); |  | ||||||
| 		printf("Port F data %04x (PF4:%i PF5:%i)\n", data, |  | ||||||
| 			!!(data & PF4), !!(data & PF5)); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| U_BOOT_CMD(pf, 3, 0, do_pf, |  | ||||||
| 	"set/clear PF4/PF5 GPIO flash bank switch\n", |  | ||||||
| 	"<pf4> <pf5> - set PF4/PF5 GPIO pin state\n"); |  | ||||||
| @@ -268,8 +268,6 @@ | |||||||
| #define CONFIG_RTC_BFIN | #define CONFIG_RTC_BFIN | ||||||
| #define CONFIG_UART_CONSOLE	0 | #define CONFIG_UART_CONSOLE	0 | ||||||
|  |  | ||||||
| /* #define CONFIG_BF537_STAMP_LEDCMD	1 */ |  | ||||||
|  |  | ||||||
| /* Define if want to do post memory test */ | /* Define if want to do post memory test */ | ||||||
| #undef CONFIG_POST | #undef CONFIG_POST | ||||||
| #ifdef CONFIG_POST | #ifdef CONFIG_POST | ||||||
|   | |||||||
| @@ -83,6 +83,7 @@ | |||||||
| # define CONFIG_CMD_CPLBINFO | # define CONFIG_CMD_CPLBINFO | ||||||
| # define CONFIG_CMD_ELF | # define CONFIG_CMD_ELF | ||||||
| # define CONFIG_ELF_SIMPLE_LOAD | # define CONFIG_ELF_SIMPLE_LOAD | ||||||
|  | # define CONFIG_CMD_GPIO | ||||||
| # define CONFIG_CMD_KGDB | # define CONFIG_CMD_KGDB | ||||||
| # define CONFIG_CMD_REGINFO | # define CONFIG_CMD_REGINFO | ||||||
| # define CONFIG_CMD_STRINGS | # define CONFIG_CMD_STRINGS | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user