From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JxMYu-0004w5-Mt for qemu-devel@nongnu.org; Sat, 17 May 2008 09:35:00 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JxMYt-0004vM-0Z for qemu-devel@nongnu.org; Sat, 17 May 2008 09:35:00 -0400 Received: from [199.232.76.173] (port=41445 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JxMYs-0004vJ-S4 for qemu-devel@nongnu.org; Sat, 17 May 2008 09:34:58 -0400 Received: from fmmailgate01.web.de ([217.72.192.221]:34448) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JxMYs-0004ZI-HG for qemu-devel@nongnu.org; Sat, 17 May 2008 09:34:58 -0400 Received: from smtp06.web.de (fmsmtp06.dlan.cinetic.de [172.20.5.172]) by fmmailgate01.web.de (Postfix) with ESMTP id 99ED6DF623D8 for ; Sat, 17 May 2008 15:34:57 +0200 (CEST) Received: from [88.64.29.150] (helo=[192.168.1.198]) by smtp06.web.de with asmtp (TLSv1:AES256-SHA:256) (WEB.DE 4.109 #226) id 1JxMYr-0001L3-00 for qemu-devel@nongnu.org; Sat, 17 May 2008 15:34:57 +0200 Message-ID: <482EDF01.5040001@web.de> Date: Sat, 17 May 2008 15:34:57 +0200 From: Jan Kiszka MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Sender: jan.kiszka@web.de Subject: [Qemu-devel] [RFC][PATCH 2/2] MusicPal: Add specific -hold-button option Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org MusicPal's U-Boot is able to start in a special mode (firmware recovery) in case one of the control buttons is pressed during power-up. As with QEMU there is no chance to achieve this manually (without delaying the power-up with sleep()), this patch adds a MusicPal-specific command line option -hold-button. This option that takes button codes and simulates that the provided ones are pressed on power-up. Signed-off-by: Jan Kiszka --- hw/musicpal.c | 49 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) Index: b/hw/musicpal.c =================================================================== --- a/hw/musicpal.c +++ b/hw/musicpal.c @@ -62,6 +62,7 @@ static uint32_t gpio_in_state = 0xffffff static uint32_t gpio_isr; static uint32_t gpio_out_state; static ram_addr_t sram_off; +static int powerup_hold_button; /* Address conversion helpers */ static void *target2host_addr(uint32_t addr) @@ -1344,6 +1345,12 @@ static void musicpal_key_event(void *opa uint32_t event = 0; static int kbd_extended; + if (powerup_hold_button) { + powerup_hold_button = 0; + gpio_in_state |= MP_GPIO_BTN_FAVORITS | MP_GPIO_BTN_VOLUME | + MP_GPIO_BTN_NAVIGATION | MP_GPIO_BTN_MENU; + } + if (keycode == KEYCODE_EXTENDED) { kbd_extended = 1; return; @@ -1491,12 +1498,6 @@ static void musicpal_init(ram_addr_t ram qemu_add_kbd_event_handler(musicpal_key_event, pic[MP_GPIO_IRQ]); - /* - * Wait a bit to catch menu button during U-Boot start-up - * (to trigger emergency update). - */ - sleep(1); - mv88w8618_eth_init(&nd_table[0], MP_ETH_BASE, pic[MP_ETH_IRQ]); mixer_i2c = musicpal_audio_init(MP_AUDIO_BASE, pic[MP_AUDIO_IRQ]); @@ -1508,9 +1509,43 @@ static void musicpal_init(ram_addr_t ram arm_load_kernel(env, &musicpal_binfo); } +int musicpal_parse_option(const char *optname, const char *optarg) +{ + if (strcmp(optname, "-hold-button") == 0) { + while (optarg && *optarg != 0) { + switch (*optarg) { + case 'f': + gpio_in_state &= ~MP_GPIO_BTN_FAVORITS; + break; + case 'm': + gpio_in_state &= ~MP_GPIO_BTN_MENU; + break; + case 'n': + gpio_in_state &= ~MP_GPIO_BTN_NAVIGATION; + break; + case 'v': + gpio_in_state &= ~MP_GPIO_BTN_VOLUME; + break; + default: + fprintf(stderr, "Invalid button specified: %c\n", *optarg); + exit(1); + } + optarg++; + powerup_hold_button = 1; + } + return 1; + } + return -1; +} + QEMUMachine musicpal_machine = { "musicpal", "Marvell 88w8618 / MusicPal (ARM926EJ-S)", musicpal_init, - MP_RAM_DEFAULT_SIZE + MP_SRAM_SIZE + MP_FLASH_SIZE_MAX + RAMSIZE_FIXED + MP_RAM_DEFAULT_SIZE + MP_SRAM_SIZE + MP_FLASH_SIZE_MAX + RAMSIZE_FIXED, + "-hold-button [f][m][n][v]\n" + " Hold favorits (f), menu (m), navigation (n), or volume(v)\n" + " button on power-up to trigger special services. The button\n" + " is released on next keystroke.\n", + musicpal_parse_option };