Lines Matching refs:pmecc

169 	struct atmel_pmecc *pmecc;  member
277 static int atmel_pmecc_prepare_user_req(struct atmel_pmecc *pmecc, in atmel_pmecc_prepare_user_req() argument
309 for (i = 0; i < pmecc->caps->nstrengths; i++) { in atmel_pmecc_prepare_user_req()
310 int nbytes, strength = pmecc->caps->strengths[i]; in atmel_pmecc_prepare_user_req()
343 atmel_pmecc_create_user(struct atmel_pmecc *pmecc, in atmel_pmecc_create_user() argument
350 ret = atmel_pmecc_prepare_user_req(pmecc, req); in atmel_pmecc_create_user()
365 user = devm_kzalloc(pmecc->dev, size, GFP_KERNEL); in atmel_pmecc_create_user()
369 user->pmecc = pmecc; in atmel_pmecc_create_user()
390 for (strength = 0; strength < pmecc->caps->nstrengths; strength++) { in atmel_pmecc_create_user()
391 if (pmecc->caps->strengths[strength] == req->ecc.strength) in atmel_pmecc_create_user()
411 const int *strengths = user->pmecc->caps->strengths; in get_strength()
429 value = readl_relaxed(user->pmecc->regs.base + in atmel_pmecc_gen_syndrome()
637 struct atmel_pmecc *pmecc = user->pmecc; in atmel_pmecc_err_location() local
644 writel(PMERRLOC_DISABLE, pmecc->regs.errloc + ATMEL_PMERRLOC_ELDIS); in atmel_pmecc_err_location()
648 pmecc->regs.errloc + ATMEL_PMERRLOC_SIGMA(i)); in atmel_pmecc_err_location()
656 writel(val, pmecc->regs.errloc + ATMEL_PMERRLOC_ELCFG); in atmel_pmecc_err_location()
658 pmecc->regs.errloc + ATMEL_PMERRLOC_ELEN); in atmel_pmecc_err_location()
660 ret = readl_relaxed_poll_timeout(pmecc->regs.errloc + in atmel_pmecc_err_location()
665 dev_err(pmecc->dev, in atmel_pmecc_err_location()
685 struct atmel_pmecc *pmecc = user->pmecc; in atmel_pmecc_correct_sector() local
707 errpos = readl_relaxed(pmecc->regs.errloc + in atmel_pmecc_correct_sector()
708 ATMEL_PMERRLOC_EL(pmecc->caps->el_offset, i)); in atmel_pmecc_correct_sector()
721 dev_dbg(pmecc->dev, in atmel_pmecc_correct_sector()
727 dev_dbg(pmecc->dev, in atmel_pmecc_correct_sector()
740 return user->pmecc->caps->correct_erased_chunks; in atmel_pmecc_correct_erased_chunks()
747 struct atmel_pmecc *pmecc = user->pmecc; in atmel_pmecc_get_generated_eccbytes() local
752 ptr[i] = readb_relaxed(pmecc->regs.base + in atmel_pmecc_get_generated_eccbytes()
757 void atmel_pmecc_reset(struct atmel_pmecc *pmecc) in atmel_pmecc_reset() argument
759 writel(PMECC_CTRL_RST, pmecc->regs.base + ATMEL_PMECC_CTRL); in atmel_pmecc_reset()
760 writel(PMECC_CTRL_DISABLE, pmecc->regs.base + ATMEL_PMECC_CTRL); in atmel_pmecc_reset()
766 struct atmel_pmecc *pmecc = user->pmecc; in atmel_pmecc_enable() local
770 dev_err(pmecc->dev, "Bad ECC operation!"); in atmel_pmecc_enable()
774 mutex_lock(&user->pmecc->lock); in atmel_pmecc_enable()
782 writel(cfg, pmecc->regs.base + ATMEL_PMECC_CFG); in atmel_pmecc_enable()
783 writel(user->cache.sarea, pmecc->regs.base + ATMEL_PMECC_SAREA); in atmel_pmecc_enable()
784 writel(user->cache.saddr, pmecc->regs.base + ATMEL_PMECC_SADDR); in atmel_pmecc_enable()
785 writel(user->cache.eaddr, pmecc->regs.base + ATMEL_PMECC_EADDR); in atmel_pmecc_enable()
787 writel(PMECC_CTRL_ENABLE, pmecc->regs.base + ATMEL_PMECC_CTRL); in atmel_pmecc_enable()
788 writel(PMECC_CTRL_DATA, pmecc->regs.base + ATMEL_PMECC_CTRL); in atmel_pmecc_enable()
796 atmel_pmecc_reset(user->pmecc); in atmel_pmecc_disable()
797 mutex_unlock(&user->pmecc->lock); in atmel_pmecc_disable()
803 struct atmel_pmecc *pmecc = user->pmecc; in atmel_pmecc_wait_rdy() local
807 ret = readl_relaxed_poll_timeout(pmecc->regs.base + in atmel_pmecc_wait_rdy()
812 dev_err(pmecc->dev, in atmel_pmecc_wait_rdy()
817 user->isr = readl_relaxed(pmecc->regs.base + ATMEL_PMECC_ISR); in atmel_pmecc_wait_rdy()
828 struct atmel_pmecc *pmecc; in atmel_pmecc_create() local
830 pmecc = devm_kzalloc(dev, sizeof(*pmecc), GFP_KERNEL); in atmel_pmecc_create()
831 if (!pmecc) in atmel_pmecc_create()
834 pmecc->caps = caps; in atmel_pmecc_create()
835 pmecc->dev = dev; in atmel_pmecc_create()
836 mutex_init(&pmecc->lock); in atmel_pmecc_create()
838 pmecc->regs.base = devm_platform_ioremap_resource(pdev, pmecc_res_idx); in atmel_pmecc_create()
839 if (IS_ERR(pmecc->regs.base)) in atmel_pmecc_create()
840 return ERR_CAST(pmecc->regs.base); in atmel_pmecc_create()
842 pmecc->regs.errloc = devm_platform_ioremap_resource(pdev, errloc_res_idx); in atmel_pmecc_create()
843 if (IS_ERR(pmecc->regs.errloc)) in atmel_pmecc_create()
844 return ERR_CAST(pmecc->regs.errloc); in atmel_pmecc_create()
847 writel(0xffffffff, pmecc->regs.base + ATMEL_PMECC_IDR); in atmel_pmecc_create()
848 atmel_pmecc_reset(pmecc); in atmel_pmecc_create()
850 return pmecc; in atmel_pmecc_create()
855 struct atmel_pmecc **pmecc = res; in devm_atmel_pmecc_put() local
857 put_device((*pmecc)->dev); in devm_atmel_pmecc_put()
864 struct atmel_pmecc *pmecc, **ptr; in atmel_pmecc_get_by_node() local
870 pmecc = platform_get_drvdata(pdev); in atmel_pmecc_get_by_node()
871 if (!pmecc) { in atmel_pmecc_get_by_node()
882 *ptr = pmecc; in atmel_pmecc_get_by_node()
886 return pmecc; in atmel_pmecc_get_by_node()
923 struct atmel_pmecc *pmecc; in devm_atmel_pmecc_get() local
934 pmecc = atmel_pmecc_get_by_node(userdev, np); in devm_atmel_pmecc_get()
959 pmecc = atmel_pmecc_create(pdev, caps, 1, 2); in devm_atmel_pmecc_get()
962 return pmecc; in devm_atmel_pmecc_get()
978 struct atmel_pmecc *pmecc; in atmel_pmecc_probe() local
986 pmecc = atmel_pmecc_create(pdev, caps, 0, 1); in atmel_pmecc_probe()
987 if (IS_ERR(pmecc)) in atmel_pmecc_probe()
988 return PTR_ERR(pmecc); in atmel_pmecc_probe()
990 platform_set_drvdata(pdev, pmecc); in atmel_pmecc_probe()