CP_WRITE
CP_WRITE(sc, CP_CR, 0);
CP_WRITE(sc, CP_CLEAR, CP_CLEAR_UNDERFLOW | CP_CLEAR_OVERFLOW);
CP_WRITE(sc, CP_FIFO_BASE_LO, LOWER_16_BITS(fifo_start));
CP_WRITE(sc, CP_FIFO_BASE_HI, UPPER_16_BITS(fifo_start));
CP_WRITE(sc, CP_FIFO_END_LO, LOWER_16_BITS(fifo_end));
CP_WRITE(sc, CP_FIFO_END_HI, UPPER_16_BITS(fifo_end));
CP_WRITE(sc, CP_FIFO_HIWAT_LO, LOWER_16_BITS(fifo_hiwat));
CP_WRITE(sc, CP_FIFO_HIWAT_HI, UPPER_16_BITS(fifo_hiwat));
CP_WRITE(sc, CP_FIFO_LOWAT_LO, LOWER_16_BITS(fifo_lowat));
CP_WRITE(sc, CP_FIFO_LOWAT_HI, UPPER_16_BITS(fifo_lowat));
CP_WRITE(sc, CP_FIFO_RW_DIST_LO, 0);
CP_WRITE(sc, CP_FIFO_RW_DIST_HI, 0);
CP_WRITE(sc, CP_FIFO_WRITE_PTR_LO, LOWER_16_BITS(fifo_start));
CP_WRITE(sc, CP_FIFO_WRITE_PTR_HI, UPPER_16_BITS(fifo_start));
CP_WRITE(sc, CP_FIFO_READ_PTR_LO, LOWER_16_BITS(fifo_start));
CP_WRITE(sc, CP_FIFO_READ_PTR_HI, UPPER_16_BITS(fifo_start));
CP_WRITE(sc, CP_CR, CP_CR_GP_LINK_ENABLE);
CP_WRITE(sc, CP_CR, CP_READ(sc, CP_CR) | CP_CR_READ_ENABLE);