diff mbox

[V4,5/5] stellaris: Updated spi bus implementation

Message ID 9dad79e29ef57de1872350bd9de425f04afca4b5.1338796049.git.peter.crosthwaite@petalogix.com
State New
Headers show

Commit Message

Peter A. G. Crosthwaite June 4, 2012, 8:08 a.m. UTC
Setup the stellaris_ssi_bus device to use a single multi-slave ssi bus instead
of two busses.

Signed-off-by: Peter A. G. Crosthwaite <peter.crosthwaite@petalogix.com>
---
changed from v3:
This patch is new

 hw/stellaris.c |   17 +++++++----------
 1 files changed, 7 insertions(+), 10 deletions(-)

Comments

Peter A. G. Crosthwaite June 4, 2012, 8:14 a.m. UTC | #1
Regression tested using Paul Brooks test vector:

peterc@PetaLogix-ws2:~/Petalogix/Internal/plgx_install/qemu-upstream-regression/third-party/stellaris-test$
qemu-system-arm -M lm3s6965evb -serial stdio -kernel sd_card.bin -sd
sdcard.img
VNC server running on `127.0.0.1:5900'


SD Card Example Program
Type 'help' for help.

/> ls
Open
SD: Unknown CMD8
listing

----A 2012/04/25 17:44        12  README.TXT

   1 File(s),        12 bytes total
   0 Dir(s),      61182K bytes free

/> cat README.TXT
Hello World

Gui based test works as well.

On Mon, Jun 4, 2012 at 6:08 PM, Peter A. G. Crosthwaite
<peter.crosthwaite@petalogix.com> wrote:
> Setup the stellaris_ssi_bus device to use a single multi-slave ssi bus instead
> of two busses.
>
> Signed-off-by: Peter A. G. Crosthwaite <peter.crosthwaite@petalogix.com>
> ---
> changed from v3:
> This patch is new
>
>  hw/stellaris.c |   17 +++++++----------
>  1 files changed, 7 insertions(+), 10 deletions(-)
>
> diff --git a/hw/stellaris.c b/hw/stellaris.c
> index e0600a1..07a4187 100644
> --- a/hw/stellaris.c
> +++ b/hw/stellaris.c
> @@ -1164,22 +1164,21 @@ static int stellaris_adc_init(SysBusDevice *dev)
>  typedef struct {
>     SSISlave ssidev;
>     qemu_irq irq;

Just curiously, AFAICT, this irq is completely dead. Paul can it be
removed in a trivial patch or is there some GPIO related black magic
occurring here?

> -    int current_dev;
> -    SSIBus *bus[2];
> +    SSIBus *bus;
>  } stellaris_ssi_bus_state;
>
>  static void stellaris_ssi_bus_select(void *opaque, int irq, int level)
>  {
>     stellaris_ssi_bus_state *s = (stellaris_ssi_bus_state *)opaque;
>
> -    s->current_dev = level;
> +    ssi_select_slave(s->bus, (uint32_t)level);
>  }
>
>  static uint32_t stellaris_ssi_bus_transfer(SSISlave *dev, uint32_t val)
>  {
>     stellaris_ssi_bus_state *s = FROM_SSI_SLAVE(stellaris_ssi_bus_state, dev);
>
> -    return ssi_transfer(s->bus[s->current_dev], val);
> +    return ssi_transfer(s->bus, val);
>  }
>
>  static const VMStateDescription vmstate_stellaris_ssi_bus = {
> @@ -1188,7 +1187,6 @@ static const VMStateDescription vmstate_stellaris_ssi_bus = {
>     .minimum_version_id = 1,
>     .minimum_version_id_old = 1,
>     .fields      = (VMStateField[]) {
> -        VMSTATE_INT32(current_dev, stellaris_ssi_bus_state),
>         VMSTATE_END_OF_LIST()
>     }
>  };
> @@ -1197,8 +1195,7 @@ static int stellaris_ssi_bus_init(SSISlave *dev)
>  {
>     stellaris_ssi_bus_state *s = FROM_SSI_SLAVE(stellaris_ssi_bus_state, dev);
>
> -    s->bus[0] = ssi_create_bus(&dev->qdev, "ssi0");
> -    s->bus[1] = ssi_create_bus(&dev->qdev, "ssi1");
> +    s->bus = ssi_create_bus(&dev->qdev, "ssi");
>     qdev_init_gpio_in(&dev->qdev, stellaris_ssi_bus_select, 1);
>
>     vmstate_register(&dev->qdev, -1, &vmstate_stellaris_ssi_bus, s);
> @@ -1312,11 +1309,11 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model,
>             mux = ssi_create_slave(bus, "evb6965-ssi", 0);
>             gpio_out[GPIO_D][0] = qdev_get_gpio_in(mux, 0);
>
> -            bus = qdev_get_child_bus(mux, "ssi0");
> +            bus = qdev_get_child_bus(mux, "ssi");
> +
>             ssi_create_slave(bus, "ssi-sd", 0);
>
> -            bus = qdev_get_child_bus(mux, "ssi1");
> -            dev = ssi_create_slave(bus, "ssd0323", 0);
> +            dev = ssi_create_slave(bus, "ssd0323", 1);
>             gpio_out[GPIO_C][7] = qdev_get_gpio_in(dev, 0);
>
>             /* Make sure the select pin is high.  */
> --
> 1.7.3.2
>
diff mbox

Patch

diff --git a/hw/stellaris.c b/hw/stellaris.c
index e0600a1..07a4187 100644
--- a/hw/stellaris.c
+++ b/hw/stellaris.c
@@ -1164,22 +1164,21 @@  static int stellaris_adc_init(SysBusDevice *dev)
 typedef struct {
     SSISlave ssidev;
     qemu_irq irq;
-    int current_dev;
-    SSIBus *bus[2];
+    SSIBus *bus;
 } stellaris_ssi_bus_state;
 
 static void stellaris_ssi_bus_select(void *opaque, int irq, int level)
 {
     stellaris_ssi_bus_state *s = (stellaris_ssi_bus_state *)opaque;
 
-    s->current_dev = level;
+    ssi_select_slave(s->bus, (uint32_t)level);
 }
 
 static uint32_t stellaris_ssi_bus_transfer(SSISlave *dev, uint32_t val)
 {
     stellaris_ssi_bus_state *s = FROM_SSI_SLAVE(stellaris_ssi_bus_state, dev);
 
-    return ssi_transfer(s->bus[s->current_dev], val);
+    return ssi_transfer(s->bus, val);
 }
 
 static const VMStateDescription vmstate_stellaris_ssi_bus = {
@@ -1188,7 +1187,6 @@  static const VMStateDescription vmstate_stellaris_ssi_bus = {
     .minimum_version_id = 1,
     .minimum_version_id_old = 1,
     .fields      = (VMStateField[]) {
-        VMSTATE_INT32(current_dev, stellaris_ssi_bus_state),
         VMSTATE_END_OF_LIST()
     }
 };
@@ -1197,8 +1195,7 @@  static int stellaris_ssi_bus_init(SSISlave *dev)
 {
     stellaris_ssi_bus_state *s = FROM_SSI_SLAVE(stellaris_ssi_bus_state, dev);
 
-    s->bus[0] = ssi_create_bus(&dev->qdev, "ssi0");
-    s->bus[1] = ssi_create_bus(&dev->qdev, "ssi1");
+    s->bus = ssi_create_bus(&dev->qdev, "ssi");
     qdev_init_gpio_in(&dev->qdev, stellaris_ssi_bus_select, 1);
 
     vmstate_register(&dev->qdev, -1, &vmstate_stellaris_ssi_bus, s);
@@ -1312,11 +1309,11 @@  static void stellaris_init(const char *kernel_filename, const char *cpu_model,
             mux = ssi_create_slave(bus, "evb6965-ssi", 0);
             gpio_out[GPIO_D][0] = qdev_get_gpio_in(mux, 0);
 
-            bus = qdev_get_child_bus(mux, "ssi0");
+            bus = qdev_get_child_bus(mux, "ssi");
+
             ssi_create_slave(bus, "ssi-sd", 0);
 
-            bus = qdev_get_child_bus(mux, "ssi1");
-            dev = ssi_create_slave(bus, "ssd0323", 0);
+            dev = ssi_create_slave(bus, "ssd0323", 1);
             gpio_out[GPIO_C][7] = qdev_get_gpio_in(dev, 0);
 
             /* Make sure the select pin is high.  */