From d3968162616f02acebe6cf498a46b48d20e084fd Mon Sep 17 00:00:00 2001 From: Vicente Bergas Date: Sun, 10 Mar 2013 00:19:35 +0100 Subject: [PATCH 01/14] omap4_romusb: rename omap4_usbboot_pdata to omap4_usbboot_data omap4_usbboot_pdata is not a pointer, so remove the "p" Signed-off-by: Vicente Bergas Signed-off-by: Sascha Hauer --- arch/arm/mach-omap/omap4_rom_usb.c | 72 +++++++++++++++--------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/arch/arm/mach-omap/omap4_rom_usb.c b/arch/arm/mach-omap/omap4_rom_usb.c index 48d643375..38f886b20 100644 --- a/arch/arm/mach-omap/omap4_rom_usb.c +++ b/arch/arm/mach-omap/omap4_rom_usb.c @@ -36,7 +36,7 @@ #include #include -static struct omap4_usbboot omap4_usbboot_pdata; +static struct omap4_usbboot omap4_usbboot_data; static int omap4_usbboot_open(void) { @@ -62,20 +62,20 @@ static int omap4_usbboot_open(void) (boot->device_type != DEVICE_USBEXT)) return -1; - memset(&omap4_usbboot_pdata, 0, sizeof(omap4_usbboot_pdata)); - n = rom_get_per_driver(&omap4_usbboot_pdata.io, boot->device_type); + memset(&omap4_usbboot_data, 0, sizeof(omap4_usbboot_data)); + n = rom_get_per_driver(&omap4_usbboot_data.io, boot->device_type); if (n) return n; - omap4_usbboot_pdata.dread.status = -1; - omap4_usbboot_pdata.dread.xfer_mode = boot->xfer_mode; - omap4_usbboot_pdata.dread.options = boot->options; - omap4_usbboot_pdata.dread.device_type = boot->device_type; + omap4_usbboot_data.dread.status = -1; + omap4_usbboot_data.dread.xfer_mode = boot->xfer_mode; + omap4_usbboot_data.dread.options = boot->options; + omap4_usbboot_data.dread.device_type = boot->device_type; - omap4_usbboot_pdata.dwrite.status = -1; - omap4_usbboot_pdata.dwrite.xfer_mode = boot->xfer_mode; - omap4_usbboot_pdata.dwrite.options = boot->options; - omap4_usbboot_pdata.dwrite.device_type = boot->device_type; + omap4_usbboot_data.dwrite.status = -1; + omap4_usbboot_data.dwrite.xfer_mode = boot->xfer_mode; + omap4_usbboot_data.dwrite.options = boot->options; + omap4_usbboot_data.dwrite.device_type = boot->device_type; __asm__ __volatile__ ("cpsie i\n"); return 0; } @@ -83,71 +83,71 @@ static int omap4_usbboot_open(void) static void rom_read_callback(struct per_handle *rh) { - omap4_usbboot_pdata.dread.status = rh->status; + omap4_usbboot_data.dread.status = rh->status; return; } void omap4_usbboot_queue_read(void *data, unsigned len) { int n; - omap4_usbboot_pdata.dread.data = data; - omap4_usbboot_pdata.dread.length = len; - omap4_usbboot_pdata.dread.status = STATUS_WAITING; - omap4_usbboot_pdata.dread.xfer_mode = 1; - omap4_usbboot_pdata.dread.callback = rom_read_callback; - n = omap4_usbboot_pdata.io->read(&omap4_usbboot_pdata.dread); + omap4_usbboot_data.dread.data = data; + omap4_usbboot_data.dread.length = len; + omap4_usbboot_data.dread.status = STATUS_WAITING; + omap4_usbboot_data.dread.xfer_mode = 1; + omap4_usbboot_data.dread.callback = rom_read_callback; + n = omap4_usbboot_data.io->read(&omap4_usbboot_data.dread); if (n) - omap4_usbboot_pdata.dread.status = n; + omap4_usbboot_data.dread.status = n; } int omap4_usbboot_wait_read(void) { int ret; - while (omap4_usbboot_pdata.dread.status == STATUS_WAITING) + while (omap4_usbboot_data.dread.status == STATUS_WAITING) /* cpu_relax(); */ barrier(); - ret = omap4_usbboot_pdata.dread.status; - omap4_usbboot_pdata.dread.status = -1; + ret = omap4_usbboot_data.dread.status; + omap4_usbboot_data.dread.status = -1; return ret; } int omap4_usbboot_is_read_waiting(void) { barrier(); - return omap4_usbboot_pdata.dread.status == STATUS_WAITING; + return omap4_usbboot_data.dread.status == STATUS_WAITING; } int omap4_usbboot_is_read_ok(void) { barrier(); - return omap4_usbboot_pdata.dread.status == STATUS_OKAY; + return omap4_usbboot_data.dread.status == STATUS_OKAY; } static void rom_write_callback(struct per_handle *rh) { - omap4_usbboot_pdata.dwrite.status = rh->status; + omap4_usbboot_data.dwrite.status = rh->status; return; } void omap4_usbboot_queue_write(void *data, unsigned len) { int n; - omap4_usbboot_pdata.dwrite.data = data; - omap4_usbboot_pdata.dwrite.length = len; - omap4_usbboot_pdata.dwrite.status = STATUS_WAITING; - omap4_usbboot_pdata.dwrite.xfer_mode = 1; - omap4_usbboot_pdata.dwrite.callback = rom_write_callback; - n = omap4_usbboot_pdata.io->write(&omap4_usbboot_pdata.dwrite); + omap4_usbboot_data.dwrite.data = data; + omap4_usbboot_data.dwrite.length = len; + omap4_usbboot_data.dwrite.status = STATUS_WAITING; + omap4_usbboot_data.dwrite.xfer_mode = 1; + omap4_usbboot_data.dwrite.callback = rom_write_callback; + n = omap4_usbboot_data.io->write(&omap4_usbboot_data.dwrite); if (n) - omap4_usbboot_pdata.dwrite.status = n; + omap4_usbboot_data.dwrite.status = n; } int omap4_usbboot_wait_write(void) { int ret; - while (omap4_usbboot_pdata.dwrite.status == STATUS_WAITING) + while (omap4_usbboot_data.dwrite.status == STATUS_WAITING) /* cpu_relax(); */ barrier(); - ret = omap4_usbboot_pdata.dwrite.status; - omap4_usbboot_pdata.dwrite.status = -1; + ret = omap4_usbboot_data.dwrite.status; + omap4_usbboot_data.dwrite.status = -1; return ret; } @@ -177,7 +177,7 @@ int omap4_usbboot_write(void *data, unsigned len) void omap4_usbboot_close(void) { - omap4_usbboot_pdata.io->close(&omap4_usbboot_pdata.dread); + omap4_usbboot_data.io->close(&omap4_usbboot_data.dread); } void omap4_usbboot_puts(const char *s) From 4fe4febc3edd251bed70f62ed7bbb7fff8022c12 Mon Sep 17 00:00:00 2001 From: Vicente Bergas Date: Sun, 10 Mar 2013 00:19:38 +0100 Subject: [PATCH 02/14] panda: remove unused configuration items Signed-off-by: Vicente Bergas Signed-off-by: Sascha Hauer --- arch/arm/configs/panda_xload_defconfig | 3 --- 1 file changed, 3 deletions(-) diff --git a/arch/arm/configs/panda_xload_defconfig b/arch/arm/configs/panda_xload_defconfig index 1ed20a157..5cedcffdc 100644 --- a/arch/arm/configs/panda_xload_defconfig +++ b/arch/arm/configs/panda_xload_defconfig @@ -6,9 +6,6 @@ CONFIG_THUMB2_BAREBOX=y # CONFIG_CMD_ARM_CPUINFO is not set CONFIG_MMU=y CONFIG_TEXT_BASE=0x40300000 -CONFIG_MEMORY_LAYOUT_FIXED=y -CONFIG_STACK_BASE=0x8f000000 -CONFIG_MALLOC_BASE=0x84000000 CONFIG_MALLOC_SIZE=0x2000000 CONFIG_PROMPT="barebox> " CONFIG_SHELL_NONE=y From c60a184c5351315a1e703f6f89a0a57e77fcdbd9 Mon Sep 17 00:00:00 2001 From: Vicente Bergas Date: Sun, 10 Mar 2013 00:19:39 +0100 Subject: [PATCH 03/14] ARM: omap4_romusb: allow adding usb-serial when not booting from usb Signed-off-by: Vicente Bergas Signed-off-by: Sascha Hauer --- arch/arm/boards/archosg9/board.c | 5 +++- .../mach-omap/include/mach/omap4_rom_usb.h | 3 +++ arch/arm/mach-omap/omap4_rom_usb.c | 23 +++++++++---------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/arch/arm/boards/archosg9/board.c b/arch/arm/boards/archosg9/board.c index 8366ccafe..b954f1e4d 100644 --- a/arch/arm/boards/archosg9/board.c +++ b/arch/arm/boards/archosg9/board.c @@ -17,15 +17,18 @@ #include #include #include +#include #include #include #include #include "archos_features.h" static int archosg9_console_init(void){ - if (IS_ENABLED(CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT)) + if (IS_ENABLED(CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT) && + omap4_usbboot_ready()) { add_generic_device("serial_omap4_usbboot", DEVICE_ID_DYNAMIC , NULL, 0, 0, 0, NULL); + } if (IS_ENABLED(CONFIG_DRIVER_SERIAL_NS16550)) { gpio_direction_output(41, 0); /* gps_disable */ gpio_direction_output(34, 1); /* 1v8_pwron */ diff --git a/arch/arm/mach-omap/include/mach/omap4_rom_usb.h b/arch/arm/mach-omap/include/mach/omap4_rom_usb.h index 50c359f47..bf8bd159a 100644 --- a/arch/arm/mach-omap/include/mach/omap4_rom_usb.h +++ b/arch/arm/mach-omap/include/mach/omap4_rom_usb.h @@ -122,8 +122,11 @@ struct omap4_usbboot { struct per_handle dread; struct per_handle dwrite; struct per_driver *io; + int ready; }; +int omap4_usbboot_open(void); +int omap4_usbboot_ready(void); void omap4_usbboot_close(void); void omap4_usbboot_queue_read(void *data, unsigned len); diff --git a/arch/arm/mach-omap/omap4_rom_usb.c b/arch/arm/mach-omap/omap4_rom_usb.c index 38f886b20..de35d61c1 100644 --- a/arch/arm/mach-omap/omap4_rom_usb.c +++ b/arch/arm/mach-omap/omap4_rom_usb.c @@ -38,7 +38,7 @@ static struct omap4_usbboot omap4_usbboot_data; -static int omap4_usbboot_open(void) +int omap4_usbboot_open(void) { int (*rom_get_per_driver)(struct per_driver **io, u32 device_type); int (*rom_get_per_device)(struct per_handle **rh); @@ -60,7 +60,7 @@ static int omap4_usbboot_open(void) if ((boot->device_type != DEVICE_USB) && (boot->device_type != DEVICE_USBEXT)) - return -1; + return 0; memset(&omap4_usbboot_data, 0, sizeof(omap4_usbboot_data)); n = rom_get_per_driver(&omap4_usbboot_data.io, boot->device_type); @@ -77,9 +77,16 @@ static int omap4_usbboot_open(void) omap4_usbboot_data.dwrite.options = boot->options; omap4_usbboot_data.dwrite.device_type = boot->device_type; __asm__ __volatile__ ("cpsie i\n"); + omap4_usbboot_data.ready = 1; + + omap4_usbboot_puts("USB communications initialized\n"); return 0; } +core_initcall(omap4_usbboot_open); +int omap4_usbboot_ready(void){ + return omap4_usbboot_data.ready; +} static void rom_read_callback(struct per_handle *rh) { @@ -110,11 +117,13 @@ int omap4_usbboot_wait_read(void) omap4_usbboot_data.dread.status = -1; return ret; } + int omap4_usbboot_is_read_waiting(void) { barrier(); return omap4_usbboot_data.dread.status == STATUS_WAITING; } + int omap4_usbboot_is_read_ok(void) { barrier(); @@ -186,13 +195,3 @@ void omap4_usbboot_puts(const char *s) while ((c = *s++)) omap4_usbboot_write(&c, 4); } - -static int omap4_usbboot_init(void) -{ - if (omap4_bootsrc() == OMAP_BOOTSRC_USB1) { - omap4_usbboot_open(); - omap4_usbboot_puts("USB communications initialized\n"); - } - return 0; -} -core_initcall(omap4_usbboot_init); From 6dbb0383d0ecb55d4376913312a91b05af54e6b2 Mon Sep 17 00:00:00 2001 From: Vicente Bergas Date: Sun, 10 Mar 2013 00:19:42 +0100 Subject: [PATCH 04/14] archosg9: enable booting from sd-card Signed-off-by: Vicente Bergas Signed-off-by: Sascha Hauer --- arch/arm/boards/archosg9/board.c | 1 - .../boards/archosg9/env/boot/sd-card-android | 11 +++ .../boards/archosg9/env/boot/sd-card-linux | 17 +++++ arch/arm/boards/archosg9/env/boot/usb-android | 11 +++ arch/arm/boards/archosg9/env/boot/usb-linux | 17 +++++ arch/arm/boards/archosg9/env/config | 3 - arch/arm/boards/archosg9/env/init/automount | 28 ++++++++ arch/arm/boards/archosg9/env/init/bootsource | 11 +++ arch/arm/boards/archosg9/env/init/usbboot | 6 -- arch/arm/configs/archosg9_defconfig | 67 +++++++++++++------ arch/arm/configs/archosg9_xload_defconfig | 20 ++++-- 11 files changed, 155 insertions(+), 37 deletions(-) create mode 100644 arch/arm/boards/archosg9/env/boot/sd-card-android create mode 100644 arch/arm/boards/archosg9/env/boot/sd-card-linux create mode 100644 arch/arm/boards/archosg9/env/boot/usb-android create mode 100644 arch/arm/boards/archosg9/env/boot/usb-linux delete mode 100644 arch/arm/boards/archosg9/env/config create mode 100644 arch/arm/boards/archosg9/env/init/automount create mode 100644 arch/arm/boards/archosg9/env/init/bootsource delete mode 100644 arch/arm/boards/archosg9/env/init/usbboot diff --git a/arch/arm/boards/archosg9/board.c b/arch/arm/boards/archosg9/board.c index b954f1e4d..4c4f34951 100644 --- a/arch/arm/boards/archosg9/board.c +++ b/arch/arm/boards/archosg9/board.c @@ -52,7 +52,6 @@ static int archosg9_devices_init(void){ i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices)); omap44xx_add_i2c1(NULL); omap44xx_add_mmc1(NULL); - omap44xx_add_mmc2(NULL); armlinux_set_bootparams((void *)0x80000100); /* diff --git a/arch/arm/boards/archosg9/env/boot/sd-card-android b/arch/arm/boards/archosg9/env/boot/sd-card-android new file mode 100644 index 000000000..dc6f15e97 --- /dev/null +++ b/arch/arm/boards/archosg9/env/boot/sd-card-android @@ -0,0 +1,11 @@ +#!/bin/sh + +if [ "$1" = menu ]; then + boot-menu-add-entry "$0" "Android from SD card" "$2" + exit +fi + +path=/mnt/sd +global.bootm.image=${path}/android +global.bootm.initrd=${path}/initramfs.cpio.lzo +global.linux.bootargs.base="mem=512M init=/linuxrc debug omapdss.debug=0 omapfb.debug=0 mem=512M@0xa0000000" diff --git a/arch/arm/boards/archosg9/env/boot/sd-card-linux b/arch/arm/boards/archosg9/env/boot/sd-card-linux new file mode 100644 index 000000000..1ae7340cd --- /dev/null +++ b/arch/arm/boards/archosg9/env/boot/sd-card-linux @@ -0,0 +1,17 @@ +#!/bin/sh + +if [ "$1" = menu ]; then + boot-menu-add-entry "$0" "Linux from SD card" "$2" + exit +fi + +path=/mnt/sd +global.bootm.image=${path}/zImage +initrd=${path}/initrd + +if [ -f ${initrd} ]; then + global.bootm.initrd=${initrd} + global.linux.bootargs.base="console=ttyO0,115200n8 root=/dev/ram0" +else + global.linux.bootargs.base="console=ttyO0,115200n8 rootwait root=/dev/mmcblk0p2" +fi diff --git a/arch/arm/boards/archosg9/env/boot/usb-android b/arch/arm/boards/archosg9/env/boot/usb-android new file mode 100644 index 000000000..f7646812a --- /dev/null +++ b/arch/arm/boards/archosg9/env/boot/usb-android @@ -0,0 +1,11 @@ +#!/bin/sh + +if [ "$1" = menu ]; then + boot-menu-add-entry "$0" "Android from usb" "$2" + exit +fi + +path=/mnt/usb +global.bootm.image=${path}/android +global.bootm.initrd=${path}/initramfs.cpio.lzo +global.linux.bootargs.base="mem=512M init=/linuxrc debug omapdss.debug=0 omapfb.debug=0 mem=512M@0xa0000000" diff --git a/arch/arm/boards/archosg9/env/boot/usb-linux b/arch/arm/boards/archosg9/env/boot/usb-linux new file mode 100644 index 000000000..1d8e91979 --- /dev/null +++ b/arch/arm/boards/archosg9/env/boot/usb-linux @@ -0,0 +1,17 @@ +#!/bin/sh + +if [ "$1" = menu ]; then + boot-menu-add-entry "$0" "Linux from usb" "$2" + exit +fi + +path=/mnt/usb +global.bootm.image=${path}/zImage +initrd=${path}/initrd + +if [ -f ${initrd} ]; then + global.bootm.initrd=${initrd} + global.linux.bootargs.base="console=ttyO0,115200n8 root=/dev/ram0" +else + global.linux.bootargs.base="console=ttyO0,115200n8" +fi diff --git a/arch/arm/boards/archosg9/env/config b/arch/arm/boards/archosg9/env/config deleted file mode 100644 index 8f3edb0e5..000000000 --- a/arch/arm/boards/archosg9/env/config +++ /dev/null @@ -1,3 +0,0 @@ -global.bootm.image="${TARGET_ROOT}/boot/zImage" -global.bootm.initrd="${TARGET_ROOT}/boot/initrd" -global.linux.bootargs.base="console=ttyO0,115200n8 root=/dev/ram0" diff --git a/arch/arm/boards/archosg9/env/init/automount b/arch/arm/boards/archosg9/env/init/automount new file mode 100644 index 000000000..700b5e440 --- /dev/null +++ b/arch/arm/boards/archosg9/env/init/automount @@ -0,0 +1,28 @@ +#!/bin/sh + +if [ "$1" = menu ]; then + init-menu-add-entry "$0" "Automountpoints" + exit +fi + +# automount tftp server based on $eth0.serverip + +mkdir -p /mnt/tftp +automount /mnt/tftp 'ifup eth0 && mount -t tftp $eth0.serverip /mnt/tftp' + +# automount nfs server example + +#nfshost=somehost +#mkdir -p /mnt/${nfshost} +#automount /mnt/$nfshost "ifup eth0 && mount -t nfs ${nfshost}:/tftpboot /mnt/${nfshost}" + +# FAT on usb disk example + +#mkdir -p /mnt/fat +#automount -d /mnt/fat 'usb && [ -e /dev/disk0.0 ] && mount /dev/disk0.0 /mnt/fat' + +mkdir -p /mnt/sd +automount -d /mnt/sd 'mount /dev/disk0.0 /mnt/sd' + +mkdir -p /mnt/usb +automount -d /mnt/usb 'mount -t omap4_usbbootfs omap4_usbboot /mnt/usb' diff --git a/arch/arm/boards/archosg9/env/init/bootsource b/arch/arm/boards/archosg9/env/init/bootsource new file mode 100644 index 000000000..b3df447f8 --- /dev/null +++ b/arch/arm/boards/archosg9/env/init/bootsource @@ -0,0 +1,11 @@ +#!/bin/sh + +if [ -f /mnt/sd/zImage ]; then + global.boot.default=sd-card-linux +elif [ -f /mnt/sd/android ]; then + global.boot.default=sd-card-android +elif [ -f /mnt/usb/zImage ]; then + global.boot.default=usb-linux +elif [ -f /mnt/usb/android ]; then + global.boot.default=usb-android +fi diff --git a/arch/arm/boards/archosg9/env/init/usbboot b/arch/arm/boards/archosg9/env/init/usbboot deleted file mode 100644 index 83dd19a19..000000000 --- a/arch/arm/boards/archosg9/env/init/usbboot +++ /dev/null @@ -1,6 +0,0 @@ -TARGET_ROOT="/mnt/usb" -mkdir ${TARGET_ROOT} -mount -t omap4_usbbootfs omap4_usbboot ${TARGET_ROOT} -. /env/config -. ${TARGET_ROOT}/boot/config -bootm diff --git a/arch/arm/configs/archosg9_defconfig b/arch/arm/configs/archosg9_defconfig index 452d2ec47..cb0f6b24d 100644 --- a/arch/arm/configs/archosg9_defconfig +++ b/arch/arm/configs/archosg9_defconfig @@ -1,48 +1,56 @@ -CONFIG_MACH_ARCHOSG9=y CONFIG_ARCH_OMAP=y CONFIG_ARCH_OMAP4=y -CONFIG_AEABI=y +CONFIG_OMAP4_USBBOOT=y +CONFIG_MACH_ARCHOSG9=y +CONFIG_THUMB2_BAREBOX=y +CONFIG_CMD_ARM_MMUINFO=y +CONFIG_ARM_BOARD_APPEND_ATAG=y CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y CONFIG_ARM_UNWIND=y # CONFIG_MMU is not set -CONFIG_OMAP4_USBBOOT=y -CONFIG_TEXT_BASE=0xa0000000 -CONFIG_MALLOC_BASE=0x90000000 -CONFIG_MALLOC_SIZE=0x10000000 +CONFIG_TEXT_BASE=0x8f000000 +CONFIG_MALLOC_SIZE=0x2000000 +CONFIG_MALLOC_TLSF=y CONFIG_KALLSYMS=y -CONFIG_ARM_BOARD_APPEND_ATAG=y CONFIG_PROMPT="barebox> " CONFIG_LONGHELP=y -CONFIG_GLOB=y CONFIG_HUSH_FANCY_PROMPT=y CONFIG_CMDLINE_EDITING=y CONFIG_AUTO_COMPLETE=y -# CONFIG_CONSOLE_ACTIVATE_FIRST is not set -CONFIG_CONSOLE_ACTIVATE_ALL=y +CONFIG_MENU=y # CONFIG_TIMESTAMP is not set +CONFIG_CONSOLE_ACTIVATE_ALL=y CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y -CONFIG_DEFAULT_ENVIRONMENT_PATH="defaultenv-2 arch/arm/boards/archosg9/env" +CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/archosg9/env" CONFIG_CMD_EDIT=y CONFIG_CMD_SLEEP=y +CONFIG_CMD_MSLEEP=y CONFIG_CMD_SAVEENV=y CONFIG_CMD_EXPORT=y CONFIG_CMD_PRINTENV=y CONFIG_CMD_READLINE=y +CONFIG_CMD_MENU=y +CONFIG_CMD_MENU_MANAGEMENT=y CONFIG_CMD_TIME=y +CONFIG_CMD_DIRNAME=y +CONFIG_CMD_LN=y +CONFIG_CMD_READLINK=y +CONFIG_CMD_TFTP=y CONFIG_CMD_ECHO_E=y -CONFIG_CMD_LOADB=y +CONFIG_CMD_MEMINFO=y CONFIG_CMD_IOMEM=y -CONFIG_CMD_FLASH=y +CONFIG_CMD_CRC=y +CONFIG_CMD_CRC_CMP=y CONFIG_CMD_MD5SUM=y -CONFIG_CMD_SHA1SUM=y -CONFIG_CMD_SHA224SUM=y -CONFIG_CMD_SHA256SUM=y +CONFIG_CMD_FLASH=y CONFIG_CMD_BOOTM_SHOW_TYPE=y CONFIG_CMD_BOOTM_VERBOSE=y CONFIG_CMD_BOOTM_INITRD=y CONFIG_CMD_BOOTM_OFTREE=y CONFIG_CMD_BOOTM_OFTREE_UIMAGE=y CONFIG_CMD_BOOTM_AIMAGE=y +CONFIG_CMD_UIMAGE=y +# CONFIG_CMD_BOOTU is not set CONFIG_CMD_RESET=y CONFIG_CMD_GO=y CONFIG_CMD_TIMEOUT=y @@ -52,19 +60,36 @@ CONFIG_CMD_MAGICVAR_HELP=y CONFIG_CMD_GPIO=y CONFIG_CMD_UNCOMPRESS=y CONFIG_CMD_I2C=y -CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT=y +CONFIG_CMD_LED=y +CONFIG_CMD_LED_TRIGGER=y +CONFIG_CMD_MIITOOL=y +CONFIG_NET=y +CONFIG_NET_DHCP=y +CONFIG_NET_PING=y +CONFIG_NET_NETCONSOLE=y +CONFIG_NET_RESOLV=y CONFIG_DRIVER_SERIAL_NS16550=y CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y -CONFIG_BAUDRATE=115200 +CONFIG_NET_USB=y +CONFIG_NET_USB_SMSC95XX=y +CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT=y # CONFIG_SPI is not set CONFIG_I2C=y CONFIG_I2C_OMAP=y -CONFIG_MFD_TWLCORE=y -CONFIG_MFD_TWL6030=y +CONFIG_USB=y +CONFIG_USB_EHCI=y CONFIG_MCI=y CONFIG_MCI_STARTUP=y CONFIG_MCI_OMAP_HSMMC=y +CONFIG_LED=y +CONFIG_LED_GPIO=y +CONFIG_LED_TRIGGERS=y +CONFIG_FS_TFTP=y +CONFIG_FS_NFS=y +CONFIG_MFD_TWL6030=y +CONFIG_FS_OMAP4_USBBOOT=y CONFIG_FS_FAT=y CONFIG_FS_FAT_WRITE=y CONFIG_FS_FAT_LFN=y -CONFIG_FS_OMAP4_USBBOOT=y +CONFIG_ZLIB=y +CONFIG_LZO_DECOMPRESS=y diff --git a/arch/arm/configs/archosg9_xload_defconfig b/arch/arm/configs/archosg9_xload_defconfig index 83743fa94..24369b28a 100644 --- a/arch/arm/configs/archosg9_xload_defconfig +++ b/arch/arm/configs/archosg9_xload_defconfig @@ -1,24 +1,32 @@ -CONFIG_MACH_ARCHOSG9=y CONFIG_ARCH_OMAP=y +CONFIG_BAREBOX_MAX_IMAGE_SIZE=0xC000 CONFIG_ARCH_OMAP4=y # CONFIG_OMAP_GPMC is not set CONFIG_OMAP_BUILD_IFT=y -CONFIG_BAREBOX_MAX_IMAGE_SIZE=0xC000 -CONFIG_AEABI=y CONFIG_OMAP4_USBBOOT=y +CONFIG_MACH_ARCHOSG9=y +CONFIG_THUMB2_BAREBOX=y # CONFIG_CMD_ARM_CPUINFO is not set +# CONFIG_MMU is not set +# CONFIG_BANNER is not set +# CONFIG_MEMINFO is not set CONFIG_TEXT_BASE=0x40300000 -CONFIG_MEMORY_LAYOUT_FIXED=y -CONFIG_STACK_BASE=0x8f000000 -CONFIG_MALLOC_BASE=0x84000000 CONFIG_MALLOC_SIZE=0x2000000 CONFIG_SHELL_NONE=y # CONFIG_ERRNO_MESSAGES is not set # CONFIG_TIMESTAMP is not set CONFIG_CONSOLE_SIMPLE=y # CONFIG_DEFAULT_ENVIRONMENT is not set +CONFIG_DRIVER_SERIAL_NS16550=y +CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT=y # CONFIG_SPI is not set +# CONFIG_DISK_WRITE is not set +CONFIG_MCI=y +CONFIG_MCI_STARTUP=y +# CONFIG_MCI_WRITE is not set +CONFIG_MCI_OMAP_HSMMC=y # CONFIG_FS_RAMFS is not set # CONFIG_FS_DEVFS is not set CONFIG_FS_OMAP4_USBBOOT=y +CONFIG_FS_FAT=y From c9f6ceb59e06c49bbfba8f2ca9902cadcdaf3a78 Mon Sep 17 00:00:00 2001 From: Vicente Bergas Date: Sun, 10 Mar 2013 00:19:37 +0100 Subject: [PATCH 05/14] omap_uart: add low level port serial initialization some sort of UART setup has to be done in order to use PUTC_LL Signed-off-by: Vicente Bergas Signed-off-by: Sascha Hauer --- arch/arm/mach-omap/include/mach/debug_ll.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/arch/arm/mach-omap/include/mach/debug_ll.h b/arch/arm/mach-omap/include/mach/debug_ll.h index ed1777b55..3125fd39e 100644 --- a/arch/arm/mach-omap/include/mach/debug_ll.h +++ b/arch/arm/mach-omap/include/mach/debug_ll.h @@ -41,9 +41,30 @@ #endif #define LSR_THRE 0x20 /* Xmit holding register empty */ +#define LCR_BKSE 0x80 /* Bank select enable */ #define LSR (5 << 2) #define THR (0 << 2) +#define DLL (0 << 2) +#define IER (1 << 2) +#define DLM (1 << 2) +#define FCR (2 << 2) +#define LCR (3 << 2) +#define MCR (4 << 2) +#define MDR (8 << 2) +static inline void INIT_LL(void) +{ + writeb(0x00, UART_BASE + LCR); + writeb(0x00, UART_BASE + IER); + writeb(0x07, UART_BASE + MDR); + writeb(LCR_BKSE, UART_BASE + LCR); + writeb(26, UART_BASE + DLL); /* 115200 */ + writeb(0, UART_BASE + DLM); + writeb(0x03, UART_BASE + LCR); + writeb(0x03, UART_BASE + MCR); + writeb(0x07, UART_BASE + FCR); + writeb(0x00, UART_BASE + MDR); +} static inline void PUTC_LL(char c) { /* Wait until there is space in the FIFO */ From dfd768b3ac65d3666933779091ab3056960b8e9f Mon Sep 17 00:00:00 2001 From: Vicente Bergas Date: Sun, 10 Mar 2013 00:19:36 +0100 Subject: [PATCH 06/14] omap_uart: rename OMAP3EVM_UARTx to OMAP_UARTx use a more generic UART selection on OMAP so it can be extended to other OMAPs Signed-off-by: Vicente Bergas Signed-off-by: Sascha Hauer --- arch/arm/boards/omap3evm/board.c | 4 ++-- arch/arm/boards/omap3evm/lowlevel.c | 4 ++-- arch/arm/mach-omap/Kconfig | 11 ++++++----- arch/arm/mach-omap/include/mach/debug_ll.h | 6 +++++- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/arch/arm/boards/omap3evm/board.c b/arch/arm/boards/omap3evm/board.c index 758554129..7284f5f88 100644 --- a/arch/arm/boards/omap3evm/board.c +++ b/arch/arm/boards/omap3evm/board.c @@ -62,9 +62,9 @@ */ static int omap3evm_init_console(void) { - if (IS_ENABLED(CONFIG_OMAP3EVM_UART1)) + if (IS_ENABLED(CONFIG_OMAP_UART1)) omap3_add_uart1(); - if (IS_ENABLED(CONFIG_OMAP3EVM_UART3)) + if (IS_ENABLED(CONFIG_OMAP_UART3)) omap3_add_uart3(); return 0; diff --git a/arch/arm/boards/omap3evm/lowlevel.c b/arch/arm/boards/omap3evm/lowlevel.c index 74e13152e..2d9e1301d 100644 --- a/arch/arm/boards/omap3evm/lowlevel.c +++ b/arch/arm/boards/omap3evm/lowlevel.c @@ -122,12 +122,12 @@ static void mux_config(void) /* * Serial Interface */ -#if defined(CONFIG_OMAP3EVM_UART1) +#if defined(CONFIG_OMAP_UART1) MUX_VAL(CP(UART1_TX), (IDIS | PTD | DIS | M0)); MUX_VAL(CP(UART1_RTS), (IDIS | PTD | DIS | M0)); MUX_VAL(CP(UART1_CTS), (IEN | PTU | DIS | M0)); MUX_VAL(CP(UART1_RX), (IEN | PTD | DIS | M0)); -#elif defined(CONFIG_OMAP3EVM_UART3) +#elif defined(CONFIG_OMAP_UART3) MUX_VAL(CP(UART3_CTS_RCTX), (IEN | PTD | EN | M0)); MUX_VAL(CP(UART3_RTS_SD), (IDIS | PTD | DIS | M0)); MUX_VAL(CP(UART3_RX_IRRX), (IEN | PTD | DIS | M0)); diff --git a/arch/arm/mach-omap/Kconfig b/arch/arm/mach-omap/Kconfig index a87fc4bb6..42e5f4af0 100644 --- a/arch/arm/mach-omap/Kconfig +++ b/arch/arm/mach-omap/Kconfig @@ -187,20 +187,21 @@ config MACH_PCM051 endchoice -if MACH_OMAP3EVM +if ARCH_OMAP choice prompt "Select UART" + default OMAP_UART3 - config OMAP3EVM_UART1 + config OMAP_UART1 bool "Use UART1" - depends on MACH_OMAP3EVM + depends on ARCH_OMAP help Say Y here if you would like to use UART1 as console. - config OMAP3EVM_UART3 + config OMAP_UART3 bool "Use UART3" - depends on MACH_OMAP3EVM + depends on ARCH_OMAP help Say Y here if you would like to use UART3 as console. diff --git a/arch/arm/mach-omap/include/mach/debug_ll.h b/arch/arm/mach-omap/include/mach/debug_ll.h index 3125fd39e..38ca56203 100644 --- a/arch/arm/mach-omap/include/mach/debug_ll.h +++ b/arch/arm/mach-omap/include/mach/debug_ll.h @@ -22,7 +22,7 @@ #ifdef CONFIG_ARCH_OMAP3 #include -#ifdef CONFIG_OMAP3EVM_UART1 +#ifdef CONFIG_OMAP_UART1 #define UART_BASE OMAP3_UART1_BASE #else #define UART_BASE OMAP3_UART3_BASE @@ -32,8 +32,12 @@ #ifdef CONFIG_ARCH_OMAP4 #include +#ifdef CONFIG_OMAP_UART1 +#define UART_BASE OMAP44XX_UART1_BASE +#else #define UART_BASE OMAP44XX_UART3_BASE #endif +#endif #ifdef CONFIG_ARCH_AM33XX #include From 4b6cd0ee4bb07bc3d26f808e180b66fd8f463c17 Mon Sep 17 00:00:00 2001 From: Vicente Bergas Date: Tue, 12 Mar 2013 01:01:23 +0100 Subject: [PATCH 07/14] twl6030: add power button as an input key Signed-off-by: Vicente Bergas Signed-off-by: Sascha Hauer --- drivers/input/Kconfig | 7 +++ drivers/input/Makefile | 1 + drivers/input/twl6030_pwrbtn.c | 108 +++++++++++++++++++++++++++++++++ include/twl6030_pwrbtn.h | 9 +++ 4 files changed, 125 insertions(+) create mode 100644 drivers/input/twl6030_pwrbtn.c create mode 100644 include/twl6030_pwrbtn.h diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig index a6f1f47f8..3d9016b3f 100644 --- a/drivers/input/Kconfig +++ b/drivers/input/Kconfig @@ -38,4 +38,11 @@ config KEYBOARD_QT1070 Say Y here if you want to use Atmel AT42QT1070 QTouch Sensor chip as input device. +config KEYBOARD_TWL6030 + tristate "TWL6030 power button" + depends on MFD_TWL6030 + select POLLER + help + Say Y here if you want to use TWL6030 power button as a key. + endmenu diff --git a/drivers/input/Makefile b/drivers/input/Makefile index d042980b1..b9bcc8275 100644 --- a/drivers/input/Makefile +++ b/drivers/input/Makefile @@ -1,3 +1,4 @@ obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o +obj-$(CONFIG_KEYBOARD_TWL6030) += twl6030_pwrbtn.o obj-$(CONFIG_KEYBOARD_IMX_KEYPAD) += imx_keypad.o obj-$(CONFIG_KEYBOARD_QT1070) += qt1070.o diff --git a/drivers/input/twl6030_pwrbtn.c b/drivers/input/twl6030_pwrbtn.c new file mode 100644 index 000000000..ca51dee60 --- /dev/null +++ b/drivers/input/twl6030_pwrbtn.c @@ -0,0 +1,108 @@ +/* + * 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. + */ + +#include +#include +#include +#include +#include +#include +#include + +struct twl6030_pwrbtn_internal_data { + int code; + u8 previous_state; + struct twl6030 *twl6030; + struct kfifo *recv_fifo; + struct console_device cdev; + struct poller_struct poller; +}; + +#define PWR_PWRON_IRQ (1 << 0) + +static void ic2_key_poller(struct poller_struct *poller) +{ + struct twl6030_pwrbtn_internal_data *idata = container_of( + poller, struct twl6030_pwrbtn_internal_data, poller); + u8 val; + + if (twl6030_reg_read(idata->twl6030, TWL6030_PMCM_HW, &val)) { + dev_err(idata->cdev.dev, "reading i2c\n"); + return; + } + val = !(val & PWR_PWRON_IRQ); + if (val != idata->previous_state && val) { + kfifo_put(idata->recv_fifo, (u_char *)&idata->code, + sizeof(int)); + dev_dbg(idata->cdev.dev, "pressed power button as %d\n", + idata->code); + } + idata->previous_state = val; +} + +static int twl6030_pwrbtn_tstc(struct console_device *cdev) +{ + struct twl6030_pwrbtn_internal_data *idata = container_of( + cdev, struct twl6030_pwrbtn_internal_data, cdev); + + return kfifo_len(idata->recv_fifo) ? 1 : 0; +} + +static int twl6030_pwrbtn_getc(struct console_device *cdev) +{ + int code = 0; + struct twl6030_pwrbtn_internal_data *idata = container_of( + cdev, struct twl6030_pwrbtn_internal_data, cdev); + + kfifo_get(idata->recv_fifo, (u_char *)&code, sizeof(int)); + return code; +} + +static int __init twl6030_pwrbtn_probe(struct device_d *dev) +{ + struct twl6030_pwrbtn_internal_data *idata; + struct twl6030_pwrbtn_platform_data *pdata; + + pdata = dev->platform_data; + if (!pdata) { + dev_err(dev, "missing platform_data\n"); + return -ENODEV; + } + + idata = xzalloc(sizeof(struct twl6030_pwrbtn_internal_data)); + + idata->recv_fifo = kfifo_alloc(sizeof(int)); + if (!idata->recv_fifo) { + dev_err(dev, "out of memory allocating kfifo\n"); + free(idata); + return -ENOMEM; + } + + idata->code = pdata->code; + idata->twl6030 = twl6030_get(); + idata->poller.func = ic2_key_poller; + + dev->type_data = &idata->cdev; + idata->cdev.dev = dev; + idata->cdev.f_caps = CONSOLE_STDIN; + idata->cdev.tstc = twl6030_pwrbtn_tstc; + idata->cdev.getc = twl6030_pwrbtn_getc; + console_register(&idata->cdev); + + return poller_register(&idata->poller); +} + +static struct driver_d twl6030_pwrbtn_driver = { + .name = "twl6030_pwrbtn", + .probe = twl6030_pwrbtn_probe, +}; +device_platform_driver(twl6030_pwrbtn_driver); diff --git a/include/twl6030_pwrbtn.h b/include/twl6030_pwrbtn.h new file mode 100644 index 000000000..c4e13d1f1 --- /dev/null +++ b/include/twl6030_pwrbtn.h @@ -0,0 +1,9 @@ +#ifndef _TWL6030_PWRBTN_H +#define _TWL6030_PWRBTN_H + +struct twl6030_pwrbtn_platform_data { + /* key code */ + int code; +}; + +#endif From 653972a15074d6669162cb86b6b2fa5b079f1d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teresa=20G=C3=A1mez?= Date: Tue, 12 Mar 2013 15:04:12 +0100 Subject: [PATCH 08/14] AM33XX: Move muxing defines to header file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The muxing in the am33xx_mux.c file is not generic as the muxing setup does not fit for every board. Move the structs and functions to the mach/am33xx-mux.h so board dependend mux setups can be created. Signed-off-by: Teresa Gámez Signed-off-by: Sascha Hauer --- arch/arm/boards/beaglebone/board.c | 4 +- arch/arm/boards/beaglebone/lowlevel.c | 2 +- arch/arm/boards/pcm051/board.c | 2 +- arch/arm/mach-omap/am33xx_mux.c | 246 +------------------ arch/arm/mach-omap/include/mach/am33xx-mux.h | 246 ++++++++++++++++++- 5 files changed, 252 insertions(+), 248 deletions(-) diff --git a/arch/arm/boards/beaglebone/board.c b/arch/arm/boards/beaglebone/board.c index e4b8b0a99..70c60705b 100644 --- a/arch/arm/boards/beaglebone/board.c +++ b/arch/arm/boards/beaglebone/board.c @@ -95,7 +95,7 @@ static void beaglebone_eth_init(void) writel(0, AM33XX_MAC_MII_SEL); - enable_mii1_pin_mux(); + am33xx_enable_mii1_pin_mux(); am33xx_add_cpsw(&cpsw_data); } @@ -104,7 +104,7 @@ static int beaglebone_devices_init(void) { am33xx_add_mmc0(NULL); - enable_i2c0_pin_mux(); + am33xx_enable_i2c0_pin_mux(); beaglebone_eth_init(); armlinux_set_bootparams((void *)0x80000100); diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c index 76ac90b32..a9737d9f9 100644 --- a/arch/arm/boards/beaglebone/lowlevel.c +++ b/arch/arm/boards/beaglebone/lowlevel.c @@ -243,7 +243,7 @@ static int beaglebone_board_init(void) beaglebone_sram_init(); /* Enable pin mux */ - enable_uart0_pin_mux(); + am33xx_enable_uart0_pin_mux(); return 0; } diff --git a/arch/arm/boards/pcm051/board.c b/arch/arm/boards/pcm051/board.c index 9739a2cb9..a38d844b7 100644 --- a/arch/arm/boards/pcm051/board.c +++ b/arch/arm/boards/pcm051/board.c @@ -52,7 +52,7 @@ mem_initcall(pcm051_mem_init); static int pcm051_devices_init(void) { - enable_mmc0_pin_mux(); + am33xx_enable_mmc0_pin_mux(); am33xx_add_mmc0(NULL); diff --git a/arch/arm/mach-omap/am33xx_mux.c b/arch/arm/mach-omap/am33xx_mux.c index 3d7f24588..36fe3792d 100644 --- a/arch/arm/mach-omap/am33xx_mux.c +++ b/arch/arm/mach-omap/am33xx_mux.c @@ -15,242 +15,12 @@ #include #include #include +#include #include #define MUX_CFG(value, offset) \ __raw_writel(value, (AM33XX_CTRL_BASE + offset)); -/* PAD Control Fields */ -#define SLEWCTRL (0x1 << 6) -#define RXACTIVE (0x1 << 5) -#define PULLUP_EN (0x1 << 4) /* Pull UP Selection */ -#define PULLUDEN (0x0 << 3) /* Pull up enabled */ -#define PULLUDDIS (0x1 << 3) /* Pull up disabled */ -#define MODE(val) val - -/* - * PAD CONTROL OFFSETS - * Field names corresponds to the pad signal name - */ -/* TODO replace with defines */ -struct pad_signals { - int gpmc_ad0; - int gpmc_ad1; - int gpmc_ad2; - int gpmc_ad3; - int gpmc_ad4; - int gpmc_ad5; - int gpmc_ad6; - int gpmc_ad7; - int gpmc_ad8; - int gpmc_ad9; - int gpmc_ad10; - int gpmc_ad11; - int gpmc_ad12; - int gpmc_ad13; - int gpmc_ad14; - int gpmc_ad15; - int gpmc_a0; - int gpmc_a1; - int gpmc_a2; - int gpmc_a3; - int gpmc_a4; - int gpmc_a5; - int gpmc_a6; - int gpmc_a7; - int gpmc_a8; - int gpmc_a9; - int gpmc_a10; - int gpmc_a11; - int gpmc_wait0; - int gpmc_wpn; - int gpmc_be1n; - int gpmc_csn0; - int gpmc_csn1; - int gpmc_csn2; - int gpmc_csn3; - int gpmc_clk; - int gpmc_advn_ale; - int gpmc_oen_ren; - int gpmc_wen; - int gpmc_be0n_cle; - int lcd_data0; - int lcd_data1; - int lcd_data2; - int lcd_data3; - int lcd_data4; - int lcd_data5; - int lcd_data6; - int lcd_data7; - int lcd_data8; - int lcd_data9; - int lcd_data10; - int lcd_data11; - int lcd_data12; - int lcd_data13; - int lcd_data14; - int lcd_data15; - int lcd_vsync; - int lcd_hsync; - int lcd_pclk; - int lcd_ac_bias_en; - int mmc0_dat3; - int mmc0_dat2; - int mmc0_dat1; - int mmc0_dat0; - int mmc0_clk; - int mmc0_cmd; - int mii1_col; - int mii1_crs; - int mii1_rxerr; - int mii1_txen; - int mii1_rxdv; - int mii1_txd3; - int mii1_txd2; - int mii1_txd1; - int mii1_txd0; - int mii1_txclk; - int mii1_rxclk; - int mii1_rxd3; - int mii1_rxd2; - int mii1_rxd1; - int mii1_rxd0; - int rmii1_refclk; - int mdio_data; - int mdio_clk; - int spi0_sclk; - int spi0_d0; - int spi0_d1; - int spi0_cs0; - int spi0_cs1; - int ecap0_in_pwm0_out; - int uart0_ctsn; - int uart0_rtsn; - int uart0_rxd; - int uart0_txd; - int uart1_ctsn; - int uart1_rtsn; - int uart1_rxd; - int uart1_txd; - int i2c0_sda; - int i2c0_scl; - int mcasp0_aclkx; - int mcasp0_fsx; - int mcasp0_axr0; - int mcasp0_ahclkr; - int mcasp0_aclkr; - int mcasp0_fsr; - int mcasp0_axr1; - int mcasp0_ahclkx; - int xdma_event_intr0; - int xdma_event_intr1; - int nresetin_out; - int porz; - int nnmi; - int osc0_in; - int osc0_out; - int rsvd1; - int tms; - int tdi; - int tdo; - int tck; - int ntrst; - int emu0; - int emu1; - int osc1_in; - int osc1_out; - int pmic_power_en; - int rtc_porz; - int rsvd2; - int ext_wakeup; - int enz_kaldo_1p8v; - int usb0_dm; - int usb0_dp; - int usb0_ce; - int usb0_id; - int usb0_vbus; - int usb0_drvvbus; - int usb1_dm; - int usb1_dp; - int usb1_ce; - int usb1_id; - int usb1_vbus; - int usb1_drvvbus; - int ddr_resetn; - int ddr_csn0; - int ddr_cke; - int ddr_ck; - int ddr_nck; - int ddr_casn; - int ddr_rasn; - int ddr_wen; - int ddr_ba0; - int ddr_ba1; - int ddr_ba2; - int ddr_a0; - int ddr_a1; - int ddr_a2; - int ddr_a3; - int ddr_a4; - int ddr_a5; - int ddr_a6; - int ddr_a7; - int ddr_a8; - int ddr_a9; - int ddr_a10; - int ddr_a11; - int ddr_a12; - int ddr_a13; - int ddr_a14; - int ddr_a15; - int ddr_odt; - int ddr_d0; - int ddr_d1; - int ddr_d2; - int ddr_d3; - int ddr_d4; - int ddr_d5; - int ddr_d6; - int ddr_d7; - int ddr_d8; - int ddr_d9; - int ddr_d10; - int ddr_d11; - int ddr_d12; - int ddr_d13; - int ddr_d14; - int ddr_d15; - int ddr_dqm0; - int ddr_dqm1; - int ddr_dqs0; - int ddr_dqsn0; - int ddr_dqs1; - int ddr_dqsn1; - int ddr_vref; - int ddr_vtp; - int ddr_strben0; - int ddr_strben1; - int ain7; - int ain6; - int ain5; - int ain4; - int ain3; - int ain2; - int ain1; - int ain0; - int vrefp; - int vrefn; -}; - -struct module_pin_mux { - short reg_offset; - unsigned char val; -}; - -#define PAD_CTRL_BASE 0x800 -#define OFFSET(x) (unsigned int) (&((struct pad_signals *) \ - (PAD_CTRL_BASE))->x) - static const __maybe_unused struct module_pin_mux uart0_pin_mux[] = { {OFFSET(uart0_rxd), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* UART0_RXD */ {OFFSET(uart0_txd), (MODE(0) | PULLUDEN)}, /* UART0_TXD */ @@ -469,7 +239,7 @@ static const __maybe_unused struct module_pin_mux spi1_pin_mux[] = { /* * Configure the pin mux for the module */ -static void configure_module_pin_mux(const struct module_pin_mux *mod_pin_mux) +void configure_module_pin_mux(const struct module_pin_mux *mod_pin_mux) { int i; @@ -480,32 +250,32 @@ static void configure_module_pin_mux(const struct module_pin_mux *mod_pin_mux) MUX_CFG(mod_pin_mux[i].val, mod_pin_mux[i].reg_offset); } -void enable_mii1_pin_mux(void) +void am33xx_enable_mii1_pin_mux(void) { configure_module_pin_mux(mii1_pin_mux); } -void enable_i2c0_pin_mux(void) +void am33xx_enable_i2c0_pin_mux(void) { configure_module_pin_mux(i2c0_pin_mux); } -void enable_i2c1_pin_mux(void) +void am33xx_enable_i2c1_pin_mux(void) { configure_module_pin_mux(i2c1_pin_mux); } -void enable_i2c2_pin_mux(void) +void am33xx_enable_i2c2_pin_mux(void) { configure_module_pin_mux(i2c2_pin_mux); } -void enable_uart0_pin_mux(void) +void am33xx_enable_uart0_pin_mux(void) { configure_module_pin_mux(uart0_pin_mux); } -void enable_mmc0_pin_mux(void) +void am33xx_enable_mmc0_pin_mux(void) { configure_module_pin_mux(mmc0_pin_mux); } diff --git a/arch/arm/mach-omap/include/mach/am33xx-mux.h b/arch/arm/mach-omap/include/mach/am33xx-mux.h index 6078b3aae..896e9588e 100644 --- a/arch/arm/mach-omap/include/mach/am33xx-mux.h +++ b/arch/arm/mach-omap/include/mach/am33xx-mux.h @@ -13,11 +13,245 @@ #ifndef __AM33XX_MUX_H__ #define __AM33XX_MUX_H__ -extern void enable_mii1_pin_mux(void); -extern void enable_i2c0_pin_mux(void); -extern void enable_i2c1_pin_mux(void); -extern void enable_i2c2_pin_mux(void); -extern void enable_uart0_pin_mux(void); -extern void enable_mmc0_pin_mux(void); +/* PAD Control Fields */ +#define SLEWCTRL (0x1 << 6) +#define RXACTIVE (0x1 << 5) +#define PULLUP_EN (0x1 << 4) /* Pull UP Selection */ +#define PULLUDEN (0x0 << 3) /* Pull up enabled */ +#define PULLUDDIS (0x1 << 3) /* Pull up disabled */ +#define MODE(val) val + +/* + * PAD CONTROL OFFSETS + * Field names corresponds to the pad signal name + */ +/* TODO replace with defines */ +struct pad_signals { + int gpmc_ad0; + int gpmc_ad1; + int gpmc_ad2; + int gpmc_ad3; + int gpmc_ad4; + int gpmc_ad5; + int gpmc_ad6; + int gpmc_ad7; + int gpmc_ad8; + int gpmc_ad9; + int gpmc_ad10; + int gpmc_ad11; + int gpmc_ad12; + int gpmc_ad13; + int gpmc_ad14; + int gpmc_ad15; + int gpmc_a0; + int gpmc_a1; + int gpmc_a2; + int gpmc_a3; + int gpmc_a4; + int gpmc_a5; + int gpmc_a6; + int gpmc_a7; + int gpmc_a8; + int gpmc_a9; + int gpmc_a10; + int gpmc_a11; + int gpmc_wait0; + int gpmc_wpn; + int gpmc_be1n; + int gpmc_csn0; + int gpmc_csn1; + int gpmc_csn2; + int gpmc_csn3; + int gpmc_clk; + int gpmc_advn_ale; + int gpmc_oen_ren; + int gpmc_wen; + int gpmc_be0n_cle; + int lcd_data0; + int lcd_data1; + int lcd_data2; + int lcd_data3; + int lcd_data4; + int lcd_data5; + int lcd_data6; + int lcd_data7; + int lcd_data8; + int lcd_data9; + int lcd_data10; + int lcd_data11; + int lcd_data12; + int lcd_data13; + int lcd_data14; + int lcd_data15; + int lcd_vsync; + int lcd_hsync; + int lcd_pclk; + int lcd_ac_bias_en; + int mmc0_dat3; + int mmc0_dat2; + int mmc0_dat1; + int mmc0_dat0; + int mmc0_clk; + int mmc0_cmd; + int mii1_col; + int mii1_crs; + int mii1_rxerr; + int mii1_txen; + int mii1_rxdv; + int mii1_txd3; + int mii1_txd2; + int mii1_txd1; + int mii1_txd0; + int mii1_txclk; + int mii1_rxclk; + int mii1_rxd3; + int mii1_rxd2; + int mii1_rxd1; + int mii1_rxd0; + int rmii1_refclk; + int mdio_data; + int mdio_clk; + int spi0_sclk; + int spi0_d0; + int spi0_d1; + int spi0_cs0; + int spi0_cs1; + int ecap0_in_pwm0_out; + int uart0_ctsn; + int uart0_rtsn; + int uart0_rxd; + int uart0_txd; + int uart1_ctsn; + int uart1_rtsn; + int uart1_rxd; + int uart1_txd; + int i2c0_sda; + int i2c0_scl; + int mcasp0_aclkx; + int mcasp0_fsx; + int mcasp0_axr0; + int mcasp0_ahclkr; + int mcasp0_aclkr; + int mcasp0_fsr; + int mcasp0_axr1; + int mcasp0_ahclkx; + int xdma_event_intr0; + int xdma_event_intr1; + int nresetin_out; + int porz; + int nnmi; + int osc0_in; + int osc0_out; + int rsvd1; + int tms; + int tdi; + int tdo; + int tck; + int ntrst; + int emu0; + int emu1; + int osc1_in; + int osc1_out; + int pmic_power_en; + int rtc_porz; + int rsvd2; + int ext_wakeup; + int enz_kaldo_1p8v; + int usb0_dm; + int usb0_dp; + int usb0_ce; + int usb0_id; + int usb0_vbus; + int usb0_drvvbus; + int usb1_dm; + int usb1_dp; + int usb1_ce; + int usb1_id; + int usb1_vbus; + int usb1_drvvbus; + int ddr_resetn; + int ddr_csn0; + int ddr_cke; + int ddr_ck; + int ddr_nck; + int ddr_casn; + int ddr_rasn; + int ddr_wen; + int ddr_ba0; + int ddr_ba1; + int ddr_ba2; + int ddr_a0; + int ddr_a1; + int ddr_a2; + int ddr_a3; + int ddr_a4; + int ddr_a5; + int ddr_a6; + int ddr_a7; + int ddr_a8; + int ddr_a9; + int ddr_a10; + int ddr_a11; + int ddr_a12; + int ddr_a13; + int ddr_a14; + int ddr_a15; + int ddr_odt; + int ddr_d0; + int ddr_d1; + int ddr_d2; + int ddr_d3; + int ddr_d4; + int ddr_d5; + int ddr_d6; + int ddr_d7; + int ddr_d8; + int ddr_d9; + int ddr_d10; + int ddr_d11; + int ddr_d12; + int ddr_d13; + int ddr_d14; + int ddr_d15; + int ddr_dqm0; + int ddr_dqm1; + int ddr_dqs0; + int ddr_dqsn0; + int ddr_dqs1; + int ddr_dqsn1; + int ddr_vref; + int ddr_vtp; + int ddr_strben0; + int ddr_strben1; + int ain7; + int ain6; + int ain5; + int ain4; + int ain3; + int ain2; + int ain1; + int ain0; + int vrefp; + int vrefn; +}; + +struct module_pin_mux { + short reg_offset; + unsigned char val; +}; + +#define PAD_CTRL_BASE 0x800 +#define OFFSET(x) (unsigned int) (&((struct pad_signals *) \ + (PAD_CTRL_BASE))->x) + +extern void configure_module_pin_mux(const struct module_pin_mux *mod_pin_mux); + +/* Standard mux settings */ +extern void am33xx_enable_mii1_pin_mux(void); +extern void am33xx_enable_i2c0_pin_mux(void); +extern void am33xx_enable_i2c1_pin_mux(void); +extern void am33xx_enable_i2c2_pin_mux(void); +extern void am33xx_enable_uart0_pin_mux(void); +extern void am33xx_enable_mmc0_pin_mux(void); #endif /*__AM33XX_MUX_H__ */ From f8c48493f2f23b4fd95a677d8e128f78ca0f4c0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teresa=20G=C3=A1mez?= Date: Tue, 12 Mar 2013 15:04:13 +0100 Subject: [PATCH 09/14] AM33XX: pcm051: Create custom mux file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The pcm051 has no MMC WP pin. This pin is used for a gpio and needs to be muxed different. Created a custom mux file for this case. Signed-off-by: Teresa Gámez Signed-off-by: Sascha Hauer --- arch/arm/boards/pcm051/Makefile | 2 +- arch/arm/boards/pcm051/board.c | 4 +++- arch/arm/boards/pcm051/mux.c | 20 ++++++++++++++++++++ arch/arm/boards/pcm051/mux.h | 1 + 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 arch/arm/boards/pcm051/mux.c create mode 100644 arch/arm/boards/pcm051/mux.h diff --git a/arch/arm/boards/pcm051/Makefile b/arch/arm/boards/pcm051/Makefile index 092c31d6b..69d48e134 100644 --- a/arch/arm/boards/pcm051/Makefile +++ b/arch/arm/boards/pcm051/Makefile @@ -1,2 +1,2 @@ lwl-y += lowlevel.o -obj-y += board.o +obj-y += board.o mux.o diff --git a/arch/arm/boards/pcm051/board.c b/arch/arm/boards/pcm051/board.c index a38d844b7..8754ba5f1 100644 --- a/arch/arm/boards/pcm051/board.c +++ b/arch/arm/boards/pcm051/board.c @@ -27,6 +27,8 @@ #include #include +#include "mux.h" + /** * @brief UART serial port initialization * arch @@ -52,7 +54,7 @@ mem_initcall(pcm051_mem_init); static int pcm051_devices_init(void) { - am33xx_enable_mmc0_pin_mux(); + pcm051_enable_mmc0_pin_mux(); am33xx_add_mmc0(NULL); diff --git a/arch/arm/boards/pcm051/mux.c b/arch/arm/boards/pcm051/mux.c new file mode 100644 index 000000000..b8fb66956 --- /dev/null +++ b/arch/arm/boards/pcm051/mux.c @@ -0,0 +1,20 @@ +#include +#include +#include +#include + +static const struct module_pin_mux mmc0_pin_mux[] = { + {OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT3 */ + {OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT2 */ + {OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT1 */ + {OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT0 */ + {OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CLK */ + {OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CMD */ + {OFFSET(spi0_cs1), (MODE(5) | RXACTIVE | PULLUP_EN)}, /* MMC0_CD */ + {-1}, +}; + +void pcm051_enable_mmc0_pin_mux(void) +{ + configure_module_pin_mux(mmc0_pin_mux); +} diff --git a/arch/arm/boards/pcm051/mux.h b/arch/arm/boards/pcm051/mux.h new file mode 100644 index 000000000..f35bc9e04 --- /dev/null +++ b/arch/arm/boards/pcm051/mux.h @@ -0,0 +1 @@ +extern void pcm051_enable_mmc0_pin_mux(void); From a3fd4dbf8001edae7f037c6d1e686f4f4c2ebd8f Mon Sep 17 00:00:00 2001 From: Vicente Bergas Date: Sat, 16 Mar 2013 23:59:38 +0100 Subject: [PATCH 10/14] ArchosG9: zero all features before setting them Signed-off-by: Vicente Bergas Signed-off-by: Sascha Hauer --- arch/arm/boards/archosg9/archos_features.c | 58 ++++++---------------- 1 file changed, 16 insertions(+), 42 deletions(-) diff --git a/arch/arm/boards/archosg9/archos_features.c b/arch/arm/boards/archosg9/archos_features.c index 5d934038f..b39673420 100644 --- a/arch/arm/boards/archosg9/archos_features.c +++ b/arch/arm/boards/archosg9/archos_features.c @@ -27,9 +27,9 @@ static void setup_feature_core(void) features->hdr.tag = FTAG_CORE; features->hdr.size = feature_tag_size(feature_tag_core); + memset(&features->u.core, 0, sizeof(features->u.core)); features->u.core.magic = FEATURE_LIST_MAGIC; features->u.core.list_revision = FEATURE_LIST_REV; - features->u.core.flags = 0; features = feature_tag_next(features); } @@ -38,8 +38,7 @@ static void setup_feature_product_name(void) features->hdr.tag = FTAG_PRODUCT_NAME; features->hdr.size = feature_tag_size(feature_tag_product_name); - memset(features->u.product_name.name, 0, - sizeof(features->u.product_name.name)); + memset(&features->u.product_name, 0, sizeof(features->u.product_name)); sprintf(features->u.product_name.name, "A80S"); features->u.product_name.id = 0x13A8; @@ -50,10 +49,8 @@ static void setup_feature_product_serial_number(void) features->hdr.tag = FTAG_PRODUCT_SERIAL_NUMBER; features->hdr.size = feature_tag_size(feature_tag_product_serial); - features->u.product_serial.serial[0] = 0; - features->u.product_serial.serial[1] = 0; - features->u.product_serial.serial[2] = 0; - features->u.product_serial.serial[3] = 0; + memset(&features->u.product_serial, 0, + sizeof(features->u.product_serial)); features = feature_tag_next(features); } @@ -62,14 +59,7 @@ static void setup_feature_product_mac_address(void) features->hdr.tag = FTAG_PRODUCT_MAC_ADDRESS; features->hdr.size = feature_tag_size(feature_tag_product_mac_address); - features->u.mac_address.addr[0] = 0; - features->u.mac_address.addr[1] = 0; - features->u.mac_address.addr[2] = 0; - features->u.mac_address.addr[3] = 0; - features->u.mac_address.addr[4] = 0; - features->u.mac_address.addr[5] = 0; - features->u.mac_address.reserved1 = 0; - features->u.mac_address.reserved2 = 0; + memset(&features->u.mac_address, 0, sizeof(features->u.mac_address)); features = feature_tag_next(features); } @@ -78,6 +68,8 @@ static void setup_feature_board_pcb_revision(void) features->hdr.tag = FTAG_BOARD_PCB_REVISION; features->hdr.size = feature_tag_size(feature_tag_board_revision); + memset(&features->u.board_revision, 0, + sizeof(features->u.board_revision)); features->u.board_revision.revision = 5; features = feature_tag_next(features); @@ -87,23 +79,10 @@ static void setup_feature_sdram(void) features->hdr.tag = FTAG_SDRAM; features->hdr.size = feature_tag_size(feature_tag_sdram); - memset(features->u.sdram.vendor, 0, sizeof(features->u.sdram.vendor)); - memset(features->u.sdram.product, 0, - sizeof(features->u.sdram.product)); + memset(&features->u.sdram, 0, sizeof(features->u.sdram)); sprintf(features->u.sdram.vendor , "elpida"); - sprintf(features->u.sdram.product, "EDB8064B1PB"/*"EDB4064B2PB"*/); - features->u.sdram.type = 0; - features->u.sdram.revision = 0; - features->u.sdram.flags = 0; - features->u.sdram.clock = 400; - features->u.sdram.param_0 = 0; - features->u.sdram.param_1 = 0; - features->u.sdram.param_2 = 0; - features->u.sdram.param_3 = 0; - features->u.sdram.param_4 = 0; - features->u.sdram.param_5 = 0; - features->u.sdram.param_6 = 0; - features->u.sdram.param_7 = 0; + sprintf(features->u.sdram.product, "EDB8064B1PB"); + features->u.sdram.clock = 400; features = feature_tag_next(features); } @@ -112,6 +91,7 @@ static void setup_feature_pmic(void) features->hdr.tag = FTAG_PMIC; features->hdr.size = feature_tag_size(feature_tag_pmic); + memset(&features->u.pmic, 0, sizeof(features->u.pmic)); features->u.pmic.flags = FTAG_PMIC_TPS62361; features = feature_tag_next(features); @@ -121,6 +101,7 @@ static void setup_feature_serial_port(void) features->hdr.tag = FTAG_SERIAL_PORT; features->hdr.size = feature_tag_size(feature_tag_serial_port); + memset(&features->u.serial_port, 0, sizeof(features->u.serial_port)); features->u.serial_port.uart_id = 1; features->u.serial_port.speed = 115200; @@ -131,9 +112,10 @@ static void setup_feature_has_gpio_volume_keys(void) features->hdr.tag = FTAG_HAS_GPIO_VOLUME_KEYS; features->hdr.size = feature_tag_size(feature_tag_gpio_volume_keys); + memset(&features->u.gpio_volume_keys, 0, + sizeof(features->u.gpio_volume_keys)); features->u.gpio_volume_keys.gpio_vol_up = 0x2B; features->u.gpio_volume_keys.gpio_vol_down = 0x2C; - features->u.gpio_volume_keys.flags = 0; features = feature_tag_next(features); } @@ -142,18 +124,9 @@ static void setup_feature_screen(void) features->hdr.tag = FTAG_SCREEN; features->hdr.size = feature_tag_size(feature_tag_screen); - memset(features->u.screen.vendor, 0, - sizeof(features->u.screen.vendor)); + memset(&features->u.screen, 0, sizeof(features->u.screen)); sprintf(features->u.screen.vendor, "CMI"); - features->u.screen.type = 0; - features->u.screen.revision = 0; - features->u.screen.vcom = 0; features->u.screen.backlight = 0xC8; - features->u.screen.reserved[0] = 0; - features->u.screen.reserved[1] = 0; - features->u.screen.reserved[2] = 0; - features->u.screen.reserved[3] = 0; - features->u.screen.reserved[4] = 0; features = feature_tag_next(features); } @@ -162,6 +135,7 @@ static void setup_feature_turbo(void) features->hdr.tag = FTAG_TURBO; features->hdr.size = feature_tag_size(feature_tag_turbo); + memset(&features->u.turbo, 0, sizeof(features->u.turbo)); features->u.turbo.flag = 1; features = feature_tag_next(features); From 5a1d6da675ff39787e1ad26e8cbe074d531a63fa Mon Sep 17 00:00:00 2001 From: Vicente Bergas Date: Sat, 16 Mar 2013 23:59:39 +0100 Subject: [PATCH 11/14] gpio_keys: detect keys pressed before booting If a key is pressed but not released before booting and the key is connected to an active low gpio it's not detected. This patch solves that. Signed-off-by: Vicente Bergas Signed-off-by: Sascha Hauer --- drivers/input/gpio_keys.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/input/gpio_keys.c b/drivers/input/gpio_keys.c index b02e0ede3..b43911149 100644 --- a/drivers/input/gpio_keys.c +++ b/drivers/input/gpio_keys.c @@ -86,6 +86,8 @@ static int __init gpio_keys_probe(struct device_d *dev) return ret; } gpio_direction_input(gpio); + pdata->buttons[i].previous_state = + pdata->buttons[i].active_low; } pdata->poller.func = gpio_key_poller; From 28ce80f53ccdae02d3b64dc6270b92f760ca4b9d Mon Sep 17 00:00:00 2001 From: Vicente Bergas Date: Sat, 16 Mar 2013 23:59:41 +0100 Subject: [PATCH 12/14] ArchosG9: add keyboard input and new reset menu entries The number of "#if" has been reduced to have less obfuscation, now have the three keys or have none of them Signed-off-by: Vicente Bergas Signed-off-by: Sascha Hauer --- arch/arm/boards/archosg9/board.c | 22 +++++++++++++++ arch/arm/boards/archosg9/env/bin/init | 28 +++++++++++++++++++ .../boards/archosg9/env/boot/sd-card-android | 2 +- .../boards/archosg9/env/boot/sd-card-linux | 2 +- arch/arm/boards/archosg9/env/boot/usb-android | 2 +- arch/arm/boards/archosg9/env/boot/usb-linux | 2 +- arch/arm/boards/archosg9/env/menu/mainmenu | 25 +++++++++++++++++ arch/arm/configs/archosg9_defconfig | 11 +++++--- 8 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 arch/arm/boards/archosg9/env/bin/init create mode 100644 arch/arm/boards/archosg9/env/menu/mainmenu diff --git a/arch/arm/boards/archosg9/board.c b/arch/arm/boards/archosg9/board.c index 4c4f34951..0149ef271 100644 --- a/arch/arm/boards/archosg9/board.c +++ b/arch/arm/boards/archosg9/board.c @@ -21,6 +21,9 @@ #include #include #include +#include +#include +#include #include "archos_features.h" static int archosg9_console_init(void){ @@ -47,11 +50,30 @@ mem_initcall(archosg9_mem_init); static struct i2c_board_info i2c_devices[] = { { I2C_BOARD_INFO("twl6030", 0x48), }, }; +#if defined(CONFIG_KEYBOARD_TWL6030) && defined(CONFIG_KEYBOARD_GPIO) +static struct twl6030_pwrbtn_platform_data pwrbtn_data = { + .code = KEY_ENTER +}; +static struct gpio_keys_button keys[] = { + { .code = KEY_UP , .gpio = 43, .active_low = 1 }, + { .code = KEY_DOWN, .gpio = 44, .active_low = 1 }, +}; +static struct gpio_keys_platform_data gk_data = { + .buttons = keys, + .nbuttons = ARRAY_SIZE(keys), + .fifo_size = ARRAY_SIZE(keys)*sizeof(int) +}; +#endif static int archosg9_devices_init(void){ i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices)); omap44xx_add_i2c1(NULL); omap44xx_add_mmc1(NULL); +#if defined(CONFIG_KEYBOARD_TWL6030) && defined(CONFIG_KEYBOARD_GPIO) + add_generic_device_res("twl6030_pwrbtn", DEVICE_ID_DYNAMIC, 0, 0, + &pwrbtn_data); + add_gpio_keys_device(DEVICE_ID_DYNAMIC, &gk_data); +#endif armlinux_set_bootparams((void *)0x80000100); /* diff --git a/arch/arm/boards/archosg9/env/bin/init b/arch/arm/boards/archosg9/env/bin/init new file mode 100644 index 000000000..0b362995c --- /dev/null +++ b/arch/arm/boards/archosg9/env/bin/init @@ -0,0 +1,28 @@ +#!/bin/sh + +export PATH=/env/bin + +global hostname=generic +global user=none +global boot.default=net +global allow_color=true +global linux.bootargs.base +#linux.bootargs.dyn.* will be cleared at the beginning of boot +global linux.bootargs.dyn.ip +global linux.bootargs.dyn.root +global editcmd=sedit + +/env/config + +timeout -s -a 0 +autoboot="$?" + +for i in /env/init/*; do + . $i +done + +if [ "$autoboot" = 0 ]; then + boot +fi + +/env/menu/mainmenu diff --git a/arch/arm/boards/archosg9/env/boot/sd-card-android b/arch/arm/boards/archosg9/env/boot/sd-card-android index dc6f15e97..a10a763af 100644 --- a/arch/arm/boards/archosg9/env/boot/sd-card-android +++ b/arch/arm/boards/archosg9/env/boot/sd-card-android @@ -1,7 +1,7 @@ #!/bin/sh if [ "$1" = menu ]; then - boot-menu-add-entry "$0" "Android from SD card" "$2" + boot-menu-add-entry "$0" "Android from SD card" exit fi diff --git a/arch/arm/boards/archosg9/env/boot/sd-card-linux b/arch/arm/boards/archosg9/env/boot/sd-card-linux index 1ae7340cd..2ba9b9e1c 100644 --- a/arch/arm/boards/archosg9/env/boot/sd-card-linux +++ b/arch/arm/boards/archosg9/env/boot/sd-card-linux @@ -1,7 +1,7 @@ #!/bin/sh if [ "$1" = menu ]; then - boot-menu-add-entry "$0" "Linux from SD card" "$2" + boot-menu-add-entry "$0" "Linux from SD card" exit fi diff --git a/arch/arm/boards/archosg9/env/boot/usb-android b/arch/arm/boards/archosg9/env/boot/usb-android index f7646812a..a7ddabe49 100644 --- a/arch/arm/boards/archosg9/env/boot/usb-android +++ b/arch/arm/boards/archosg9/env/boot/usb-android @@ -1,7 +1,7 @@ #!/bin/sh if [ "$1" = menu ]; then - boot-menu-add-entry "$0" "Android from usb" "$2" + boot-menu-add-entry "$0" "Android over usb" exit fi diff --git a/arch/arm/boards/archosg9/env/boot/usb-linux b/arch/arm/boards/archosg9/env/boot/usb-linux index 1d8e91979..12ae6381b 100644 --- a/arch/arm/boards/archosg9/env/boot/usb-linux +++ b/arch/arm/boards/archosg9/env/boot/usb-linux @@ -1,7 +1,7 @@ #!/bin/sh if [ "$1" = menu ]; then - boot-menu-add-entry "$0" "Linux from usb" "$2" + boot-menu-add-entry "$0" "Linux over usb" exit fi diff --git a/arch/arm/boards/archosg9/env/menu/mainmenu b/arch/arm/boards/archosg9/env/menu/mainmenu new file mode 100644 index 000000000..685626143 --- /dev/null +++ b/arch/arm/boards/archosg9/env/menu/mainmenu @@ -0,0 +1,25 @@ +#!/bin/sh + +savepath=$PATH +export menupath=$PATH:/env/menu + +. /env/data/ansi-colors + +while true; do + export PATH=${menupath} + + echo $PATH + + menu -a -m boot -d "${CYAN}Welcome to Barebox${NC}" + + boot-entries-collect + + menu -e -a -m boot -c "settings" -d "Settings" + menu -e -a -m boot -c 'PATH=$savepath; echo "enter exit to return to menu"; sh' -d "${DARK_YELLOW}Shell${NC}" + menu -e -a -m boot -c 'boot_order mmc2_1 && reset' -d "${RED}Reboot into internal flash${NC}" + menu -e -a -m boot -c 'boot_order mmc1 && reset' -d "${RED}Reboot into SD card${NC}" + menu -e -a -m boot -c 'boot_order usb_1 && reset' -d "${RED}Reboot over usb${NC}" + + menu -s -m boot + menu -r -m boot +done diff --git a/arch/arm/configs/archosg9_defconfig b/arch/arm/configs/archosg9_defconfig index cb0f6b24d..40e443357 100644 --- a/arch/arm/configs/archosg9_defconfig +++ b/arch/arm/configs/archosg9_defconfig @@ -3,8 +3,8 @@ CONFIG_ARCH_OMAP4=y CONFIG_OMAP4_USBBOOT=y CONFIG_MACH_ARCHOSG9=y CONFIG_THUMB2_BAREBOX=y -CONFIG_CMD_ARM_MMUINFO=y CONFIG_ARM_BOARD_APPEND_ATAG=y +CONFIG_CMD_ARM_MMUINFO=y CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y CONFIG_ARM_UNWIND=y # CONFIG_MMU is not set @@ -52,6 +52,7 @@ CONFIG_CMD_BOOTM_AIMAGE=y CONFIG_CMD_UIMAGE=y # CONFIG_CMD_BOOTU is not set CONFIG_CMD_RESET=y +CONFIG_CMD_BOOT_ORDER=y CONFIG_CMD_GO=y CONFIG_CMD_TIMEOUT=y CONFIG_CMD_PARTITION=y @@ -70,9 +71,9 @@ CONFIG_NET_NETCONSOLE=y CONFIG_NET_RESOLV=y CONFIG_DRIVER_SERIAL_NS16550=y CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y +CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT=y CONFIG_NET_USB=y CONFIG_NET_USB_SMSC95XX=y -CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT=y # CONFIG_SPI is not set CONFIG_I2C=y CONFIG_I2C_OMAP=y @@ -81,13 +82,15 @@ CONFIG_USB_EHCI=y CONFIG_MCI=y CONFIG_MCI_STARTUP=y CONFIG_MCI_OMAP_HSMMC=y +CONFIG_MFD_TWL6030=y CONFIG_LED=y CONFIG_LED_GPIO=y CONFIG_LED_TRIGGERS=y +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_TWL6030=y CONFIG_FS_TFTP=y -CONFIG_FS_NFS=y -CONFIG_MFD_TWL6030=y CONFIG_FS_OMAP4_USBBOOT=y +CONFIG_FS_NFS=y CONFIG_FS_FAT=y CONFIG_FS_FAT_WRITE=y CONFIG_FS_FAT_LFN=y From c61cc9809129d31295b9069f76368917db3523ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teresa=20G=C3=A1mez?= Date: Tue, 2 Apr 2013 14:48:06 +0200 Subject: [PATCH 13/14] OMAP: Move bootsource functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bootsource functions are not specific to the first stage bootloader. They may also be used for detecting the bootsource to decide where to load the environment from. Also clean up includes in board files. Signed-off-by: Teresa Gámez Signed-off-by: Sascha Hauer --- arch/arm/boards/beagle/board.c | 1 - arch/arm/boards/beaglebone/board.c | 1 - arch/arm/boards/panda/board.c | 2 +- arch/arm/boards/pcm049/board.c | 1 - arch/arm/boards/phycard-a-l1/pca-a-l1.c | 1 - arch/arm/boards/phycard-a-xl2/pca-a-xl2.c | 1 - arch/arm/mach-omap/Makefile | 2 +- arch/arm/mach-omap/am33xx_generic.c | 2 +- arch/arm/mach-omap/include/mach/generic.h | 16 ++++++++++++ arch/arm/mach-omap/include/mach/xload.h | 16 ------------ arch/arm/mach-omap/omap3_generic.c | 2 +- arch/arm/mach-omap/omap4_generic.c | 2 +- arch/arm/mach-omap/omap4_rom_usb.c | 2 +- arch/arm/mach-omap/omap_generic.c | 32 +++++++++++++++++++++++ arch/arm/mach-omap/xload.c | 13 +-------- 15 files changed, 55 insertions(+), 39 deletions(-) delete mode 100644 arch/arm/mach-omap/include/mach/xload.h create mode 100644 arch/arm/mach-omap/omap_generic.c diff --git a/arch/arm/boards/beagle/board.c b/arch/arm/boards/beagle/board.c index bed465199..972c05efb 100644 --- a/arch/arm/boards/beagle/board.c +++ b/arch/arm/boards/beagle/board.c @@ -62,7 +62,6 @@ #include #include #include -#include #ifdef CONFIG_DRIVER_SERIAL_NS16550 diff --git a/arch/arm/boards/beaglebone/board.c b/arch/arm/boards/beaglebone/board.c index 70c60705b..3f2145368 100644 --- a/arch/arm/boards/beaglebone/board.c +++ b/arch/arm/boards/beaglebone/board.c @@ -45,7 +45,6 @@ #include #include #include -#include #include #include #include diff --git a/arch/arm/boards/panda/board.c b/arch/arm/boards/panda/board.c index f1fbd5e94..2518d3a0c 100644 --- a/arch/arm/boards/panda/board.c +++ b/arch/arm/boards/panda/board.c @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/arch/arm/boards/pcm049/board.c b/arch/arm/boards/pcm049/board.c index 680539a22..b0d689bf0 100644 --- a/arch/arm/boards/pcm049/board.c +++ b/arch/arm/boards/pcm049/board.c @@ -36,7 +36,6 @@ #include #include #include -#include #include static int pcm049_console_init(void) diff --git a/arch/arm/boards/phycard-a-l1/pca-a-l1.c b/arch/arm/boards/phycard-a-l1/pca-a-l1.c index 234d689f9..7cf6ae863 100644 --- a/arch/arm/boards/phycard-a-l1/pca-a-l1.c +++ b/arch/arm/boards/phycard-a-l1/pca-a-l1.c @@ -54,7 +54,6 @@ #include #include #include -#include #include #include #include diff --git a/arch/arm/boards/phycard-a-xl2/pca-a-xl2.c b/arch/arm/boards/phycard-a-xl2/pca-a-xl2.c index be7060fdd..8f79d98fb 100644 --- a/arch/arm/boards/phycard-a-xl2/pca-a-xl2.c +++ b/arch/arm/boards/phycard-a-xl2/pca-a-xl2.c @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include diff --git a/arch/arm/mach-omap/Makefile b/arch/arm/mach-omap/Makefile index 38786b2bd..d9e00f77a 100644 --- a/arch/arm/mach-omap/Makefile +++ b/arch/arm/mach-omap/Makefile @@ -15,7 +15,7 @@ # GNU General Public License for more details. # # -obj-$(CONFIG_ARCH_OMAP) += syslib.o omap_devices.o +obj-$(CONFIG_ARCH_OMAP) += syslib.o omap_devices.o omap_generic.o pbl-$(CONFIG_ARCH_OMAP) += syslib.o obj-$(CONFIG_OMAP_CLOCK_SOURCE_S32K) += s32k_clksource.o obj-$(CONFIG_OMAP_CLOCK_SOURCE_DMTIMER0) += dmtimer0.o diff --git a/arch/arm/mach-omap/am33xx_generic.c b/arch/arm/mach-omap/am33xx_generic.c index d3014c20b..059c55e3b 100644 --- a/arch/arm/mach-omap/am33xx_generic.c +++ b/arch/arm/mach-omap/am33xx_generic.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include void __noreturn reset_cpu(unsigned long addr) diff --git a/arch/arm/mach-omap/include/mach/generic.h b/arch/arm/mach-omap/include/mach/generic.h index c801a068e..edc4f1d3d 100644 --- a/arch/arm/mach-omap/include/mach/generic.h +++ b/arch/arm/mach-omap/include/mach/generic.h @@ -1,3 +1,5 @@ +#ifndef _MACH_GENERIC_H +#define _MACH_GENERIC_H /* I2C controller revisions */ #define OMAP_I2C_REV_2 0x20 @@ -24,3 +26,17 @@ #else #define cpu_is_omap4xxx() (0) #endif + +enum omap_boot_src { + OMAP_BOOTSRC_UNKNOWN, + OMAP_BOOTSRC_MMC1, + OMAP_BOOTSRC_NAND, + OMAP_BOOTSRC_SPI1, + OMAP_BOOTSRC_USB1, +}; + +enum omap_boot_src am33xx_bootsrc(void); +enum omap_boot_src omap3_bootsrc(void); +enum omap_boot_src omap4_bootsrc(void); + +#endif diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h deleted file mode 100644 index d63273526..000000000 --- a/arch/arm/mach-omap/include/mach/xload.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _MACH_XLOAD_H -#define _MACH_XLOAD_H - -enum omap_boot_src { - OMAP_BOOTSRC_UNKNOWN, - OMAP_BOOTSRC_MMC1, - OMAP_BOOTSRC_NAND, - OMAP_BOOTSRC_SPI1, - OMAP_BOOTSRC_USB1, -}; - -enum omap_boot_src am33xx_bootsrc(void); -enum omap_boot_src omap3_bootsrc(void); -enum omap_boot_src omap4_bootsrc(void); - -#endif /* _MACH_XLOAD_H */ diff --git a/arch/arm/mach-omap/omap3_generic.c b/arch/arm/mach-omap/omap3_generic.c index a21a938ef..10e03aec0 100644 --- a/arch/arm/mach-omap/omap3_generic.c +++ b/arch/arm/mach-omap/omap3_generic.c @@ -40,7 +40,7 @@ #include #include #include -#include +#include /** * @brief Reset the CPU diff --git a/arch/arm/mach-omap/omap4_generic.c b/arch/arm/mach-omap/omap4_generic.c index 2a09eb635..e1edffa35 100644 --- a/arch/arm/mach-omap/omap4_generic.c +++ b/arch/arm/mach-omap/omap4_generic.c @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/arch/arm/mach-omap/omap4_rom_usb.c b/arch/arm/mach-omap/omap4_rom_usb.c index de35d61c1..31d93c34e 100644 --- a/arch/arm/mach-omap/omap4_rom_usb.c +++ b/arch/arm/mach-omap/omap4_rom_usb.c @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include static struct omap4_usbboot omap4_usbboot_data; diff --git a/arch/arm/mach-omap/omap_generic.c b/arch/arm/mach-omap/omap_generic.c new file mode 100644 index 000000000..f2fd1d33a --- /dev/null +++ b/arch/arm/mach-omap/omap_generic.c @@ -0,0 +1,32 @@ +/* + * (C) Copyright 2013 Teresa Gámez, Phytec Messtechnik GmbH + * + * 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. + * + */ +#include +#include +#include +#include +#include +#include +#include + +enum omap_boot_src omap_bootsrc(void) +{ +#if defined(CONFIG_ARCH_OMAP3) + return omap3_bootsrc(); +#elif defined(CONFIG_ARCH_OMAP4) + return omap4_bootsrc(); +#elif defined(CONFIG_ARCH_AM33XX) + return am33xx_bootsrc(); +#endif +} diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c index 41533a968..72aa3791e 100644 --- a/arch/arm/mach-omap/xload.c +++ b/arch/arm/mach-omap/xload.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include @@ -158,17 +158,6 @@ static void *omap4_xload_boot_usb(void){ return buf; } -enum omap_boot_src omap_bootsrc(void) -{ -#if defined(CONFIG_ARCH_OMAP3) - return omap3_bootsrc(); -#elif defined(CONFIG_ARCH_OMAP4) - return omap4_bootsrc(); -#elif defined(CONFIG_ARCH_AM33XX) - return am33xx_bootsrc(); -#endif -} - /* * Replaces the default shell in xload configuration */ From c1bea6f4eddfe68c8e46aca63814e9513eb89c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Teresa=20G=C3=A1mez?= Date: Tue, 2 Apr 2013 14:48:07 +0200 Subject: [PATCH 14/14] OMAP: Add option to use environment from MMC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make loading environment from MMC generic for all OMAP. Tested on AM335x, OMAP4. Signed-off-by: Teresa Gámez Tested-by: Jan Weitzel Signed-off-by: Sascha Hauer --- arch/arm/boards/beaglebone/board.c | 32 ---------------------- arch/arm/boards/panda/board.c | 30 --------------------- arch/arm/mach-omap/include/mach/generic.h | 1 + arch/arm/mach-omap/omap_generic.c | 33 +++++++++++++++++++++++ 4 files changed, 34 insertions(+), 62 deletions(-) diff --git a/arch/arm/boards/beaglebone/board.c b/arch/arm/boards/beaglebone/board.c index 3f2145368..b3f39eaad 100644 --- a/arch/arm/boards/beaglebone/board.c +++ b/arch/arm/boards/beaglebone/board.c @@ -25,8 +25,6 @@ #include #include #include -#include -#include #include #include #include @@ -112,33 +110,3 @@ static int beaglebone_devices_init(void) return 0; } device_initcall(beaglebone_devices_init); - -#ifdef CONFIG_DEFAULT_ENVIRONMENT -static int beaglebone_env_init(void) -{ - struct stat s; - char *diskdev = "/dev/disk0.0"; - int ret; - - ret = stat(diskdev, &s); - if (ret) { - printf("device %s not found. Using default environment\n", diskdev); - return 0; - } - - mkdir ("/boot", 0666); - ret = mount(diskdev, "fat", "/boot"); - if (ret) { - printf("failed to mount %s\n", diskdev); - return 0; - } - - if (IS_ENABLED(CONFIG_OMAP_BUILD_IFT)) - default_environment_path = "/dev/defaultenv"; - else - default_environment_path = "/boot/barebox.env"; - - return 0; -} -late_initcall(beaglebone_env_init); -#endif diff --git a/arch/arm/boards/panda/board.c b/arch/arm/boards/panda/board.c index 2518d3a0c..d1f9a5ef0 100644 --- a/arch/arm/boards/panda/board.c +++ b/arch/arm/boards/panda/board.c @@ -1,12 +1,10 @@ #include #include #include -#include #include #include #include #include -#include #include #include #include @@ -20,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -164,30 +161,3 @@ static int panda_devices_init(void) return 0; } device_initcall(panda_devices_init); - -#ifdef CONFIG_DEFAULT_ENVIRONMENT -static int panda_env_init(void) -{ - struct stat s; - char *diskdev = "/dev/disk0.0"; - int ret; - - ret = stat(diskdev, &s); - if (ret) { - printf("no %s. using default env\n", diskdev); - return 0; - } - - mkdir ("/boot", 0666); - ret = mount(diskdev, "fat", "/boot"); - if (ret) { - printf("failed to mount %s\n", diskdev); - return 0; - } - - default_environment_path = "/boot/bareboxenv"; - - return 0; -} -late_initcall(panda_env_init); -#endif diff --git a/arch/arm/mach-omap/include/mach/generic.h b/arch/arm/mach-omap/include/mach/generic.h index edc4f1d3d..7455404ca 100644 --- a/arch/arm/mach-omap/include/mach/generic.h +++ b/arch/arm/mach-omap/include/mach/generic.h @@ -35,6 +35,7 @@ enum omap_boot_src { OMAP_BOOTSRC_USB1, }; +enum omap_boot_src omap_bootsrc(void); enum omap_boot_src am33xx_bootsrc(void); enum omap_boot_src omap3_bootsrc(void); enum omap_boot_src omap4_bootsrc(void); diff --git a/arch/arm/mach-omap/omap_generic.c b/arch/arm/mach-omap/omap_generic.c index f2fd1d33a..580ed3e16 100644 --- a/arch/arm/mach-omap/omap_generic.c +++ b/arch/arm/mach-omap/omap_generic.c @@ -30,3 +30,36 @@ enum omap_boot_src omap_bootsrc(void) return am33xx_bootsrc(); #endif } + +#if defined(CONFIG_DEFAULT_ENVIRONMENT) && defined(CONFIG_MCI_STARTUP) +static int omap_env_init(void) +{ + struct stat s; + char *diskdev = "/dev/disk0.0"; + int ret; + + if (omap_bootsrc() != OMAP_BOOTSRC_MMC1) + return 0; + + ret = stat(diskdev, &s); + if (ret) { + printf("no %s. using default env\n", diskdev); + return 0; + } + + mkdir("/boot", 0666); + ret = mount(diskdev, "fat", "/boot"); + if (ret) { + printf("failed to mount %s\n", diskdev); + return 0; + } + + if (IS_ENABLED(CONFIG_OMAP_BUILD_IFT)) + default_environment_path = "/dev/defaultenv"; + else + default_environment_path = "/boot/barebox.env"; + + return 0; +} +late_initcall(omap_env_init); +#endif