Lines Matching refs:info

95 static void elm_write_reg(struct elm_info *info, int offset, u32 val)  in elm_write_reg()  argument
97 writel(val, info->elm_base + offset); in elm_write_reg()
100 static u32 elm_read_reg(struct elm_info *info, int offset) in elm_read_reg() argument
102 return readl(info->elm_base + offset); in elm_read_reg()
114 struct elm_info *info = dev_get_drvdata(dev); in elm_config() local
116 if (!info) { in elm_config()
132 elm_write_reg(info, ELM_LOCATION_CONFIG, reg_val); in elm_config()
133 info->bch_type = bch_type; in elm_config()
134 info->ecc_steps = ecc_steps; in elm_config()
135 info->ecc_syndrome_size = ecc_syndrome_size; in elm_config()
149 static void elm_configure_page_mode(struct elm_info *info, int index, in elm_configure_page_mode() argument
154 reg_val = elm_read_reg(info, ELM_PAGE_CTRL); in elm_configure_page_mode()
160 elm_write_reg(info, ELM_PAGE_CTRL, reg_val); in elm_configure_page_mode()
171 static void elm_load_syndrome(struct elm_info *info, in elm_load_syndrome() argument
177 for (i = 0; i < info->ecc_steps; i++) { in elm_load_syndrome()
181 elm_configure_page_mode(info, i, true); in elm_load_syndrome()
184 switch (info->bch_type) { in elm_load_syndrome()
188 elm_write_reg(info, offset, val); in elm_load_syndrome()
193 elm_write_reg(info, offset, val); in elm_load_syndrome()
198 elm_write_reg(info, offset, val); in elm_load_syndrome()
203 elm_write_reg(info, offset, val); in elm_load_syndrome()
209 elm_write_reg(info, offset, val); in elm_load_syndrome()
214 elm_write_reg(info, offset, val); in elm_load_syndrome()
218 elm_write_reg(info, offset, val); in elm_load_syndrome()
221 elm_write_reg(info, offset, val); in elm_load_syndrome()
224 elm_write_reg(info, offset, val); in elm_load_syndrome()
227 elm_write_reg(info, offset, val); in elm_load_syndrome()
230 elm_write_reg(info, offset, val); in elm_load_syndrome()
233 elm_write_reg(info, offset, val); in elm_load_syndrome()
236 elm_write_reg(info, offset, val); in elm_load_syndrome()
244 ecc += info->ecc_syndrome_size; in elm_load_syndrome()
257 static void elm_start_processing(struct elm_info *info, in elm_start_processing() argument
267 for (i = 0; i < info->ecc_steps; i++) { in elm_start_processing()
271 reg_val = elm_read_reg(info, offset); in elm_start_processing()
273 elm_write_reg(info, offset, reg_val); in elm_start_processing()
289 static void elm_error_correction(struct elm_info *info, in elm_error_correction() argument
296 for (i = 0; i < info->ecc_steps; i++) { in elm_error_correction()
301 reg_val = elm_read_reg(info, offset); in elm_error_correction()
315 reg_val = elm_read_reg(info, offset); in elm_error_correction()
329 elm_write_reg(info, ELM_IRQSTATUS, BIT(i)); in elm_error_correction()
332 elm_configure_page_mode(info, i, false); in elm_error_correction()
349 struct elm_info *info = dev_get_drvdata(dev); in elm_decode_bch_error_page() local
353 reg_val = elm_read_reg(info, ELM_IRQSTATUS); in elm_decode_bch_error_page()
354 elm_write_reg(info, ELM_IRQSTATUS, reg_val & INTR_STATUS_PAGE_VALID); in elm_decode_bch_error_page()
355 elm_write_reg(info, ELM_IRQENABLE, INTR_EN_PAGE_MASK); in elm_decode_bch_error_page()
358 elm_load_syndrome(info, err_vec, ecc_calc); in elm_decode_bch_error_page()
361 elm_start_processing(info, err_vec); in elm_decode_bch_error_page()
364 wait_for_completion(&info->elm_completion); in elm_decode_bch_error_page()
367 reg_val = elm_read_reg(info, ELM_IRQENABLE); in elm_decode_bch_error_page()
368 elm_write_reg(info, ELM_IRQENABLE, reg_val & ~INTR_EN_PAGE_MASK); in elm_decode_bch_error_page()
369 elm_error_correction(info, err_vec); in elm_decode_bch_error_page()
376 struct elm_info *info = dev_id; in elm_isr() local
378 reg_val = elm_read_reg(info, ELM_IRQSTATUS); in elm_isr()
382 elm_write_reg(info, ELM_IRQSTATUS, in elm_isr()
384 complete(&info->elm_completion); in elm_isr()
395 struct elm_info *info; in elm_probe() local
397 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); in elm_probe()
398 if (!info) in elm_probe()
401 info->dev = &pdev->dev; in elm_probe()
410 info->elm_base = devm_ioremap_resource(&pdev->dev, res); in elm_probe()
411 if (IS_ERR(info->elm_base)) in elm_probe()
412 return PTR_ERR(info->elm_base); in elm_probe()
415 pdev->name, info); in elm_probe()
429 init_completion(&info->elm_completion); in elm_probe()
430 INIT_LIST_HEAD(&info->list); in elm_probe()
431 list_add(&info->list, &elm_devices); in elm_probe()
432 platform_set_drvdata(pdev, info); in elm_probe()
448 static int elm_context_save(struct elm_info *info) in elm_context_save() argument
450 struct elm_registers *regs = &info->elm_regs; in elm_context_save()
451 enum bch_ecc bch_type = info->bch_type; in elm_context_save()
454 regs->elm_irqenable = elm_read_reg(info, ELM_IRQENABLE); in elm_context_save()
455 regs->elm_sysconfig = elm_read_reg(info, ELM_SYSCONFIG); in elm_context_save()
456 regs->elm_location_config = elm_read_reg(info, ELM_LOCATION_CONFIG); in elm_context_save()
457 regs->elm_page_ctrl = elm_read_reg(info, ELM_PAGE_CTRL); in elm_context_save()
462 regs->elm_syndrome_fragment_6[i] = elm_read_reg(info, in elm_context_save()
464 regs->elm_syndrome_fragment_5[i] = elm_read_reg(info, in elm_context_save()
466 regs->elm_syndrome_fragment_4[i] = elm_read_reg(info, in elm_context_save()
469 regs->elm_syndrome_fragment_3[i] = elm_read_reg(info, in elm_context_save()
471 regs->elm_syndrome_fragment_2[i] = elm_read_reg(info, in elm_context_save()
474 regs->elm_syndrome_fragment_1[i] = elm_read_reg(info, in elm_context_save()
476 regs->elm_syndrome_fragment_0[i] = elm_read_reg(info, in elm_context_save()
484 regs->elm_syndrome_fragment_6[i] = elm_read_reg(info, in elm_context_save()
494 static int elm_context_restore(struct elm_info *info) in elm_context_restore() argument
496 struct elm_registers *regs = &info->elm_regs; in elm_context_restore()
497 enum bch_ecc bch_type = info->bch_type; in elm_context_restore()
500 elm_write_reg(info, ELM_IRQENABLE, regs->elm_irqenable); in elm_context_restore()
501 elm_write_reg(info, ELM_SYSCONFIG, regs->elm_sysconfig); in elm_context_restore()
502 elm_write_reg(info, ELM_LOCATION_CONFIG, regs->elm_location_config); in elm_context_restore()
503 elm_write_reg(info, ELM_PAGE_CTRL, regs->elm_page_ctrl); in elm_context_restore()
508 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_6 + offset, in elm_context_restore()
510 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_5 + offset, in elm_context_restore()
512 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_4 + offset, in elm_context_restore()
515 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_3 + offset, in elm_context_restore()
517 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_2 + offset, in elm_context_restore()
520 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_1 + offset, in elm_context_restore()
522 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_0 + offset, in elm_context_restore()
529 elm_write_reg(info, ELM_SYNDROME_FRAGMENT_6 + offset, in elm_context_restore()
538 struct elm_info *info = dev_get_drvdata(dev); in elm_suspend() local
539 elm_context_save(info); in elm_suspend()
546 struct elm_info *info = dev_get_drvdata(dev); in elm_resume() local
548 elm_context_restore(info); in elm_resume()