@ -13,23 +13,22 @@ class IOSpace(Elaboratable):
bmc_lpc_ctrl_addr=0x2000,
bmc_lpc_ctrl_addr=0x2000,
target_vuart_addr=0x3f8, target_ipmi_addr=0xe4):
target_vuart_addr=0x3f8, target_ipmi_addr=0xe4):
self.vuart_depth = vuart_depth
self.vuart_depth = vuart_depth
# BMC wishbone is 32 bit wide, so divide addresses by 4
self.bmc_vuart_addr = bmc_vuart_addr
self.bmc_vuart_addr = bmc_vuart_addr // 4
self.bmc_ipmi_addr = bmc_ipmi_addr
self.bmc_ipmi_addr = bmc_ipmi_addr // 4
self.bmc_lpc_ctrl_addr = bmc_lpc_ctrl_addr
self.bmc_lpc_ctrl_addr = bmc_lpc_ctrl_addr // 4
self.target_vuart_addr = target_vuart_addr
self.target_vuart_addr = target_vuart_addr
self.target_ipmi_addr = target_ipmi_addr
self.target_ipmi_addr = target_ipmi_addr
self.bmc_vuart_irq = Signal()
self.bmc_vuart_irq = Signal()
self.bmc_ipmi_irq = Signal()
self.bmc_ipmi_irq = Signal()
self.bmc_wb = WishboneInterface(addr_width=14, data_width=8)
self.bmc_wb = WishboneInterface(addr_width=14, data_width=32, granularity=8)
self.lpc_ctrl_wb = WishboneInterface(addr_width=3, data_width=32, granularity=8)
self.target_vuart_irq = Signal()
self.target_vuart_irq = Signal()
self.target_ipmi_irq = Signal()
self.target_ipmi_irq = Signal()
self.target_wb = WishboneInterface(addr_width=16, data_width=8, features=["err"])
self.target_wb = WishboneInterface(addr_width=16, data_width=8, features=["err"])
self.lpc_ctrl_wb = WishboneInterface(addr_width=3, data_width=8)
self.error_wb = WishboneInterface(addr_width=2, data_width=8,
self.error_wb = WishboneInterface(addr_width=2, data_width=8,
features=["err"])
features=["err"])
@ -40,18 +39,18 @@ class IOSpace(Elaboratable):
m.submodules.ipmi_bt = ipmi_bt = IPMI_BT()
m.submodules.ipmi_bt = ipmi_bt = IPMI_BT()
# BMC address decode
# BMC address decode
m.submodules.bmc_decode = bmc_decode = WishboneDecoder(addr_width=14, data_width=8, granularity=8)
m.submodules.bmc_decode = bmc_decode = WishboneDecoder(addr_width=14, data_width=32, granularity=8)
bmc_ipmi_bus = ipmi_bt.bmc_wb
bmc_ipmi_bus = ipmi_bt.bmc_wb
bmc_ipmi_bus.memory_map = MemoryMap(addr_width=3, data_width=8)
bmc_ipmi_bus.memory_map = MemoryMap(addr_width=5, data_width=8)
bmc_decode.add(bmc_ipmi_bus, addr=self.bmc_ipmi_addr)
bmc_decode.add(bmc_ipmi_bus, addr=self.bmc_ipmi_addr)
bmc_vuart_bus = vuart_joined.wb_a
bmc_vuart_bus = vuart_joined.wb_a
bmc_vuart_bus.memory_map = MemoryMap(addr_width=3, data_width=8)
bmc_vuart_bus.memory_map = MemoryMap(addr_width=5, data_width=8)
bmc_decode.add(bmc_vuart_bus, addr=self.bmc_vuart_addr)
bmc_decode.add(bmc_vuart_bus, addr=self.bmc_vuart_addr)
lpc_ctrl_bus = self.lpc_ctrl_wb
lpc_ctrl_bus = self.lpc_ctrl_wb
lpc_ctrl_bus.memory_map = MemoryMap(addr_width=3, data_width=8)
lpc_ctrl_bus.memory_map = MemoryMap(addr_width=5, data_width=8)
bmc_decode.add(lpc_ctrl_bus, addr=self.bmc_lpc_ctrl_addr)
bmc_decode.add(lpc_ctrl_bus, addr=self.bmc_lpc_ctrl_addr)
m.d.comb += [
m.d.comb += [