return 1;
 }
 
-static void rockchip_spi_config(struct rockchip_spi *rs,
+static int rockchip_spi_config(struct rockchip_spi *rs,
                struct spi_device *spi, struct spi_transfer *xfer,
                bool use_dma, bool slave_mode)
 {
                 * ctlr->bits_per_word_mask, so this shouldn't
                 * happen
                 */
-               unreachable();
+               dev_err(rs->dev, "unknown bits per word: %d\n",
+                       xfer->bits_per_word);
+               return -EINVAL;
        }
 
        if (use_dma) {
         */
        writel_relaxed(2 * DIV_ROUND_UP(rs->freq, 2 * xfer->speed_hz),
                        rs->regs + ROCKCHIP_SPI_BAUDR);
+
+       return 0;
 }
 
 static size_t rockchip_spi_max_transfer_size(struct spi_device *spi)
                struct spi_transfer *xfer)
 {
        struct rockchip_spi *rs = spi_controller_get_devdata(ctlr);
+       int ret;
        bool use_dma;
 
        WARN_ON(readl_relaxed(rs->regs + ROCKCHIP_SPI_SSIENR) &&
 
        use_dma = ctlr->can_dma ? ctlr->can_dma(ctlr, spi, xfer) : false;
 
-       rockchip_spi_config(rs, spi, xfer, use_dma, ctlr->slave);
+       ret = rockchip_spi_config(rs, spi, xfer, use_dma, ctlr->slave);
+       if (ret)
+               return ret;
 
        if (use_dma)
                return rockchip_spi_prepare_dma(rs, ctlr, xfer);