hw/hppa: Enable LASI i82596 network on 715 machine
Enable the i82596 network chip which is included in the LASI multi I/O chip. Since LASI has different start addresses on the various machines, always initialize the LASI components by their offsets. Tested-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Soumyajyotii Ssarkar <soumyajyotisarkar23@gmail.com> Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
parent
a8e63c0130
commit
b2d0bf872d
4 changed files with 26 additions and 48 deletions
|
|
@ -21,14 +21,6 @@
|
||||||
#define DINO_SCSI_HPA 0xfff8c000
|
#define DINO_SCSI_HPA 0xfff8c000
|
||||||
#define LASI_HPA_715 0xf0100000
|
#define LASI_HPA_715 0xf0100000
|
||||||
#define LASI_HPA 0xffd00000
|
#define LASI_HPA 0xffd00000
|
||||||
#define LASI_UART_HPA 0xffd05000
|
|
||||||
#define LASI_SCSI_HPA 0xffd06000
|
|
||||||
#define LASI_LAN_HPA 0xffd07000
|
|
||||||
#define LASI_RTC_HPA 0xffd09000
|
|
||||||
#define LASI_LPT_HPA 0xffd02000
|
|
||||||
#define LASI_AUDIO_HPA 0xffd04000
|
|
||||||
#define LASI_PS2KBD_HPA 0xffd08000
|
|
||||||
#define LASI_PS2MOU_HPA 0xffd08100
|
|
||||||
#define LASI_GFX_HPA 0xf8000000
|
#define LASI_GFX_HPA 0xf8000000
|
||||||
#define ARTIST_FB_ADDR 0xf9000000
|
#define ARTIST_FB_ADDR 0xf9000000
|
||||||
#define CPU_HPA 0xfffb0000
|
#define CPU_HPA 0xfffb0000
|
||||||
|
|
@ -44,6 +36,8 @@
|
||||||
|
|
||||||
#define SCSI_HPA 0xf1040000 /* emulated SCSI, needs to be in f region */
|
#define SCSI_HPA 0xf1040000 /* emulated SCSI, needs to be in f region */
|
||||||
|
|
||||||
|
#define HPA_DISABLED_DEVICE 1 /* add to HPA to disable */
|
||||||
|
|
||||||
/* offsets to DINO HPA: */
|
/* offsets to DINO HPA: */
|
||||||
#define DINO_PCI_ADDR 0x064
|
#define DINO_PCI_ADDR 0x064
|
||||||
#define DINO_CONFIG_DATA 0x068
|
#define DINO_CONFIG_DATA 0x068
|
||||||
|
|
|
||||||
|
|
@ -50,8 +50,6 @@ struct HppaMachineState {
|
||||||
#define HPA_POWER_BUTTON (FIRMWARE_END - 0x10)
|
#define HPA_POWER_BUTTON (FIRMWARE_END - 0x10)
|
||||||
static hwaddr soft_power_reg;
|
static hwaddr soft_power_reg;
|
||||||
|
|
||||||
#define enable_lasi_lan() 0
|
|
||||||
|
|
||||||
static DeviceState *lasi_dev;
|
static DeviceState *lasi_dev;
|
||||||
|
|
||||||
static void hppa_powerdown_req(Notifier *n, void *opaque)
|
static void hppa_powerdown_req(Notifier *n, void *opaque)
|
||||||
|
|
@ -376,13 +374,6 @@ static void machine_HP_common_init_tail(MachineState *machine, PCIBus *pci_bus,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Network setup. */
|
|
||||||
if (lasi_dev) {
|
|
||||||
lasi_82596_init(addr_space, translate(NULL, LASI_LAN_HPA),
|
|
||||||
qdev_get_gpio_in(lasi_dev, LASI_IRQ_LAN_HPA),
|
|
||||||
enable_lasi_lan());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pci_bus) {
|
if (pci_bus) {
|
||||||
pci_init_nic_devices(pci_bus, mc->default_nic);
|
pci_init_nic_devices(pci_bus, mc->default_nic);
|
||||||
|
|
||||||
|
|
@ -595,6 +586,17 @@ static void machine_HP_715_init(MachineState *machine)
|
||||||
lasi_ncr710_handle_legacy_cmdline(dev);
|
lasi_ncr710_handle_legacy_cmdline(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* LASI i82596 network */
|
||||||
|
dev = qemu_create_nic_device(TYPE_LASI_82596, true, "lasi");
|
||||||
|
if (dev) {
|
||||||
|
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
|
||||||
|
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
|
||||||
|
qdev_get_gpio_in(lasi_dev, LASI_IRQ_LAN_HPA));
|
||||||
|
memory_region_add_subregion(addr_space,
|
||||||
|
translate(NULL, LASI_HPA_715 + LASI_LAN),
|
||||||
|
sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0));
|
||||||
|
}
|
||||||
|
|
||||||
/* Add NICs, graphics & load firmware */
|
/* Add NICs, graphics & load firmware */
|
||||||
machine_HP_common_init_tail(machine, NULL, translate);
|
machine_HP_common_init_tail(machine, NULL, translate);
|
||||||
}
|
}
|
||||||
|
|
@ -638,7 +640,7 @@ static void machine_HP_B160L_init(MachineState *machine)
|
||||||
assert(isa_bus);
|
assert(isa_bus);
|
||||||
|
|
||||||
/* Serial ports: Lasi and Dino use a 7.272727 MHz clock. */
|
/* Serial ports: Lasi and Dino use a 7.272727 MHz clock. */
|
||||||
serial_mm_init(addr_space, translate(NULL, LASI_UART_HPA + 0x800), 0,
|
serial_mm_init(addr_space, translate(NULL, LASI_HPA + LASI_UART + 0x800), 0,
|
||||||
qdev_get_gpio_in(lasi_dev, LASI_IRQ_UART_HPA), 7272727 / 16,
|
qdev_get_gpio_in(lasi_dev, LASI_IRQ_UART_HPA), 7272727 / 16,
|
||||||
serial_hd(0), DEVICE_BIG_ENDIAN);
|
serial_hd(0), DEVICE_BIG_ENDIAN);
|
||||||
|
|
||||||
|
|
@ -647,7 +649,8 @@ static void machine_HP_B160L_init(MachineState *machine)
|
||||||
serial_hd(1), DEVICE_BIG_ENDIAN);
|
serial_hd(1), DEVICE_BIG_ENDIAN);
|
||||||
|
|
||||||
/* Parallel port */
|
/* Parallel port */
|
||||||
parallel_mm_init(addr_space, translate(NULL, LASI_LPT_HPA + 0x800), 0,
|
parallel_mm_init(addr_space,
|
||||||
|
translate(NULL, LASI_HPA + LASI_LPT + 0x800), 0,
|
||||||
qdev_get_gpio_in(lasi_dev, LASI_IRQ_LPT_HPA),
|
qdev_get_gpio_in(lasi_dev, LASI_IRQ_LPT_HPA),
|
||||||
parallel_hds[0]);
|
parallel_hds[0]);
|
||||||
|
|
||||||
|
|
@ -657,11 +660,11 @@ static void machine_HP_B160L_init(MachineState *machine)
|
||||||
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
|
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
|
||||||
qdev_get_gpio_in(lasi_dev, LASI_IRQ_PS2KBD_HPA));
|
qdev_get_gpio_in(lasi_dev, LASI_IRQ_PS2KBD_HPA));
|
||||||
memory_region_add_subregion(addr_space,
|
memory_region_add_subregion(addr_space,
|
||||||
translate(NULL, LASI_PS2KBD_HPA),
|
translate(NULL, LASI_HPA + LASI_PS2),
|
||||||
sysbus_mmio_get_region(SYS_BUS_DEVICE(dev),
|
sysbus_mmio_get_region(SYS_BUS_DEVICE(dev),
|
||||||
0));
|
0));
|
||||||
memory_region_add_subregion(addr_space,
|
memory_region_add_subregion(addr_space,
|
||||||
translate(NULL, LASI_PS2KBD_HPA + 0x100),
|
translate(NULL, LASI_HPA + LASI_PS2 + 0x100),
|
||||||
sysbus_mmio_get_region(SYS_BUS_DEVICE(dev),
|
sysbus_mmio_get_region(SYS_BUS_DEVICE(dev),
|
||||||
1));
|
1));
|
||||||
|
|
||||||
|
|
@ -832,7 +835,7 @@ static void HP_715_machine_init_class_init(ObjectClass *oc, const void *data)
|
||||||
/* can only support up to max. 8 CPUs due inventory major numbers */
|
/* can only support up to max. 8 CPUs due inventory major numbers */
|
||||||
mc->max_cpus = MIN_CONST(HPPA_MAX_CPUS, 8);
|
mc->max_cpus = MIN_CONST(HPPA_MAX_CPUS, 8);
|
||||||
mc->default_ram_size = 256 * MiB;
|
mc->default_ram_size = 256 * MiB;
|
||||||
mc->default_nic = NULL;
|
mc->default_nic = TYPE_LASI_82596;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,32 +115,12 @@ static void lasi_82596_realize(DeviceState *dev, Error **errp)
|
||||||
memory_region_init_io(&s->mmio, OBJECT(d), &lasi_82596_mem_ops, d,
|
memory_region_init_io(&s->mmio, OBJECT(d), &lasi_82596_mem_ops, d,
|
||||||
"lasi_82596-mmio", PA_GET_MACADDR + 4);
|
"lasi_82596-mmio", PA_GET_MACADDR + 4);
|
||||||
|
|
||||||
|
sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq);
|
||||||
|
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->mmio);
|
||||||
|
|
||||||
i82596_common_init(dev, s, &net_lasi_82596_info);
|
i82596_common_init(dev, s, &net_lasi_82596_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
SysBusI82596State *lasi_82596_init(MemoryRegion *addr_space, hwaddr hpa,
|
|
||||||
qemu_irq lan_irq, gboolean match_default)
|
|
||||||
{
|
|
||||||
DeviceState *dev;
|
|
||||||
SysBusI82596State *s;
|
|
||||||
static const MACAddr HP_MAC = {
|
|
||||||
.a = { 0x08, 0x00, 0x09, 0xef, 0x34, 0xf6 } };
|
|
||||||
|
|
||||||
dev = qemu_create_nic_device(TYPE_LASI_82596, match_default, "lasi");
|
|
||||||
if (!dev) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
s = SYSBUS_I82596(dev);
|
|
||||||
s->state.irq = lan_irq;
|
|
||||||
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
|
|
||||||
s->state.conf.macaddr = HP_MAC; /* set HP MAC prefix */
|
|
||||||
|
|
||||||
/* LASI 82596 ports in main memory. */
|
|
||||||
memory_region_add_subregion(addr_space, hpa, &s->state.mmio);
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void lasi_82596_reset(DeviceState *dev)
|
static void lasi_82596_reset(DeviceState *dev)
|
||||||
{
|
{
|
||||||
SysBusI82596State *d = SYSBUS_I82596(dev);
|
SysBusI82596State *d = SYSBUS_I82596(dev);
|
||||||
|
|
@ -152,6 +132,10 @@ static void lasi_82596_instance_init(Object *obj)
|
||||||
{
|
{
|
||||||
SysBusI82596State *d = SYSBUS_I82596(obj);
|
SysBusI82596State *d = SYSBUS_I82596(obj);
|
||||||
I82596State *s = &d->state;
|
I82596State *s = &d->state;
|
||||||
|
static const MACAddr HP_MAC = {
|
||||||
|
.a = { 0x08, 0x00, 0x09, 0xef, 0x34, 0xf6 } };
|
||||||
|
|
||||||
|
s->conf.macaddr = HP_MAC;
|
||||||
|
|
||||||
device_add_bootindex_property(obj, &s->conf.bootindex,
|
device_add_bootindex_property(obj, &s->conf.bootindex,
|
||||||
"bootindex", "/ethernet-phy@0",
|
"bootindex", "/ethernet-phy@0",
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,4 @@ struct SysBusI82596State {
|
||||||
int val_index:1;
|
int val_index:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
SysBusI82596State *lasi_82596_init(MemoryRegion *addr_space, hwaddr hpa,
|
|
||||||
qemu_irq irq, gboolean match_default);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue