Module Name: src Committed By: nonaka Date: Mon May 29 02:24:00 UTC 2017
Modified Files: src/sys/dev/ic: nvme.c Log Message: nvme(4): Do not use bus_space_{read,write}_8() even on LP64 archs. > some (broken) controllers require ordered split transfers. > From linux a310acd7a7ea53533886c11bb7edd11ffd61a036 from OpenBSD nvme.c r1.53. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/dev/ic/nvme.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/ic/nvme.c diff -u src/sys/dev/ic/nvme.c:1.27 src/sys/dev/ic/nvme.c:1.28 --- src/sys/dev/ic/nvme.c:1.27 Mon May 29 02:20:34 2017 +++ src/sys/dev/ic/nvme.c Mon May 29 02:24:00 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: nvme.c,v 1.27 2017/05/29 02:20:34 nonaka Exp $ */ +/* $NetBSD: nvme.c,v 1.28 2017/05/29 02:24:00 nonaka Exp $ */ /* $OpenBSD: nvme.c,v 1.49 2016/04/18 05:59:50 dlg Exp $ */ /* @@ -18,7 +18,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nvme.c,v 1.27 2017/05/29 02:20:34 nonaka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nvme.c,v 1.28 2017/05/29 02:24:00 nonaka Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -121,12 +121,10 @@ static int nvme_get_number_of_queues(str bus_space_read_4((_s)->sc_iot, (_s)->sc_ioh, (_r)) #define nvme_write4(_s, _r, _v) \ bus_space_write_4((_s)->sc_iot, (_s)->sc_ioh, (_r), (_v)) -#ifdef __LP64__ -#define nvme_read8(_s, _r) \ - bus_space_read_8((_s)->sc_iot, (_s)->sc_ioh, (_r)) -#define nvme_write8(_s, _r, _v) \ - bus_space_write_8((_s)->sc_iot, (_s)->sc_ioh, (_r), (_v)) -#else /* __LP64__ */ +/* + * Some controllers, at least Apple NVMe, always require split + * transfers, so don't use bus_space_{read,write}_8() on LP64. + */ static inline uint64_t nvme_read8(struct nvme_softc *sc, bus_size_t r) { @@ -157,7 +155,6 @@ nvme_write8(struct nvme_softc *sc, bus_s nvme_write4(sc, r + 4, a[0]); #endif } -#endif /* __LP64__ */ #define nvme_barrier(_s, _r, _l, _f) \ bus_space_barrier((_s)->sc_iot, (_s)->sc_ioh, (_r), (_l), (_f))