Lines Matching defs:anand
150 * struct anand - Defines the NAND chip related information
171 struct anand {
224 static struct anand *to_anand(struct nand_chip *nand)
226 return container_of(nand, struct anand, chip);
255 struct anand *anand = to_anand(chip);
261 val & BIT(anand->rb),
309 static int anfc_relative_to_absolute_cs(struct anand *anand, int num)
311 return anand->cs_idx[num];
337 struct anand *anand = to_anand(chip);
339 unsigned int nfc_cs_idx = anfc_relative_to_absolute_cs(anand, target);
345 writel_relaxed(anand->data_iface, nfc->base + DATA_INTERFACE_REG);
346 writel_relaxed(anand->timings, nfc->base + TIMING_REG);
349 if (nfc->cur_clk != anand->clk) {
351 ret = clk_set_rate(nfc->bus_clk, anand->clk);
364 nfc->cur_clk = anand->clk;
397 struct anand *anand = to_anand(chip);
407 (page & 0xFF) << (8 * (anand->caddr_cycles)) |
408 (((page >> 8) & 0xFF) << (8 * (1 + anand->caddr_cycles))),
411 ADDR2_STRENGTH(anand->strength) |
416 CMD_PAGE_SIZE(anand->page_sz) |
418 CMD_NADDRS(anand->caddr_cycles +
419 anand->raddr_cycles),
458 memset(anand->hw_ecc, 0, chip->ecc.bytes);
459 nand_extract_bits(anand->hw_ecc, 0,
460 &chip->oob_poi[mtd->oobsize - anand->ecc_total],
461 anand->ecc_bits * step, anand->ecc_bits);
463 bf = bch_decode(anand->bch, raw_buf, chip->ecc.size,
464 anand->hw_ecc, NULL, NULL, anand->errloc);
470 if (anand->errloc[i] < (chip->ecc.size * 8)) {
471 bit = BIT(anand->errloc[i] & 7);
472 byte = anand->errloc[i] >> 3;
513 struct anand *anand = to_anand(chip);
525 (page & 0xFF) << (8 * (anand->caddr_cycles)) |
526 (((page >> 8) & 0xFF) << (8 * (1 + anand->caddr_cycles))),
529 ADDR2_STRENGTH(anand->strength) |
534 CMD_PAGE_SIZE(anand->page_sz) |
536 CMD_NADDRS(anand->caddr_cycles +
537 anand->raddr_cycles) |
542 writel_relaxed(anand->ecc_conf, nfc->base + ECC_CONF_REG);
544 ECC_SP_ADDRS(anand->caddr_cycles),
600 struct anand *anand = to_anand(chip);
608 nfc_op->cmd_reg = CMD_PAGE_SIZE(anand->page_sz);
977 struct anand *anand = to_anand(chip);
998 anand->data_iface = DIFACE_SDR |
1000 anand->timings = 0;
1002 anand->data_iface = DIFACE_NVDDR |
1038 anand->timings = tccs_min | fast_tcad |
1044 anand->clk = ANFC_XLNX_SDR_DFLT_CORE_CLK;
1047 anand->clk = div_u64((u64)NSEC_PER_SEC * 1000,
1059 anand->clk = ANFC_XLNX_SDR_HS_CORE_CLK;
1110 struct anand *anand = to_anand(chip);
1134 anand->strength = 0x1;
1137 anand->strength = 0x2;
1140 anand->strength = 0x3;
1143 anand->strength = 0x4;
1168 anand->ecc_bits = bch_gf_mag * ecc->strength;
1169 ecc->bytes = DIV_ROUND_UP(anand->ecc_bits, 8);
1170 anand->ecc_total = DIV_ROUND_UP(anand->ecc_bits * ecc->steps, 8);
1171 ecc_offset = mtd->writesize + mtd->oobsize - anand->ecc_total;
1172 anand->ecc_conf = ECC_CONF_COL(ecc_offset) |
1173 ECC_CONF_LEN(anand->ecc_total) |
1176 anand->errloc = devm_kmalloc_array(nfc->dev, ecc->strength,
1177 sizeof(*anand->errloc), GFP_KERNEL);
1178 if (!anand->errloc)
1181 anand->hw_ecc = devm_kmalloc(nfc->dev, ecc->bytes, GFP_KERNEL);
1182 if (!anand->hw_ecc)
1186 anand->bch = bch_init(bch_gf_mag, ecc->strength, bch_prim_poly, true);
1187 if (!anand->bch)
1198 struct anand *anand = to_anand(chip);
1204 anand->caddr_cycles = 1;
1206 anand->caddr_cycles = 2;
1209 anand->raddr_cycles = 3;
1211 anand->raddr_cycles = 2;
1215 anand->page_sz = 0;
1218 anand->page_sz = 5;
1221 anand->page_sz = 1;
1224 anand->page_sz = 2;
1227 anand->page_sz = 3;
1230 anand->page_sz = 4;
1259 struct anand *anand = to_anand(chip);
1261 if (anand->bch)
1262 bch_free(anand->bch);
1274 struct anand *anand;
1279 anand = devm_kzalloc(nfc->dev, sizeof(*anand), GFP_KERNEL);
1280 if (!anand)
1284 anand->ncs_idx = of_property_count_elems_of_size(np, "reg", sizeof(u32));
1285 if (anand->ncs_idx <= 0 || anand->ncs_idx > nfc->ncs) {
1290 anand->cs_idx = devm_kcalloc(nfc->dev, anand->ncs_idx,
1291 sizeof(*anand->cs_idx), GFP_KERNEL);
1292 if (!anand->cs_idx)
1295 for (i = 0; i < anand->ncs_idx; i++) {
1297 &anand->cs_idx[i]);
1314 anand->rb = rb;
1316 chip = &anand->chip;
1329 ret = nand_scan(chip, anand->ncs_idx);
1341 list_add_tail(&anand->node, &nfc->chips);
1348 struct anand *anand, *tmp;
1352 list_for_each_entry_safe(anand, tmp, &nfc->chips, node) {
1353 chip = &anand->chip;
1357 list_del(&anand->node);