anand
anand->timings = 0;
anand->data_iface = DIFACE_NVDDR |
anand->timings = tccs_min | fast_tcad |
anand->clk = ANFC_XLNX_SDR_DFLT_CORE_CLK;
anand->clk = div_u64((u64)NSEC_PER_SEC * 1000,
anand->clk = ANFC_XLNX_SDR_HS_CORE_CLK;
struct anand *anand = to_anand(chip);
anand->strength = 0x1;
anand->strength = 0x2;
anand->strength = 0x3;
anand->strength = 0x4;
anand->ecc_bits = bch_gf_mag * ecc->strength;
ecc->bytes = DIV_ROUND_UP(anand->ecc_bits, 8);
anand->ecc_total = DIV_ROUND_UP(anand->ecc_bits * ecc->steps, 8);
ecc_offset = mtd->writesize + mtd->oobsize - anand->ecc_total;
anand->ecc_conf = ECC_CONF_COL(ecc_offset) |
ECC_CONF_LEN(anand->ecc_total) |
anand->errloc = devm_kmalloc_array(nfc->dev, ecc->strength,
sizeof(*anand->errloc), GFP_KERNEL);
if (!anand->errloc)
anand->hw_ecc = devm_kmalloc(nfc->dev, ecc->bytes, GFP_KERNEL);
if (!anand->hw_ecc)
anand->bch = bch_init(bch_gf_mag, ecc->strength, bch_prim_poly, true);
if (!anand->bch)
struct anand *anand = to_anand(chip);
anand->caddr_cycles = 1;
anand->caddr_cycles = 2;
anand->raddr_cycles = 3;
anand->raddr_cycles = 2;
anand->page_sz = 0;
anand->page_sz = 5;
anand->page_sz = 1;
anand->page_sz = 2;
anand->page_sz = 3;
anand->page_sz = 4;
struct anand *anand = to_anand(chip);
if (anand->bch)
bch_free(anand->bch);
struct anand *anand;
anand = devm_kzalloc(nfc->dev, sizeof(*anand), GFP_KERNEL);
if (!anand)
anand->ncs_idx = of_property_count_elems_of_size(np, "reg", sizeof(u32));
if (anand->ncs_idx <= 0 || anand->ncs_idx > nfc->ncs) {
anand->cs_idx = devm_kcalloc(nfc->dev, anand->ncs_idx,
sizeof(*anand->cs_idx), GFP_KERNEL);
if (!anand->cs_idx)
for (i = 0; i < anand->ncs_idx; i++) {
&anand->cs_idx[i]);
anand->rb = rb;
chip = &anand->chip;
ret = nand_scan(chip, anand->ncs_idx);
list_add_tail(&anand->node, &nfc->chips);
struct anand *anand, *tmp;
list_for_each_entry_safe(anand, tmp, &nfc->chips, node) {
chip = &anand->chip;
list_del(&anand->node);
static struct anand *to_anand(struct nand_chip *nand)
return container_of(nand, struct anand, chip);
struct anand *anand = to_anand(chip);
val & BIT(anand->rb),
static int anfc_relative_to_absolute_cs(struct anand *anand, int num)
return anand->cs_idx[num];
struct anand *anand = to_anand(chip);
unsigned int nfc_cs_idx = anfc_relative_to_absolute_cs(anand, target);
writel_relaxed(anand->data_iface, nfc->base + DATA_INTERFACE_REG);
writel_relaxed(anand->timings, nfc->base + TIMING_REG);
if (nfc->cur_clk != anand->clk) {
ret = clk_set_rate(nfc->bus_clk, anand->clk);
nfc->cur_clk = anand->clk;
struct anand *anand = to_anand(chip);
(page & 0xFF) << (8 * (anand->caddr_cycles)) |
(((page >> 8) & 0xFF) << (8 * (1 + anand->caddr_cycles))),
ADDR2_STRENGTH(anand->strength) |
CMD_PAGE_SIZE(anand->page_sz) |
CMD_NADDRS(anand->caddr_cycles +
anand->raddr_cycles),
memset(anand->hw_ecc, 0, chip->ecc.bytes);
nand_extract_bits(anand->hw_ecc, 0,
&chip->oob_poi[mtd->oobsize - anand->ecc_total],
anand->ecc_bits * step, anand->ecc_bits);
bf = bch_decode(anand->bch, raw_buf, chip->ecc.size,
anand->hw_ecc, NULL, NULL, anand->errloc);
if (anand->errloc[i] < (chip->ecc.size * 8)) {
bit = BIT(anand->errloc[i] & 7);
byte = anand->errloc[i] >> 3;
anand->hw_ecc, chip->ecc.bytes, NULL, 0,
struct anand *anand = to_anand(chip);
(page & 0xFF) << (8 * (anand->caddr_cycles)) |
(((page >> 8) & 0xFF) << (8 * (1 + anand->caddr_cycles))),
ADDR2_STRENGTH(anand->strength) |
CMD_PAGE_SIZE(anand->page_sz) |
CMD_NADDRS(anand->caddr_cycles +
anand->raddr_cycles) |
writel_relaxed(anand->ecc_conf, nfc->base + ECC_CONF_REG);
ECC_SP_ADDRS(anand->caddr_cycles),
struct anand *anand = to_anand(chip);
nfc_op->cmd_reg = CMD_PAGE_SIZE(anand->page_sz);
struct anand *anand = to_anand(chip);
anand->data_iface = DIFACE_SDR |