|
@@ -487,11 +487,11 @@ static struct rsnd_mod_ops rsnd_dmapp_ops = {
|
|
|
#define RDMA_SSI_I_N(addr, i) (addr ##_reg - 0x00300000 + (0x40 * i) + 0x8)
|
|
|
#define RDMA_SSI_O_N(addr, i) (addr ##_reg - 0x00300000 + (0x40 * i) + 0xc)
|
|
|
|
|
|
-#define RDMA_SSIU_I_N(addr, i) (addr ##_reg - 0x00441000 + (0x1000 * i))
|
|
|
-#define RDMA_SSIU_O_N(addr, i) (addr ##_reg - 0x00441000 + (0x1000 * i))
|
|
|
+#define RDMA_SSIU_I_N(addr, i, j) (addr ##_reg - 0x00441000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400))
|
|
|
+#define RDMA_SSIU_O_N(addr, i, j) RDMA_SSIU_I_N(addr, i, j)
|
|
|
|
|
|
-#define RDMA_SSIU_I_P(addr, i) (addr ##_reg - 0x00141000 + (0x1000 * i))
|
|
|
-#define RDMA_SSIU_O_P(addr, i) (addr ##_reg - 0x00141000 + (0x1000 * i))
|
|
|
+#define RDMA_SSIU_I_P(addr, i, j) (addr ##_reg - 0x00141000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400))
|
|
|
+#define RDMA_SSIU_O_P(addr, i, j) RDMA_SSIU_I_P(addr, i, j)
|
|
|
|
|
|
#define RDMA_SRC_I_N(addr, i) (addr ##_reg - 0x00500000 + (0x400 * i))
|
|
|
#define RDMA_SRC_O_N(addr, i) (addr ##_reg - 0x004fc000 + (0x400 * i))
|
|
@@ -517,6 +517,7 @@ rsnd_gen2_dma_addr(struct rsnd_dai_stream *io,
|
|
|
!!rsnd_io_to_mod_mix(io) ||
|
|
|
!!rsnd_io_to_mod_ctu(io);
|
|
|
int id = rsnd_mod_id(mod);
|
|
|
+ int busif = rsnd_ssi_get_busif(io);
|
|
|
struct dma_addr {
|
|
|
dma_addr_t out_addr;
|
|
|
dma_addr_t in_addr;
|
|
@@ -533,25 +534,35 @@ rsnd_gen2_dma_addr(struct rsnd_dai_stream *io,
|
|
|
},
|
|
|
/* SSI */
|
|
|
/* Capture */
|
|
|
- {{{ RDMA_SSI_O_N(ssi, id), 0 },
|
|
|
- { RDMA_SSIU_O_P(ssi, id), 0 },
|
|
|
- { RDMA_SSIU_O_P(ssi, id), 0 } },
|
|
|
+ {{{ RDMA_SSI_O_N(ssi, id), 0 },
|
|
|
+ { RDMA_SSIU_O_P(ssi, id, busif), 0 },
|
|
|
+ { RDMA_SSIU_O_P(ssi, id, busif), 0 } },
|
|
|
/* Playback */
|
|
|
- {{ 0, RDMA_SSI_I_N(ssi, id) },
|
|
|
- { 0, RDMA_SSIU_I_P(ssi, id) },
|
|
|
- { 0, RDMA_SSIU_I_P(ssi, id) } }
|
|
|
+ {{ 0, RDMA_SSI_I_N(ssi, id) },
|
|
|
+ { 0, RDMA_SSIU_I_P(ssi, id, busif) },
|
|
|
+ { 0, RDMA_SSIU_I_P(ssi, id, busif) } }
|
|
|
},
|
|
|
/* SSIU */
|
|
|
/* Capture */
|
|
|
- {{{ RDMA_SSIU_O_N(ssi, id), 0 },
|
|
|
- { RDMA_SSIU_O_P(ssi, id), 0 },
|
|
|
- { RDMA_SSIU_O_P(ssi, id), 0 } },
|
|
|
+ {{{ RDMA_SSIU_O_N(ssi, id, busif), 0 },
|
|
|
+ { RDMA_SSIU_O_P(ssi, id, busif), 0 },
|
|
|
+ { RDMA_SSIU_O_P(ssi, id, busif), 0 } },
|
|
|
/* Playback */
|
|
|
- {{ 0, RDMA_SSIU_I_N(ssi, id) },
|
|
|
- { 0, RDMA_SSIU_I_P(ssi, id) },
|
|
|
- { 0, RDMA_SSIU_I_P(ssi, id) } } },
|
|
|
+ {{ 0, RDMA_SSIU_I_N(ssi, id, busif) },
|
|
|
+ { 0, RDMA_SSIU_I_P(ssi, id, busif) },
|
|
|
+ { 0, RDMA_SSIU_I_P(ssi, id, busif) } } },
|
|
|
};
|
|
|
|
|
|
+ /*
|
|
|
+ * FIXME
|
|
|
+ *
|
|
|
+ * We can't support SSI9-4/5/6/7, because its address is
|
|
|
+ * out of calculation rule
|
|
|
+ */
|
|
|
+ if ((id == 9) && (busif >= 4))
|
|
|
+ dev_err(dev, "This driver doesn't support SSI%d-%d, so far",
|
|
|
+ id, busif);
|
|
|
+
|
|
|
/* it shouldn't happen */
|
|
|
if (use_cmd && !use_src)
|
|
|
dev_err(dev, "DVC is selected without SRC\n");
|