|
@@ -68,44 +68,45 @@ static void extioi_setirq(void *opaque, int irq, int level)
|
|
extioi_update_irq(s, irq, level);
|
|
extioi_update_irq(s, irq, level);
|
|
}
|
|
}
|
|
|
|
|
|
-static uint64_t extioi_readw(void *opaque, hwaddr addr, unsigned size)
|
|
|
|
|
|
+static MemTxResult extioi_readw(void *opaque, hwaddr addr, uint64_t *data,
|
|
|
|
+ unsigned size, MemTxAttrs attrs)
|
|
{
|
|
{
|
|
LoongArchExtIOI *s = LOONGARCH_EXTIOI(opaque);
|
|
LoongArchExtIOI *s = LOONGARCH_EXTIOI(opaque);
|
|
unsigned long offset = addr & 0xffff;
|
|
unsigned long offset = addr & 0xffff;
|
|
- uint32_t index, cpu, ret = 0;
|
|
|
|
|
|
+ uint32_t index, cpu;
|
|
|
|
|
|
switch (offset) {
|
|
switch (offset) {
|
|
case EXTIOI_NODETYPE_START ... EXTIOI_NODETYPE_END - 1:
|
|
case EXTIOI_NODETYPE_START ... EXTIOI_NODETYPE_END - 1:
|
|
index = (offset - EXTIOI_NODETYPE_START) >> 2;
|
|
index = (offset - EXTIOI_NODETYPE_START) >> 2;
|
|
- ret = s->nodetype[index];
|
|
|
|
|
|
+ *data = s->nodetype[index];
|
|
break;
|
|
break;
|
|
case EXTIOI_IPMAP_START ... EXTIOI_IPMAP_END - 1:
|
|
case EXTIOI_IPMAP_START ... EXTIOI_IPMAP_END - 1:
|
|
index = (offset - EXTIOI_IPMAP_START) >> 2;
|
|
index = (offset - EXTIOI_IPMAP_START) >> 2;
|
|
- ret = s->ipmap[index];
|
|
|
|
|
|
+ *data = s->ipmap[index];
|
|
break;
|
|
break;
|
|
case EXTIOI_ENABLE_START ... EXTIOI_ENABLE_END - 1:
|
|
case EXTIOI_ENABLE_START ... EXTIOI_ENABLE_END - 1:
|
|
index = (offset - EXTIOI_ENABLE_START) >> 2;
|
|
index = (offset - EXTIOI_ENABLE_START) >> 2;
|
|
- ret = s->enable[index];
|
|
|
|
|
|
+ *data = s->enable[index];
|
|
break;
|
|
break;
|
|
case EXTIOI_BOUNCE_START ... EXTIOI_BOUNCE_END - 1:
|
|
case EXTIOI_BOUNCE_START ... EXTIOI_BOUNCE_END - 1:
|
|
index = (offset - EXTIOI_BOUNCE_START) >> 2;
|
|
index = (offset - EXTIOI_BOUNCE_START) >> 2;
|
|
- ret = s->bounce[index];
|
|
|
|
|
|
+ *data = s->bounce[index];
|
|
break;
|
|
break;
|
|
case EXTIOI_COREISR_START ... EXTIOI_COREISR_END - 1:
|
|
case EXTIOI_COREISR_START ... EXTIOI_COREISR_END - 1:
|
|
index = ((offset - EXTIOI_COREISR_START) & 0x1f) >> 2;
|
|
index = ((offset - EXTIOI_COREISR_START) & 0x1f) >> 2;
|
|
cpu = ((offset - EXTIOI_COREISR_START) >> 8) & 0x3;
|
|
cpu = ((offset - EXTIOI_COREISR_START) >> 8) & 0x3;
|
|
- ret = s->coreisr[cpu][index];
|
|
|
|
|
|
+ *data = s->coreisr[cpu][index];
|
|
break;
|
|
break;
|
|
case EXTIOI_COREMAP_START ... EXTIOI_COREMAP_END - 1:
|
|
case EXTIOI_COREMAP_START ... EXTIOI_COREMAP_END - 1:
|
|
index = (offset - EXTIOI_COREMAP_START) >> 2;
|
|
index = (offset - EXTIOI_COREMAP_START) >> 2;
|
|
- ret = s->coremap[index];
|
|
|
|
|
|
+ *data = s->coremap[index];
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
- trace_loongarch_extioi_readw(addr, ret);
|
|
|
|
- return ret;
|
|
|
|
|
|
+ trace_loongarch_extioi_readw(addr, *data);
|
|
|
|
+ return MEMTX_OK;
|
|
}
|
|
}
|
|
|
|
|
|
static inline void extioi_enable_irq(LoongArchExtIOI *s, int index,\
|
|
static inline void extioi_enable_irq(LoongArchExtIOI *s, int index,\
|
|
@@ -127,8 +128,9 @@ static inline void extioi_enable_irq(LoongArchExtIOI *s, int index,\
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-static void extioi_writew(void *opaque, hwaddr addr,
|
|
|
|
- uint64_t val, unsigned size)
|
|
|
|
|
|
+static MemTxResult extioi_writew(void *opaque, hwaddr addr,
|
|
|
|
+ uint64_t val, unsigned size,
|
|
|
|
+ MemTxAttrs attrs)
|
|
{
|
|
{
|
|
LoongArchExtIOI *s = LOONGARCH_EXTIOI(opaque);
|
|
LoongArchExtIOI *s = LOONGARCH_EXTIOI(opaque);
|
|
int i, cpu, index, old_data, irq;
|
|
int i, cpu, index, old_data, irq;
|
|
@@ -231,11 +233,12 @@ static void extioi_writew(void *opaque, hwaddr addr,
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+ return MEMTX_OK;
|
|
}
|
|
}
|
|
|
|
|
|
static const MemoryRegionOps extioi_ops = {
|
|
static const MemoryRegionOps extioi_ops = {
|
|
- .read = extioi_readw,
|
|
|
|
- .write = extioi_writew,
|
|
|
|
|
|
+ .read_with_attrs = extioi_readw,
|
|
|
|
+ .write_with_attrs = extioi_writew,
|
|
.impl.min_access_size = 4,
|
|
.impl.min_access_size = 4,
|
|
.impl.max_access_size = 4,
|
|
.impl.max_access_size = 4,
|
|
.valid.min_access_size = 4,
|
|
.valid.min_access_size = 4,
|