Lines Matching defs:solo_dev
28 int solo_p2m_dma(struct solo_dev *solo_dev, int wr,
40 dma_addr = dma_map_single(&solo_dev->pdev->dev, sys_addr, size,
42 if (dma_mapping_error(&solo_dev->pdev->dev, dma_addr))
45 ret = solo_p2m_dma_t(solo_dev, wr, dma_addr, ext_addr, size,
48 dma_unmap_single(&solo_dev->pdev->dev, dma_addr, size,
55 int solo_p2m_dma_desc(struct solo_dev *solo_dev,
66 if (solo_dev->type != SOLO_DEV_6110 && multi_p2m)
67 p2m_id = atomic_inc_return(&solo_dev->p2m_count) % SOLO_NR_P2M;
69 p2m_dev = &solo_dev->p2m_dev[p2m_id];
77 if (desc_cnt > 1 && solo_dev->type != SOLO_DEV_6110 && desc_mode) {
80 config = solo_reg_read(solo_dev, SOLO_P2M_CONFIG(p2m_id));
82 solo_reg_write(solo_dev, SOLO_P2M_DES_ADR(p2m_id), desc_dma);
83 solo_reg_write(solo_dev, SOLO_P2M_DESC_ID(p2m_id), desc_cnt);
84 solo_reg_write(solo_dev, SOLO_P2M_CONFIG(p2m_id), config |
92 solo_reg_write(solo_dev, SOLO_P2M_TAR_ADR(p2m_id),
94 solo_reg_write(solo_dev, SOLO_P2M_EXT_ADR(p2m_id),
96 solo_reg_write(solo_dev, SOLO_P2M_EXT_CFG(p2m_id),
98 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(p2m_id),
103 solo_dev->p2m_jiffies);
108 solo_dev->p2m_timeouts++;
112 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(p2m_id), 0);
116 if (desc_cnt > 1 && solo_dev->type != SOLO_DEV_6110 && config)
117 solo_reg_write(solo_dev, SOLO_P2M_CONFIG(p2m_id), config);
145 int solo_p2m_dma_t(struct solo_dev *solo_dev, int wr,
155 return solo_p2m_dma_desc(solo_dev, desc, 0, 1);
158 void solo_p2m_isr(struct solo_dev *solo_dev, int id)
160 struct solo_p2m_dev *p2m_dev = &solo_dev->p2m_dev[id];
172 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(id), 0);
173 solo_reg_write(solo_dev, SOLO_P2M_TAR_ADR(id), desc->dma_addr);
174 solo_reg_write(solo_dev, SOLO_P2M_EXT_ADR(id), desc->ext_addr);
175 solo_reg_write(solo_dev, SOLO_P2M_EXT_CFG(id), desc->cfg);
176 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(id), desc->ctrl);
179 void solo_p2m_error_isr(struct solo_dev *solo_dev)
181 unsigned int err = solo_reg_read(solo_dev, SOLO_PCI_ERR);
189 p2m_dev = &solo_dev->p2m_dev[i];
191 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(i), 0);
196 void solo_p2m_exit(struct solo_dev *solo_dev)
201 solo_irq_off(solo_dev, SOLO_IRQ_P2M(i));
204 static int solo_p2m_test(struct solo_dev *solo_dev, int base, int size)
230 if (solo_p2m_dma(solo_dev, 1, wr_buf, base, size, 0, 0))
233 if (solo_p2m_dma(solo_dev, 0, rd_buf, base, size, 0, 0))
250 int solo_p2m_init(struct solo_dev *solo_dev)
256 p2m_dev = &solo_dev->p2m_dev[i];
261 solo_reg_write(solo_dev, SOLO_P2M_CONTROL(i), 0);
262 solo_reg_write(solo_dev, SOLO_P2M_CONFIG(i),
267 solo_irq_on(solo_dev, SOLO_IRQ_P2M(i));
271 for (solo_dev->sdram_size = 0, i = 2; i >= 0; i--) {
272 solo_reg_write(solo_dev, SOLO_DMA_CTRL,
279 solo_reg_write(solo_dev, SOLO_SYS_CFG, solo_dev->sys_config |
281 solo_reg_write(solo_dev, SOLO_SYS_CFG, solo_dev->sys_config);
285 if (solo_p2m_test(solo_dev, 0x07ff0000, 0x00010000) ||
286 solo_p2m_test(solo_dev, 0x05ff0000, 0x00010000))
291 if (solo_p2m_test(solo_dev, 0x03ff0000, 0x00010000))
296 if (solo_p2m_test(solo_dev, 0x01ff0000, 0x00010000))
300 solo_dev->sdram_size = (32 << 20) << i;
304 if (!solo_dev->sdram_size) {
305 dev_err(&solo_dev->pdev->dev, "Error detecting SDRAM size\n");
309 if (SOLO_SDRAM_END(solo_dev) > solo_dev->sdram_size) {
310 dev_err(&solo_dev->pdev->dev,
312 solo_dev->sdram_size, SOLO_SDRAM_END(solo_dev));