On Thu, 4 Jan 2024, deller@kernel.org wrote:
> From: Helge Deller <deller@gmx.de>
>
> NetBSD accesses some astro and elroy registers which aren't accesses
Typo: accessed by Linux
Regards,
BALATON Zoltan
> by Linux yet. Add emulation for those registers to allow NetBSD to
> boot further.
> Please note that this patch is not sufficient to completely boot up
> NetBSD on the 64-bit C3700 machine yet.
>
> Signed-off-by: Helge Deller <deller@gmx.de>
> ---
> hw/pci-host/astro.c | 26 +++++++++++++++++++++++---
> 1 file changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/hw/pci-host/astro.c b/hw/pci-host/astro.c
> index 7d68ccee7e..cb2c8a828d 100644
> --- a/hw/pci-host/astro.c
> +++ b/hw/pci-host/astro.c
> @@ -166,6 +166,8 @@ static MemTxResult elroy_chip_write_with_attrs(void *opaque, hwaddr addr,
> trace_elroy_write(addr, size, val);
>
> switch ((addr >> 3) << 3) {
> + case 0x000: /* PCI_ID & PCI_COMMAND_STATUS_REG */
> + break;
> case 0x080:
> put_val_in_int64(&s->arb_mask, addr, size, val);
> break;
> @@ -175,6 +177,9 @@ static MemTxResult elroy_chip_write_with_attrs(void *opaque, hwaddr addr,
> case 0x200 ... 0x250 - 1: /* LMMIO, GMMIO, WLMMIO, WGMMIO, ... */
> put_val_in_arrary(s->mmio_base, 0x200, addr, size, val);
> break;
> + case 0x300: /* ibase */
> + case 0x308: /* imask */
> + break;
> case 0x0680:
> put_val_in_int64(&s->error_config, addr, size, val);
> break;
> @@ -538,6 +543,9 @@ static MemTxResult astro_chip_read_with_attrs(void *opaque, hwaddr addr,
> case 0x0030: /* HP-UX 10.20 and 11.11 reads it. No idea. */
> val = -1;
> break;
> + case 0x0078: /* NetBSD reads 0x78 ? */
> + val = -1;
> + break;
> case 0x0300 ... 0x03d8: /* LMMIO_DIRECT0_BASE... */
> index = (addr - 0x300) / 8;
> val = s->ioc_ranges[index];
> @@ -624,31 +632,43 @@ static MemTxResult astro_chip_write_with_attrs(void *opaque, hwaddr addr,
> case 0x10220:
> case 0x10230: /* HP-UX 11.11 reads it. No idea. */
> break;
> - case 0x22108: /* IOC STATUS_CONTROL */
> - put_val_in_int64(&s->ioc_status_ctrl, addr, size, val);
> - break;
> case 0x20200 ... 0x20240 - 1: /* IOC Rope0_Control ... */
> put_val_in_arrary(s->ioc_rope_control, 0x20200, addr, size, val);
> break;
> case 0x20040: /* IOC Rope config */
> + case 0x22040:
> put_val_in_int64(&s->ioc_rope_config, addr, size, val);
> break;
> case 0x20300:
> + case 0x22300:
> put_val_in_int64(&s->tlb_ibase, addr, size, val);
> break;
> case 0x20308:
> + case 0x22308:
> put_val_in_int64(&s->tlb_imask, addr, size, val);
> break;
> case 0x20310:
> + case 0x22310:
> put_val_in_int64(&s->tlb_pcom, addr, size, val);
> /* TODO: flush iommu */
> break;
> case 0x20318:
> + case 0x22318:
> put_val_in_int64(&s->tlb_tcnfg, addr, size, val);
> break;
> case 0x20320:
> + case 0x22320:
> put_val_in_int64(&s->tlb_pdir_base, addr, size, val);
> break;
> + case 0x22000: /* func_id */
> + break;
> + case 0x22008: /* func_class */
> + break;
> + case 0x22050: /* rope_debug */
> + break;
> + case 0x22108: /* IOC STATUS_CONTROL */
> + put_val_in_int64(&s->ioc_status_ctrl, addr, size, val);
> + break;
> /*
> * empty placeholders for non-existent elroys, e.g.
> * func_class, pci config & data
> --
> 2.43.0
>
>
>