1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-14 14:55:41 +00:00

Re-reading the Schizo errata suggests that it's actually tolerable to

also use the streaming buffer of pre version 5/revision 2.3 hardware as
long as we stay away from context flushes (which iommu(4) so far doesn't
take advantage of). OpenSolaris does the same.
This commit is contained in:
Marius Strobl 2011-10-01 00:31:30 +00:00
parent 0224e43d7c
commit 64020d8477
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=225891

View File

@ -501,7 +501,8 @@ schizo_attach(device_t dev)
* Set up the IOMMU. Schizo, Tomatillo and XMITS all have * Set up the IOMMU. Schizo, Tomatillo and XMITS all have
* one per PBM. Schizo and XMITS additionally have a streaming * one per PBM. Schizo and XMITS additionally have a streaming
* buffer, in Schizo version < 5 (i.e. revision < 2.3) it's * buffer, in Schizo version < 5 (i.e. revision < 2.3) it's
* affected by several errata and basically unusable though. * affected by several errata though. However, except for context
* flushes, taking advantage of it should be okay even with those.
*/ */
memcpy(&sc->sc_dma_methods, &iommu_dma_methods, memcpy(&sc->sc_dma_methods, &iommu_dma_methods,
sizeof(sc->sc_dma_methods)); sizeof(sc->sc_dma_methods));
@ -509,8 +510,7 @@ schizo_attach(device_t dev)
sc->sc_is.sis_is.is_flags = IOMMU_PRESERVE_PROM; sc->sc_is.sis_is.is_flags = IOMMU_PRESERVE_PROM;
sc->sc_is.sis_is.is_pmaxaddr = IOMMU_MAXADDR(STX_IOMMU_BITS); sc->sc_is.sis_is.is_pmaxaddr = IOMMU_MAXADDR(STX_IOMMU_BITS);
sc->sc_is.sis_is.is_sb[0] = sc->sc_is.sis_is.is_sb[1] = 0; sc->sc_is.sis_is.is_sb[0] = sc->sc_is.sis_is.is_sb[1] = 0;
if (OF_getproplen(node, "no-streaming-cache") < 0 && if (OF_getproplen(node, "no-streaming-cache") < 0)
!(sc->sc_mode == SCHIZO_MODE_SCZ && sc->sc_ver < 5))
sc->sc_is.sis_is.is_sb[0] = STX_PCI_STRBUF; sc->sc_is.sis_is.is_sb[0] = STX_PCI_STRBUF;
#define TSBCASE(x) \ #define TSBCASE(x) \