diff --git a/board/nm/hw25/Makefile b/board/nm/hw25/Makefile index 813f0b8103..e9a013ecbb 100644 --- a/board/nm/hw25/Makefile +++ b/board/nm/hw25/Makefile @@ -10,4 +10,4 @@ ifeq ($(CONFIG_SKIP_LOWLEVEL_INIT),) obj-y := mux.o endif -obj-y += board.o ../common/bdparser.o ../common/board_descriptor.o ../common/da9063.o shield.o shield_can.o shield_comio.o fileaccess.o +obj-y += board.o ../common/bdparser.o ../common/board_descriptor.o ../common/da9063.o fileaccess.o diff --git a/board/nm/hw25/board.c b/board/nm/hw25/board.c index 96008be985..af208e696e 100644 --- a/board/nm/hw25/board.c +++ b/board/nm/hw25/board.c @@ -35,9 +35,6 @@ #include "../common/board_descriptor.h" #include "../common/da9063.h" #include "board.h" -#include "shield.h" -#include "shield_can.h" -#include "shield_comio.h" #include "fileaccess.h" @@ -658,11 +655,10 @@ int board_init(void) void set_console(void) { const char *defaultconsole = getenv("defaultconsole"); - int shield_id = bd_get_shield(0); - /* Set default console to ttyS1 if not yet defined in env */ + /* Set default console to ttyS0 if not yet defined in env */ if (defaultconsole == 0) { - setenv("defaultconsole", "ttyS1"); + setenv("defaultconsole", "ttyS0"); } /* @@ -677,34 +673,6 @@ void set_console(void) serial_init(); /* serial communications setup */ console_init_f(); /* stage 1 init of console */ #endif - - if (shield_id == SHIELD_COM_IO) { - char buf[20]; - - /* - * With COM/IO shield the defaultconsole for the kernel should - * be ttyS0 (external port). - * If consoledev file is present, take the tty defined in it as console - */ - setenv("defaultconsole", "ttyS0"); - - if (read_file("/root/boot/consoledev", buf, sizeof(buf)) > 3) { - if (strstr(buf, "tty") == buf) { - int i; - /* TODO: What is this code doing? */ - /* Truncating after whitespace? */ - /* are there broken consoledev files around ? */ - buf[sizeof(buf)-1] = 0; - for (i=0; iname); - - cmd->init(); - shieldcmd = cmd->default_shieldcmd; - - /* If a shield configuration is set by Linux, take it without bd check. - * We asume that Linux knows what to do. - */ - len = read_file("/root/boot/shieldcmd", shieldcmd_linux, MAX_SHIELD_CMD_LEN); - if (len > 0) { - debug("Shield command found in file, using it\n"); - shieldcmd = shieldcmd_linux; - } - -end: - setenv("shieldcmd", shieldcmd); -} - -static void shield_init(void) -{ - shield_config(); -} - static bool get_button_state(void) { uint8_t state = 0x00; @@ -1033,7 +915,6 @@ int board_late_init(void) check_reset_button(); set_console(); - shield_init(); check_fct(); check_jtag_boot(); @@ -1169,6 +1050,7 @@ int board_fit_config_name_match(const char *name) #if defined(CONFIG_OF_BOARD_SETUP) && !defined(CONFIG_SPL_BUILD) +#if 0 static void ft_enable_node(void* blob, const char* name) { int node_ofs = -1; @@ -1235,49 +1117,7 @@ static void ft_set_gpio_name(void *blob, const char* gpio, int pin, const char* end: ; } - -/* - * Enable digital IOs provided by COM/IO shield in gpio nodes - */ -static void ft_comio_gpios(void *blob) -{ - /* gpio0_7: COM/IO relay output */ - ft_set_gpio_name(blob, "/ocp/gpio@44e07000", 7, "COMIO_OUT0"); - - /* gpio1_8: COM/IO digital input */ - ft_set_gpio_name(blob, "/ocp/gpio@4804c000", 8, "COMIO_IN0"); -} - -static void ft_shields(void* blob) -{ - int shield_type = -1; - - shield_type = bd_get_shield(0); - switch (shield_type) { - case SHIELD_COM_IO: - ft_comio_gpios(blob); - ft_enable_node(blob, "/netbox_dio_comio"); - /* TODO: Should use alias serial0 */ - ft_enable_node(blob, "/ocp/serial@44e09000"); - break; - - case SHIELD_DUALCAN: - case SHIELD_DUALCAN_PASSIVE: - /* TODO: Should use alias d_can0, d_can1 */ - ft_enable_node(blob, "/ocp/can@481cc000"); - ft_enable_node(blob, "/ocp/can@481d0000"); - break; - - default: - /* - * Enable uart1 (ttyS0) always as kernel needs it as fallback console, - * if (ttyS1) is not available as console. - */ - ft_enable_node(blob, "/ocp/serial@44e09000"); - break; - }; - -} +#endif static void ft_bootloader_version(void *blob) { @@ -1304,6 +1144,7 @@ static void ft_hw_info(void *blob) } } +#if 0 static void ft_override_thermal(void *blob) { const char* temp_alert0 = getenv("temp_alert0"); @@ -1333,16 +1174,14 @@ static void ft_override_thermal(void *blob) } } } +#endif int ft_board_setup(void *blob, bd_t *bd) { ft_bootloader_version(blob); ft_hw_info(blob); - ft_shields(blob); - - - ft_override_thermal(blob); + /* ft_override_thermal(blob); */ return 0; } diff --git a/board/nm/hw25/shield.c b/board/nm/hw25/shield.c deleted file mode 100644 index e25e905381..0000000000 --- a/board/nm/hw25/shield.c +++ /dev/null @@ -1,74 +0,0 @@ -#undef DEBUG - -#include -#include -#include - -#include "shield.h" -#include "board.h" - -#define MAX_SHIELDS 16 - -static struct shield_t *shields[MAX_SHIELDS]; -static int shield_count = 0; - -/* Perhaps this function shouldn't leave in shields.c? */ -int shield_gpio_request_as_input(unsigned int gpio, const char *label) -{ - int ret; - - ret = gpio_request(gpio, label); - if ((ret < 0)) { - printf("Could not request shield slot %s gpio\n", label); - return -1; - } - - ret = gpio_direction_input(gpio); - if ((ret < 0)) { - printf("Could not configure shield slot %s gpio as input\n", label); - return -1; - } - - return 0; -} - -void shield_register(struct shield_t *shield) -{ - if (shield_count >= MAX_SHIELDS) { - printf("Max shield count reached (%d), please increment MAX_SHIELDS\n", MAX_SHIELDS); - return; - } - shields[shield_count++] = shield; -} - -int shield_set_mode(const char* shield_type, int argc, char * const argv[]) -{ - int i; - - for (i = 0; i < shield_count; i++) { - if (strcmp(shield_type, shields[i]->name) == 0) { - return shields[i]->setmode(argv, argc); - } - } - printf("## Error: No %s shield installed\n", shield_type); - /* Do not return error, to not show usage (request by rs) */ - return 0; -} - -static int do_shieldmode(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - if (argc < 2) { - return -1; - } - - return shield_set_mode(argv[1], argc - 2, &argv[2]); -} - -U_BOOT_CMD( - shield, 6, 1, do_shieldmode, - "Set the shield mode", - "dualcan termination [on|off] [on|off]\n" - "shield dualcan-passive\n" - "shield comio mode [rs232|rs485] termination [on|off]\n" -); - diff --git a/board/nm/hw25/shield.h b/board/nm/hw25/shield.h deleted file mode 100644 index bd748eedde..0000000000 --- a/board/nm/hw25/shield.h +++ /dev/null @@ -1,26 +0,0 @@ -/**@file /home/eichenberger/projects/nbhw16/u-boot/board/nm/netbird_v2/shield.h - * @author eichenberger - * @version 704 - * @date - * Created: Wed 31 May 2017 02:56:16 PM CEST \n - * Last Update: Wed 31 May 2017 02:56:16 PM CEST - */ -#ifndef SHIELD_H -#define SHIELD_H - -#define SHIELD_COM_IO 0 -#define SHIELD_DUALCAN 1 -#define SHIELD_CAN_GNSS 2 -#define SHIELD_DUALCAN_PASSIVE 3 - -struct shield_t{ - char name[64]; - int (*setmode)(char * const argv[], int argc); -}; - -int shield_setmode(int mode); -void shield_register(struct shield_t *shield); - -int shield_gpio_request_as_input(unsigned int gpio, const char *label); - -#endif // SHIELD_H diff --git a/board/nm/hw25/shield_can.c b/board/nm/hw25/shield_can.c deleted file mode 100644 index a1252fff7f..0000000000 --- a/board/nm/hw25/shield_can.c +++ /dev/null @@ -1,214 +0,0 @@ -#undef DEBUG - -#include -#include -#include - -#include "shield.h" -#include "board.h" - -#define CAN_PORTS 2 - -#define NETBIRD_GPIO_RST_SHIELD_N GPIO_TO_PIN(0, 27) -#define NETBIRD_GPIO_LATCH GPIO_TO_PIN(0, 7) -#define NETBIRD_GPIO_MODE_0 GPIO_TO_PIN(1, 10) -#define NETBIRD_GPIO_MODE_1 GPIO_TO_PIN(1, 8) - - -static int shield_slot_initialized = 0; - - -static struct module_pin_mux can_shield_netbird_pin_mux_config[] = { - /* Leave UART0 unconfigured because we want to configure it as needed by linux (can/spi/uart/etc) */ - {OFFSET(uart0_ctsn), (MODE(7) | PULLUDEN | PULLUP_EN)}, /* (E18) gpio1_8 */ /* Mode 0 */ - {OFFSET(uart0_rxd), (MODE(7) | PULLUDEN | PULLUP_EN)}, /* (E15) gpio1_10 */ /* Mode 1 */ - {OFFSET(ecap0_in_pwm0_out), (MODE(7) | PULLUDEN | PULLUP_EN)}, /* (C18) eCAP0_in_PWM0_out.gpio0[7] */ /* Latch EN */ - {-1}, -}; - -static struct module_pin_mux can_shield_netbird_pin_mux_final[] = { - {OFFSET(uart0_txd), (MODE(2) | PULLUDDIS | RXACTIVE)}, /* (E16) dcan0_rx */ - {OFFSET(uart0_rxd), (MODE(2) | PULLUDEN | PULLUP_EN)}, /* (E15) dcan0_tx */ - {OFFSET(uart0_rtsn), (MODE(2) | PULLUDDIS | RXACTIVE)}, /* (E17) dcan1_rx */ - {OFFSET(uart0_ctsn), (MODE(2) | PULLUDEN | PULLUP_EN)}, /* (E18) dcan1_tx */ - {-1}, -}; - - -static int request_gpios(void) -{ - int ret; - - debug("Shield configure gpios\n"); - ret = shield_gpio_request_as_input(NETBIRD_GPIO_RST_SHIELD_N, "shield-rst"); - if ((ret < 0)) - return -1; - ret = shield_gpio_request_as_input(NETBIRD_GPIO_LATCH, "shield-load"); - if ((ret < 0)) - return -1; - ret = shield_gpio_request_as_input(NETBIRD_GPIO_MODE_0, "shield-mode0"); - if ((ret < 0)) - return -1; - ret = shield_gpio_request_as_input(NETBIRD_GPIO_MODE_1, "shield-mode1"); - if ((ret < 0)) - return -1; - - shield_slot_initialized = 1; - return 0; -} - -static int configure_shieldmode(int mode) -{ - int ret; - - if (mode < 0 || mode > 3) { - debug("Invalid shield mode %d\n", mode); - return -1; - } - - debug("Shield type dualcan\n"); - debug ("Set shield mode to %d\n", mode); - - if (!shield_slot_initialized) { - if (request_gpios()) { - puts("Failed to request gpios\n"); - return -1; - } - } - - debug("Configure shield pin muxing for configuration\n"); - configure_module_pin_mux(can_shield_netbird_pin_mux_config); - - debug("Make sure shield module is in reset\n"); - ret = gpio_direction_output(NETBIRD_GPIO_RST_SHIELD_N, 0); - if (ret < 0) { - puts("Can not set shield-rst as output\n"); - return -1; - } - udelay(10); - - debug("Set latch to high\n"); - ret = gpio_direction_output(NETBIRD_GPIO_LATCH, 1); - if (ret < 0) { - puts("Can not set shield-load as output\n"); - return -1; - } - udelay(10); - - debug("Write mode to GPIOs\n"); - ret = gpio_direction_output(NETBIRD_GPIO_MODE_0, mode & 0x01); - if (ret < 0) { - puts("Can not set shield-mode0 as output\n"); - return -1; - } - ret = gpio_direction_output(NETBIRD_GPIO_MODE_1, mode & 0x02); - if (ret < 0) { - puts("Can not set shield-mode1 as output\n"); - return -1; - } - udelay(10); - - debug("Set latch to low\n"); - gpio_set_value(NETBIRD_GPIO_LATCH, 0); - udelay(10); - - debug("Set mode0 and mode1 to highz again\n"); - ret = gpio_direction_input(NETBIRD_GPIO_MODE_0); - if ((ret < 0)) { - puts("Could not configure shield slot mode0 gpio as input\n"); - return -1; - } - - ret = gpio_direction_input(NETBIRD_GPIO_MODE_1); - if ((ret < 0)) { - puts("Could not configure shield slot mode1 gpio as input\n"); - return -1; - } - udelay(10); - - debug("Take shield out of reset\n"); - gpio_set_value(NETBIRD_GPIO_RST_SHIELD_N, 1); - udelay(10); - - debug("Set final can shield muxing\n"); - configure_module_pin_mux(can_shield_netbird_pin_mux_final); - - return 0; - -} - -static int get_termination(const char* termination) -{ - if (strcmp("on", termination) == 0) { - return 1; - } - else if (strcmp("off", termination) == 0) { - return 0; - } - - debug ("Invalid termination mode %s (falling back to off)", termination); - return -1; -} - -static int get_mode_from_args(char * const argv[], int argc) -{ - int terminations[CAN_PORTS]; - int i; - - assert(argc == (CAN_PORTS + 1)); - - if (strcmp ("termination", argv[0])) { - debug("The only option for dualcan is terminations\n"); - return -1; - } - - for (i = 0; i < CAN_PORTS; i ++) { - terminations[i] = get_termination(argv[i + 1]); - if (terminations[i] < 0) { - return -1; - } - } - - /* Termination is inverse */ - /* TODO: Double check */ - return (!terminations[0] << 0) | (!terminations[1] << 1); -} - -static int set_shieldmode(char * const argv[], int argc) -{ - if (argc != 3) { - debug("Too few arguments for dualcan\n"); - return -1; - } - - return configure_shieldmode(get_mode_from_args(argv, argc)); -} - -static int no_options(char * const argv[], int argc) -{ - if (argc != 0) { - debug("Too many arguments\n"); - return -1; - } - - return 0; -} - - -static struct shield_t can_shield = { - "dualcan", set_shieldmode -}; - -void can_shield_init(void) -{ - shield_register(&can_shield); -} - -static struct shield_t can_shield_passive = { - "dualcan-passive", no_options -}; - -void can_shield_passive_init(void) -{ - shield_register(&can_shield_passive); -} diff --git a/board/nm/hw25/shield_can.h b/board/nm/hw25/shield_can.h deleted file mode 100644 index 56d8251e36..0000000000 --- a/board/nm/hw25/shield_can.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef SHIELD_CAN_H -#define SHIELD_CAN_H - -int shield_can_init(void); -int shield_can_setmode(int mode); - -void can_shield_init(void); -void can_shield_passive_init(void); - -#endif // SHIELD_CAN_H diff --git a/board/nm/hw25/shield_comio.c b/board/nm/hw25/shield_comio.c deleted file mode 100644 index f43e992349..0000000000 --- a/board/nm/hw25/shield_comio.c +++ /dev/null @@ -1,252 +0,0 @@ -#undef DEBUG - -#include -#include -#include - -#include "shield.h" -#include "board.h" - -/* TODO: Double Check */ -#define NETBIRD_GPIO_RST_SHIELD_N GPIO_TO_PIN(0, 27) -#define NETBIRD_GPIO_LOAD GPIO_TO_PIN(1, 9) -/* TODO: Who configures UART0_RTSn, GPIO1_9 ? */ -#define NETBIRD_GPIO_MODE_0 GPIO_TO_PIN(1, 11) -#define NETBIRD_GPIO_MODE_1 GPIO_TO_PIN(1, 10) - -static int shield_slot_initialized = 0; - - -/* TODO: Naming -> config, final */ -static struct module_pin_mux shield_gpio_netbird_pin_mux[] = { - {OFFSET(uart0_rxd), (MODE(7) | PULLUDDIS)}, /* (E15) gpio1_10 */ /* Mode 0 */ - {OFFSET(uart0_txd), (MODE(7) | PULLUDEN | PULLUP_EN)}, /* (E16) gpio1_11 */ /* Mode 1 */ - {-1}, -}; - -static struct module_pin_mux shield_gpio_safe_netbird_pin_mux[] = { - /* Leave UART0 unconfigured (GPIO) because we want to configure it as needed by linux (can/spi/uart/etc) */ - {OFFSET(uart0_rxd), (MODE(7) | PULLUDDIS | RXACTIVE)}, /* (E15) gpio1_10 */ /* Mode 0 */ - {OFFSET(uart0_txd), (MODE(7) | PULLUDDIS | RXACTIVE)}, /* (E16) gpio1_11 */ /* Mode 1 */ - {-1}, -}; - - -static int request_gpios(void) -{ - int ret; - - debug("Extension slot init\n"); - ret = shield_gpio_request_as_input(NETBIRD_GPIO_RST_SHIELD_N, "shield-rst"); - if ((ret < 0)) - return -1; - ret = shield_gpio_request_as_input(NETBIRD_GPIO_LOAD, "shield-load"); - if ((ret < 0)) - return -1; - ret = shield_gpio_request_as_input(NETBIRD_GPIO_MODE_0, "shield-mode0"); - if ((ret < 0)) - return -1; - ret = shield_gpio_request_as_input(NETBIRD_GPIO_MODE_1, "shield-mode1"); - if ((ret < 0)) - return -1; - - shield_slot_initialized = 1; - return 0; -} - -static int configure_shieldmode(int mode) -{ - int ret; - - if (mode < 0 || mode > 3) { - debug ("Invalid shield mode %d\n", mode); - return -1; - } - - debug("Shield type comio\n"); - debug ("Set shield mode to %d\n", mode); - - if (!shield_slot_initialized) { - if (request_gpios()) { - puts("Failed to request gpios\n"); - return -1; - } - } - - debug("Make sure shield module is in reset\n"); - ret = gpio_direction_output(NETBIRD_GPIO_RST_SHIELD_N, 0); - if (ret < 0) { - puts("Can not set shield-rst as output\n"); - return -1; - } - udelay(10); - - debug("Enable gpio pull-ups\n"); - configure_module_pin_mux(shield_gpio_netbird_pin_mux); - - debug("Set load to low\n"); - ret = gpio_direction_output(NETBIRD_GPIO_LOAD, 0); - if (ret < 0) { - puts("Can not set shield-load as output\n"); - return -1; - } - udelay(10); - - debug("Write mode to GPIOs\n"); - ret = gpio_direction_output(NETBIRD_GPIO_MODE_0, mode & 0x01); - if (ret < 0) { - puts("Can not set shield-mode0 as output\n"); - return -1; - } - ret = gpio_direction_output(NETBIRD_GPIO_MODE_1, mode & 0x02); - if (ret < 0) { - puts("Can not set shield-mode1 as output\n"); - return -1; - } - udelay(10); - - debug("Set load to high\n"); - gpio_set_value(NETBIRD_GPIO_LOAD, 1); - udelay(10); - - debug("Set mode0 and mode1 to highz again\n"); - ret = gpio_direction_input(NETBIRD_GPIO_MODE_0); - if ((ret < 0)) { - puts("Could not configure shield slot mode0 gpio as input\n"); - return -1; - } - - ret = gpio_direction_input(NETBIRD_GPIO_MODE_1); - if ((ret < 0)) { - puts("Could not configure shield slot mode1 gpio as input\n"); - return -1; - } - udelay(10); - - debug("Disable pullups on shield gpios\n"); - configure_module_pin_mux(shield_gpio_safe_netbird_pin_mux); - udelay(10); - - debug("Take shield out of reset\n"); - gpio_set_value(NETBIRD_GPIO_RST_SHIELD_N, 1); - udelay(10); - - debug("Set gpio load as input again\n"); - ret = gpio_direction_input(NETBIRD_GPIO_LOAD); - if (ret < 0) { - puts("Can not configure shield slot load as input"); - return -1; - } - - return 0; -} - -enum mode_nr { - RS232, - RS485, - UNKNOWN -}; - -struct mode { - enum mode_nr nr; - const char* name; - int argc; -}; - -struct mode modes[] = { - { RS232, "rs232", 0 }, - { RS485, "rs485", 2 } -}; - -static const struct mode *get_mode(const char *mode) -{ - int i; - for (i = 0; i < ARRAY_SIZE(modes); i++) { - if (strcmp(modes[i].name, mode) == 0) { - return &modes[i]; - } - } - return NULL; -} - -static int get_termination(const char* termination) -{ - if (strcmp("on", termination) == 0) { - return 1; - } - else if (strcmp("off", termination) == 0) { - return 0; - } - - debug ("Invalid termination mode %s (falling back to off)", termination); - return -1; -} - -static int get_mode_from_args(char * const argv[], int argc) -{ - int termination = 0; - int rs232 = 0; - const struct mode *selected_mode; - - assert(argc >= 2); - - if (strcmp ("mode", argv[0])) { - debug("Invalid arguments (see help)\n"); - return -1; - } - - selected_mode = get_mode(argv[1]); - if (selected_mode == NULL) { - debug("Mode %s not supported\n", argv[1]); - return -1; - } - - debug ("Mode %s, index %d, argc %d\n", selected_mode->name, - selected_mode->nr, selected_mode->argc); - - if (selected_mode->argc != argc - 2) { - debug("Invalid argument count for mode %s (should %d is %d)\n", - argv[1], selected_mode->argc, argc - 2); - return -1; - } - - if (selected_mode->nr == RS485) { - if (strcmp("termination", argv[2])) { - debug("Invalid arguments, do not configure termination\n"); - return -1; - } - - termination = get_termination(argv[3]); - if (termination < 0) { - debug("Invalid termination %s\n", argv[3]); - return -1; - } - } - else { - rs232 = 1; - } - - /* Termination is inverse */ - return (rs232 << 0) | ((!termination) << 1); -} - -int set_shieldmode(char * const argv[], int argc) -{ - if (argc < 2) { - debug("Too few arguments for comio\n"); - return -1; - } - - /* -1 will make configure_shieldmode to faile and is okay therefore */ - return configure_shieldmode(get_mode_from_args(argv, argc)); -} - -/* TODO: Static ? */ -struct shield_t comio_shield = { - "comio", set_shieldmode -}; - -void comio_shield_init(void) -{ - shield_register(&comio_shield); -} diff --git a/board/nm/hw25/shield_comio.h b/board/nm/hw25/shield_comio.h deleted file mode 100644 index 2b2602e917..0000000000 --- a/board/nm/hw25/shield_comio.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef SHIELD_COMIO_H -#define SHIELD_COMIO_H - -void comio_shield_init(void); - -#endif // SHIELD_COMIO_H