Lines Matching refs:denali
21 #include "denali.h"
23 #define DENALI_NAND_NAME "denali-nand"
39 #define DENALI_BANK(denali) ((denali)->active_bank << 24)
59 static u32 denali_direct_read(struct denali_controller *denali, u32 addr)
61 return ioread32(denali->host + addr);
64 static void denali_direct_write(struct denali_controller *denali, u32 addr,
67 iowrite32(data, denali->host + addr);
76 static u32 denali_indexed_read(struct denali_controller *denali, u32 addr)
78 iowrite32(addr, denali->host + DENALI_INDEXED_CTRL);
79 return ioread32(denali->host + DENALI_INDEXED_DATA);
82 static void denali_indexed_write(struct denali_controller *denali, u32 addr,
85 iowrite32(addr, denali->host + DENALI_INDEXED_CTRL);
86 iowrite32(data, denali->host + DENALI_INDEXED_DATA);
89 static void denali_enable_irq(struct denali_controller *denali)
93 for (i = 0; i < denali->nbanks; i++)
94 iowrite32(U32_MAX, denali->reg + INTR_EN(i));
95 iowrite32(GLOBAL_INT_EN_FLAG, denali->reg + GLOBAL_INT_ENABLE);
98 static void denali_disable_irq(struct denali_controller *denali)
102 for (i = 0; i < denali->nbanks; i++)
103 iowrite32(0, denali->reg + INTR_EN(i));
104 iowrite32(0, denali->reg + GLOBAL_INT_ENABLE);
107 static void denali_clear_irq(struct denali_controller *denali,
111 iowrite32(irq_status, denali->reg + INTR_STATUS(bank));
114 static void denali_clear_irq_all(struct denali_controller *denali)
118 for (i = 0; i < denali->nbanks; i++)
119 denali_clear_irq(denali, i, U32_MAX);
124 struct denali_controller *denali = dev_id;
129 spin_lock(&denali->irq_lock);
131 for (i = 0; i < denali->nbanks; i++) {
132 irq_status = ioread32(denali->reg + INTR_STATUS(i));
136 denali_clear_irq(denali, i, irq_status);
138 if (i != denali->active_bank)
141 denali->irq_status |= irq_status;
143 if (denali->irq_status & denali->irq_mask)
144 complete(&denali->complete);
147 spin_unlock(&denali->irq_lock);
152 static void denali_reset_irq(struct denali_controller *denali)
156 spin_lock_irqsave(&denali->irq_lock, flags);
157 denali->irq_status = 0;
158 denali->irq_mask = 0;
159 spin_unlock_irqrestore(&denali->irq_lock, flags);
162 static u32 denali_wait_for_irq(struct denali_controller *denali, u32 irq_mask)
167 spin_lock_irqsave(&denali->irq_lock, flags);
169 irq_status = denali->irq_status;
173 spin_unlock_irqrestore(&denali->irq_lock, flags);
177 denali->irq_mask = irq_mask;
178 reinit_completion(&denali->complete);
179 spin_unlock_irqrestore(&denali->irq_lock, flags);
181 time_left = wait_for_completion_timeout(&denali->complete,
184 dev_err(denali->dev, "timeout while waiting for irq 0x%x\n",
189 return denali->irq_status;
194 struct denali_controller *denali = to_denali_controller(chip);
198 denali->active_bank = sel->bank;
201 denali->reg + PAGES_PER_BLOCK);
203 denali->reg + DEVICE_WIDTH);
204 iowrite32(mtd->writesize, denali->reg + DEVICE_MAIN_AREA_SIZE);
205 iowrite32(mtd->oobsize, denali->reg + DEVICE_SPARE_AREA_SIZE);
208 denali->reg + TWO_ROW_ADDR_CYCLES);
211 denali->reg + ECC_CORRECTION);
212 iowrite32(chip->ecc.size, denali->reg + CFG_DATA_BLOCK_SIZE);
213 iowrite32(chip->ecc.size, denali->reg + CFG_LAST_DATA_BLOCK_SIZE);
214 iowrite32(chip->ecc.steps, denali->reg + CFG_NUM_DATA_BLOCKS);
220 iowrite32(sel->hwhr2_and_we_2_re, denali->reg + TWHR2_AND_WE_2_RE);
222 denali->reg + TCWAW_AND_ADDR_2_DATA);
223 iowrite32(sel->re_2_we, denali->reg + RE_2_WE);
224 iowrite32(sel->acc_clks, denali->reg + ACC_CLKS);
225 iowrite32(sel->rdwr_en_lo_cnt, denali->reg + RDWR_EN_LO_CNT);
226 iowrite32(sel->rdwr_en_hi_cnt, denali->reg + RDWR_EN_HI_CNT);
227 iowrite32(sel->cs_setup_cnt, denali->reg + CS_SETUP_CNT);
228 iowrite32(sel->re_2_re, denali->reg + RE_2_RE);
244 struct denali_controller *denali = to_denali_controller(chip);
248 int oob_skip = denali->oob_skip_bytes;
281 struct denali_controller *denali = to_denali_controller(chip);
286 int oob_skip = denali->oob_skip_bytes;
411 struct denali_controller *denali = to_denali_controller(chip);
414 u8 *ecc_code = chip->oob_poi + denali->oob_skip_bytes;
441 struct denali_controller *denali = to_denali_controller(chip);
443 int bank = denali->active_bank;
447 ecc_cor = ioread32(denali->reg + ECC_COR_INFO(bank));
476 struct denali_controller *denali = to_denali_controller(chip);
487 denali_reset_irq(denali);
490 err_addr = ioread32(denali->reg + ECC_ERROR_ADDRESS);
494 err_cor_info = ioread32(denali->reg + ERR_CORRECTION_INFO);
522 denali->devs_per_cs + err_device;
540 irq_status = denali_wait_for_irq(denali, INTR__ECC_TRANSACTION_DONE);
547 static void denali_setup_dma64(struct denali_controller *denali,
553 mode = DENALI_MAP10 | DENALI_BANK(denali) | page;
561 denali->host_write(denali, mode,
566 denali->host_write(denali, mode, lower_32_bits(dma_addr));
569 denali->host_write(denali, mode, upper_32_bits(dma_addr));
572 static void denali_setup_dma32(struct denali_controller *denali,
578 mode = DENALI_MAP10 | DENALI_BANK(denali);
583 denali->host_write(denali, mode | page,
587 denali->host_write(denali, mode | ((dma_addr >> 16) << 8), 0x2200);
590 denali->host_write(denali, mode | ((dma_addr & 0xffff) << 8), 0x2300);
593 denali->host_write(denali, mode | 0x14000, 0x2400);
596 static int denali_pio_read(struct denali_controller *denali, u32 *buf,
599 u32 addr = DENALI_MAP01 | DENALI_BANK(denali) | page;
603 if (denali->caps & DENALI_CAP_HW_ECC_FIXUP)
608 denali_reset_irq(denali);
611 buf[i] = denali->host_read(denali, addr);
613 irq_status = denali_wait_for_irq(denali, INTR__PAGE_XFER_INC);
623 static int denali_pio_write(struct denali_controller *denali, const u32 *buf,
626 u32 addr = DENALI_MAP01 | DENALI_BANK(denali) | page;
630 denali_reset_irq(denali);
633 denali->host_write(denali, addr, buf[i]);
635 irq_status = denali_wait_for_irq(denali,
644 static int denali_pio_xfer(struct denali_controller *denali, void *buf,
648 return denali_pio_write(denali, buf, size, page);
650 return denali_pio_read(denali, buf, size, page);
653 static int denali_dma_xfer(struct denali_controller *denali, void *buf,
661 dma_addr = dma_map_single(denali->dev, buf, size, dir);
662 if (dma_mapping_error(denali->dev, dma_addr)) {
663 dev_dbg(denali->dev, "Failed to DMA-map buffer. Trying PIO.\n");
664 return denali_pio_xfer(denali, buf, size, page, write);
675 } else if (denali->caps & DENALI_CAP_HW_ECC_FIXUP) {
683 iowrite32(DMA_ENABLE__FLAG, denali->reg + DMA_ENABLE);
689 ioread32(denali->reg + DMA_ENABLE);
691 denali_reset_irq(denali);
692 denali->setup_dma(denali, dma_addr, page, write);
694 irq_status = denali_wait_for_irq(denali, irq_mask);
700 iowrite32(0, denali->reg + DMA_ENABLE);
702 dma_unmap_single(denali->dev, dma_addr, size, dir);
713 struct denali_controller *denali = to_denali_controller(chip);
717 if (denali->dma_avail)
718 return denali_dma_xfer(denali, buf, size, page, write);
720 return denali_pio_xfer(denali, buf, size, page, write);
726 struct denali_controller *denali = to_denali_controller(chip);
736 if (denali->caps & DENALI_CAP_HW_ECC_FIXUP)
768 struct denali_controller *denali = to_denali_controller(chip);
782 t_x = DIV_ROUND_DOWN_ULL(1000000000000ULL, denali->clk_x_rate);
791 mult_x = DIV_ROUND_CLOSEST_ULL(denali->clk_x_rate, denali->clk_rate);
804 tmp = ioread32(denali->reg + RE_2_WE);
813 tmp = ioread32(denali->reg + RE_2_RE);
827 tmp = ioread32(denali->reg + TWHR2_AND_WE_2_RE);
836 if (denali->revision < 0x0501)
842 tmp = ioread32(denali->reg + TCWAW_AND_ADDR_2_DATA);
852 tmp = ioread32(denali->reg + RDWR_EN_HI_CNT);
891 tmp = ioread32(denali->reg + ACC_CLKS);
896 tmp = ioread32(denali->reg + RDWR_EN_LO_CNT);
907 tmp = ioread32(denali->reg + CS_SETUP_CNT);
926 struct denali_controller *denali = to_denali_controller(chip);
931 oobregion->offset = denali->oob_skip_bytes;
941 struct denali_controller *denali = to_denali_controller(chip);
946 oobregion->offset = chip->ecc.total + denali->oob_skip_bytes;
959 struct denali_controller *denali = to_denali_controller(chip);
972 denali->devs_per_cs = ioread32(denali->reg + DEVICES_CONNECTED);
978 if (denali->devs_per_cs == 0) {
979 denali->devs_per_cs = 1;
980 iowrite32(1, denali->reg + DEVICES_CONNECTED);
983 if (denali->devs_per_cs == 1)
986 if (denali->devs_per_cs != 2) {
987 dev_err(denali->dev, "unsupported number of devices %d\n",
988 denali->devs_per_cs);
1007 denali->oob_skip_bytes <<= 1;
1014 struct denali_controller *denali = to_denali_controller(chip);
1018 ret = nand_ecc_choose_conf(chip, denali->ecc_caps,
1019 mtd->oobsize - denali->oob_skip_bytes);
1021 dev_err(denali->dev, "Failed to setup ECC settings.\n");
1025 dev_dbg(denali->dev,
1036 static void denali_exec_in8(struct denali_controller *denali, u32 type,
1042 buf[i] = denali->host_read(denali, type | DENALI_BANK(denali));
1045 static void denali_exec_in16(struct denali_controller *denali, u32 type,
1052 data = denali->host_read(denali, type | DENALI_BANK(denali));
1059 static void denali_exec_in(struct denali_controller *denali, u32 type,
1063 denali_exec_in16(denali, type, buf, len);
1065 denali_exec_in8(denali, type, buf, len);
1068 static void denali_exec_out8(struct denali_controller *denali, u32 type,
1074 denali->host_write(denali, type | DENALI_BANK(denali), buf[i]);
1077 static void denali_exec_out16(struct denali_controller *denali, u32 type,
1083 denali->host_write(denali, type | DENALI_BANK(denali),
1087 static void denali_exec_out(struct denali_controller *denali, u32 type,
1091 denali_exec_out16(denali, type, buf, len);
1093 denali_exec_out8(denali, type, buf, len);
1096 static int denali_exec_waitrdy(struct denali_controller *denali)
1101 irq_stat = denali_wait_for_irq(denali, INTR__INT_ACT);
1104 denali_reset_irq(denali);
1112 struct denali_controller *denali = to_denali_controller(chip);
1116 denali_exec_out8(denali, DENALI_MAP11_CMD,
1120 denali_exec_out8(denali, DENALI_MAP11_ADDR,
1125 denali_exec_in(denali, DENALI_MAP11_DATA,
1132 denali_exec_out(denali, DENALI_MAP11_DATA,
1139 return denali_exec_waitrdy(denali);
1179 int denali_chip_init(struct denali_controller *denali,
1187 chip->controller = &denali->controller;
1193 if (bank >= denali->nbanks) {
1194 dev_err(denali->dev, "unsupported bank %d\n", bank);
1200 dev_err(denali->dev,
1207 list_for_each_entry(dchip2, &denali->chips, node) {
1210 dev_err(denali->dev,
1219 mtd->dev.parent = denali->dev;
1225 if (!mtd->name && list_empty(&denali->chips))
1226 mtd->name = "denali-nand";
1228 if (denali->dma_avail) {
1234 if (!denali->clk_rate || !denali->clk_x_rate)
1257 dev_err(denali->dev, "Failed to register MTD: %d\n", ret);
1261 list_add_tail(&dchip->node, &denali->chips);
1272 int denali_init(struct denali_controller *denali)
1274 u32 features = ioread32(denali->reg + FEATURES);
1277 nand_controller_init(&denali->controller);
1278 denali->controller.ops = &denali_controller_ops;
1279 init_completion(&denali->complete);
1280 spin_lock_init(&denali->irq_lock);
1281 INIT_LIST_HEAD(&denali->chips);
1282 denali->active_bank = DENALI_INVALID_BANK;
1288 if (!denali->revision)
1289 denali->revision = swab16(ioread32(denali->reg + REVISION));
1291 denali->nbanks = 1 << FIELD_GET(FEATURES__N_BANKS, features);
1294 if (denali->revision < 0x0501)
1295 denali->nbanks <<= 1;
1298 denali->dma_avail = true;
1300 if (denali->dma_avail) {
1301 int dma_bit = denali->caps & DENALI_CAP_DMA_64BIT ? 64 : 32;
1303 ret = dma_set_mask(denali->dev, DMA_BIT_MASK(dma_bit));
1305 dev_info(denali->dev,
1307 denali->dma_avail = false;
1311 if (denali->dma_avail) {
1312 if (denali->caps & DENALI_CAP_DMA_64BIT)
1313 denali->setup_dma = denali_setup_dma64;
1315 denali->setup_dma = denali_setup_dma32;
1319 denali->host_read = denali_indexed_read;
1320 denali->host_write = denali_indexed_write;
1322 denali->host_read = denali_direct_read;
1323 denali->host_write = denali_direct_write;
1332 if (denali->oob_skip_bytes)
1333 iowrite32(denali->oob_skip_bytes,
1334 denali->reg + SPARE_AREA_SKIP_BYTES);
1336 denali->oob_skip_bytes = ioread32(denali->reg +
1339 iowrite32(0, denali->reg + TRANSFER_SPARE_REG);
1340 iowrite32(GENMASK(denali->nbanks - 1, 0), denali->reg + RB_PIN_ENABLED);
1341 iowrite32(CHIP_EN_DONT_CARE__FLAG, denali->reg + CHIP_ENABLE_DONT_CARE);
1342 iowrite32(ECC_ENABLE__FLAG, denali->reg + ECC_ENABLE);
1343 iowrite32(0xffff, denali->reg + SPARE_AREA_MARKER);
1344 iowrite32(WRITE_PROTECT__FLAG, denali->reg + WRITE_PROTECT);
1346 denali_clear_irq_all(denali);
1348 ret = devm_request_irq(denali->dev, denali->irq, denali_isr,
1349 IRQF_SHARED, DENALI_NAND_NAME, denali);
1351 dev_err(denali->dev, "Unable to request IRQ\n");
1355 denali_enable_irq(denali);
1361 void denali_remove(struct denali_controller *denali)
1367 list_for_each_entry_safe(dchip, tmp, &denali->chips, node) {
1375 denali_disable_irq(denali);