]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[qib7322] Use standard readq() and writeq() implementations
authorMichael Brown <mcb30@ipxe.org>
Sat, 12 Mar 2016 17:51:59 +0000 (17:51 +0000)
committerMichael Brown <mcb30@ipxe.org>
Sat, 12 Mar 2016 17:51:59 +0000 (17:51 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/infiniband/qib7322.c

index e22f2349a343b5374d3dd462c2bd925f90c748b4..08cedcb7e8ad16999ae0365ce47a3a54da6b6bce 100644 (file)
@@ -137,32 +137,21 @@ struct qib7322 {
  * This card requires atomic 64-bit accesses.  Strange things happen
  * if you try to use 32-bit accesses; sometimes they work, sometimes
  * they don't, sometimes you get random data.
- *
- * These accessors use the "movq" MMX instruction, and so won't work
- * on really old Pentiums (which won't have PCIe anyway, so this is
- * something of a moot point).
  */
 
 /**
  * Read QIB7322 qword register
  *
  * @v qib7322          QIB7322 device
- * @v dwords           Register buffer to read into
+ * @v qword            Register buffer to read into
  * @v offset           Register offset
  */
-static void qib7322_readq ( struct qib7322 *qib7322, uint32_t *dwords,
+static void qib7322_readq ( struct qib7322 *qib7322, uint64_t *qword,
                            unsigned long offset ) {
-       void *addr = ( qib7322->regs + offset );
-
-       __asm__ __volatile__ ( "movq (%1), %%mm0\n\t"
-                              "movq %%mm0, (%0)\n\t"
-                              : : "r" ( dwords ), "r" ( addr ) : "memory" );
-
-       DBGIO ( "[%08lx] => %08x%08x\n",
-               virt_to_phys ( addr ), dwords[1], dwords[0] );
+       *qword = readq ( qib7322->regs + offset );
 }
 #define qib7322_readq( _qib7322, _ptr, _offset ) \
-       qib7322_readq ( (_qib7322), (_ptr)->u.dwords, (_offset) )
+       qib7322_readq ( (_qib7322), (_ptr)->u.qwords, (_offset) )
 #define qib7322_readq_array8b( _qib7322, _ptr, _offset, _idx ) \
        qib7322_readq ( (_qib7322), (_ptr), ( (_offset) + ( (_idx) * 8 ) ) )
 #define qib7322_readq_array64k( _qib7322, _ptr, _offset, _idx ) \
@@ -174,22 +163,15 @@ static void qib7322_readq ( struct qib7322 *qib7322, uint32_t *dwords,
  * Write QIB7322 qword register
  *
  * @v qib7322          QIB7322 device
- * @v dwords           Register buffer to write
+ * @v qword            Register buffer to write
  * @v offset           Register offset
  */
-static void qib7322_writeq ( struct qib7322 *qib7322, const uint32_t *dwords,
+static void qib7322_writeq ( struct qib7322 *qib7322, const uint64_t *qword,
                             unsigned long offset ) {
-       void *addr = ( qib7322->regs + offset );
-
-       DBGIO ( "[%08lx] <= %08x%08x\n",
-               virt_to_phys ( addr ), dwords[1], dwords[0] );
-
-       __asm__ __volatile__ ( "movq (%0), %%mm0\n\t"
-                              "movq %%mm0, (%1)\n\t"
-                              : : "r" ( dwords ), "r" ( addr ) : "memory" );
+       writeq ( *qword, ( qib7322->regs + offset ) );
 }
 #define qib7322_writeq( _qib7322, _ptr, _offset ) \
-       qib7322_writeq ( (_qib7322), (_ptr)->u.dwords, (_offset) )
+       qib7322_writeq ( (_qib7322), (_ptr)->u.qwords, (_offset) )
 #define qib7322_writeq_array8b( _qib7322, _ptr, _offset, _idx ) \
        qib7322_writeq ( (_qib7322), (_ptr), ( (_offset) + ( (_idx) * 8 ) ) )
 #define qib7322_writeq_array64k( _qib7322, _ptr, _offset, _idx ) \