From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:46629) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TK73o-0000t7-LT for qemu-devel@nongnu.org; Fri, 05 Oct 2012 08:31:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TK73n-0002If-7h for qemu-devel@nongnu.org; Fri, 05 Oct 2012 08:31:20 -0400 Received: from mail-ie0-f173.google.com ([209.85.223.173]:53951) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TK73n-0002Ia-31 for qemu-devel@nongnu.org; Fri, 05 Oct 2012 08:31:19 -0400 Received: by mail-ie0-f173.google.com with SMTP id 17so3401743iea.4 for ; Fri, 05 Oct 2012 05:31:18 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <1349395739-26502-6-git-send-email-peter.crosthwaite@xilinx.com> References: <1349395739-26502-1-git-send-email-peter.crosthwaite@xilinx.com> <1349395739-26502-6-git-send-email-peter.crosthwaite@xilinx.com> Date: Fri, 5 Oct 2012 13:31:18 +0100 Message-ID: From: Peter Maydell Content-Type: text/plain; charset=UTF-8 Subject: Re: [Qemu-devel] [PATCH 05/14] hw/stellaris: Removed gpio_out init array. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Crosthwaite Cc: blauwirbel@gmail.com, edgar.iglesias@gmail.com, aliguori@us.ibm.com, qemu-devel@nongnu.org On 5 October 2012 01:08, Peter Crosthwaite wrote: > From: Peter A. G. Crosthwaite > > stellaris_init() defines arrays of qemu_irq to decides what each of the GPIO > pins are connected to. This is ok for inputs (as an input can only have one > source) but is flawed for outputs as an output can connect to any number of > sinks. Removed the gpio_out array completely and just replaced its setters with > direct calls to qdev_connect_gpio_out(). You can only connect an output to one sink. (If you want to wire it to multiple places you need to use a qemu_irq_split() somewhere.) What bug is this patch fixing? -- PMM > Signed-off-by: Peter A. G. Crosthwaite > --- > hw/stellaris.c | 26 ++++++++++++-------------- > 1 files changed, 12 insertions(+), 14 deletions(-) > > diff --git a/hw/stellaris.c b/hw/stellaris.c > index 01050d1..a7b68f4 100644 > --- a/hw/stellaris.c > +++ b/hw/stellaris.c > @@ -1244,7 +1244,6 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, > qemu_irq *pic; > DeviceState *gpio_dev[7]; > qemu_irq gpio_in[7][8]; > - qemu_irq gpio_out[7][8]; > qemu_irq adc; > int sram_size; > int flash_size; > @@ -1284,8 +1283,9 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, > pic[gpio_irq[i]]); > for (j = 0; j < 8; j++) { > gpio_in[i][j] = qdev_get_gpio_in(gpio_dev[i], j); > - gpio_out[i][j] = NULL; > } > + } else { > + gpio_dev[i] = NULL; > } > } > > @@ -1308,20 +1308,27 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, > if (board->peripherals & BP_OLED_SSI) { > DeviceState *mux; > void *bus; > + qemu_irq select_pin; > > bus = qdev_get_child_bus(dev, "ssi"); > mux = ssi_create_slave(bus, "evb6965-ssi"); > - gpio_out[GPIO_D][0] = qdev_get_gpio_in(mux, 0); > + select_pin = qdev_get_gpio_in(mux, 0); > + if (gpio_dev[GPIO_D]) { > + qdev_connect_gpio_out(gpio_dev[GPIO_D], 0, select_pin); > + } > > bus = qdev_get_child_bus(mux, "ssi0"); > ssi_create_slave(bus, "ssi-sd"); > > bus = qdev_get_child_bus(mux, "ssi1"); > dev = ssi_create_slave(bus, "ssd0323"); > - gpio_out[GPIO_C][7] = qdev_get_gpio_in(dev, 0); > + if (gpio_dev[GPIO_C]) { > + qdev_connect_gpio_out(gpio_dev[GPIO_C], 7, > + qdev_get_gpio_in(dev, 0)); > + } > > /* Make sure the select pin is high. */ > - qemu_irq_raise(gpio_out[GPIO_D][0]); > + qemu_irq_raise(select_pin); > } > } > if (board->dc4 & (1 << 28)) { > @@ -1347,15 +1354,6 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, > > stellaris_gamepad_init(5, gpad_irq, gpad_keycode); > } > - for (i = 0; i < 7; i++) { > - if (board->dc4 & (1 << i)) { > - for (j = 0; j < 8; j++) { > - if (gpio_out[i][j]) { > - qdev_connect_gpio_out(gpio_dev[i], j, gpio_out[i][j]); > - } > - } > - } > - } > } > > /* FIXME: Figure out how to generate these from stellaris_boards. */ > -- > 1.7.0.4 > >