The Ampere/Lenvo HR330A firmware doesn't set the _TTP bit on the IO
window of its host bridges. It really should since these bridges
translate memory transactions into io transactions. But it isn't the
only one that doesn't get this aspect right. So it is probably best
to ignore _TTP and just assume it converts memory transactions into io
transactions.
ok?
Index: arch/arm64/dev/acpipci.c
===================================================================
RCS file: /cvs/src/sys/arch/arm64/dev/acpipci.c,v
retrieving revision 1.12
diff -u -p -r1.12 acpipci.c
--- arch/arm64/dev/acpipci.c 30 Jul 2019 21:44:15 -0000 1.12
+++ arch/arm64/dev/acpipci.c 20 Aug 2019 18:43:15 -0000
@@ -253,8 +253,10 @@ acpipci_parse_resources(int crsidx, unio
sc->sc_mem_trans = at;
break;
case LR_TYPE_IO:
- if ((tflags & LR_IO_TTP) == 0)
- return 0;
+ /*
+ * Don't check _TTP as various firmwares don't set it,
+ * even though they should!!
+ */
extent_free(sc->sc_ioex, min, len, EX_WAITOK);
at = malloc(sizeof(struct acpipci_trans), M_DEVBUF, M_WAITOK);
at->at_iot = sc->sc_iot;