Lines Matching refs:geo

198 	struct bch_geometry *geo = &this->bch_geometry;
227 geo->gf_len,
228 geo->ecc_strength,
229 geo->page_size,
230 geo->metadata_size,
231 geo->ecc0_chunk_size,
232 geo->eccn_chunk_size,
233 geo->ecc_chunk_count,
234 geo->payload_size,
235 geo->auxiliary_size,
236 geo->auxiliary_status_offset,
237 geo->block_mark_byte_offset,
238 geo->block_mark_bit_offset);
244 struct bch_geometry *geo = &this->bch_geometry;
248 conf->step_size = geo->eccn_chunk_size;
249 conf->strength = geo->ecc_strength;
254 if (geo->gf_len == 14)
258 if (geo->ecc_strength > this->devdata->bch_max_ecc_strength)
271 struct bch_geometry *geo = &this->bch_geometry;
276 if (geo->ecc0_chunk_size != geo->eccn_chunk_size) {
282 i = (mtd->writesize * 8 - geo->metadata_size * 8) /
283 (geo->gf_len * geo->ecc_strength +
284 geo->eccn_chunk_size * 8);
286 j = (mtd->writesize * 8 - geo->metadata_size * 8) -
287 (geo->gf_len * geo->ecc_strength +
288 geo->eccn_chunk_size * 8) * i;
290 if (j < geo->eccn_chunk_size * 8) {
293 geo->ecc_strength, *chunk_num);
310 struct bch_geometry *geo = &this->bch_geometry;
317 geo->gf_len = 13;
320 geo->gf_len = 14;
329 geo->ecc0_chunk_size = ecc_step;
330 geo->eccn_chunk_size = ecc_step;
331 geo->ecc_strength = round_up(ecc_strength, 2);
336 if (geo->eccn_chunk_size < mtd->oobsize) {
344 geo->metadata_size = 10;
346 geo->ecc_chunk_count = mtd->writesize / geo->eccn_chunk_size;
396 geo->page_size = mtd->writesize + geo->metadata_size +
397 (geo->gf_len * geo->ecc_strength * geo->ecc_chunk_count) / 8;
399 geo->payload_size = mtd->writesize;
401 geo->auxiliary_status_offset = ALIGN(geo->metadata_size, 4);
402 geo->auxiliary_size = ALIGN(geo->metadata_size, 4)
403 + ALIGN(geo->ecc_chunk_count, 4);
410 (geo->ecc_strength * geo->gf_len * (geo->ecc_chunk_count - 1)
411 + geo->metadata_size * 8);
413 geo->block_mark_byte_offset = block_mark_bit_offset / 8;
414 geo->block_mark_bit_offset = block_mark_bit_offset % 8;
438 struct bch_geometry *geo = &this->bch_geometry;
442 ecc_strength = ((mtd->oobsize - geo->metadata_size) * 8)
443 / (geo->gf_len * geo->ecc_chunk_count);
451 struct bch_geometry *geo = &this->bch_geometry;
465 geo->ecc_strength = requirements->strength;
471 geo->ecc_strength);
476 geo->metadata_size = 10;
477 geo->gf_len = 14;
478 geo->ecc0_chunk_size = 1024;
479 geo->eccn_chunk_size = 1024;
480 geo->ecc_chunk_count = mtd->writesize / geo->eccn_chunk_size;
488 geo->ecc_strength = max_ecc;
489 while (!(geo->ecc_strength < requirements->strength)) {
492 geo->ecc_strength -= 2;
497 geo->ecc_strength = requirements->strength;
499 geo->ecc0_chunk_size = 0;
500 geo->ecc_chunk_count = (mtd->writesize / geo->eccn_chunk_size) + 1;
501 geo->ecc_for_meta = 1;
503 if (mtd->oobsize * 8 < geo->metadata_size * 8 +
504 geo->gf_len * geo->ecc_strength * geo->ecc_chunk_count) {
510 bbm_chunk = (mtd->writesize * 8 - geo->metadata_size * 8 -
511 geo->gf_len * geo->ecc_strength) /
512 (geo->gf_len * geo->ecc_strength +
513 geo->eccn_chunk_size * 8) + 1;
517 geo->page_size = mtd->writesize + geo->metadata_size +
518 (geo->gf_len * geo->ecc_strength * geo->ecc_chunk_count) / 8;
519 geo->payload_size = mtd->writesize;
527 geo->auxiliary_status_offset = ALIGN(geo->metadata_size, 4);
528 geo->auxiliary_size = ALIGN(geo->metadata_size, 4)
529 + ALIGN(geo->ecc_chunk_count, 4);
535 i = (mtd->writesize / geo->eccn_chunk_size) - bbm_chunk + 1;
538 (geo->ecc_strength * geo->gf_len * (geo->ecc_chunk_count - i)
539 + geo->metadata_size * 8);
541 geo->block_mark_byte_offset = block_mark_bit_offset / 8;
542 geo->block_mark_bit_offset = block_mark_bit_offset % 8;
559 geo->gf_len,
560 geo->ecc_strength,
561 geo->page_size,
562 geo->metadata_size,
563 geo->ecc0_chunk_size,
564 geo->eccn_chunk_size,
565 geo->ecc_chunk_count,
566 geo->payload_size,
567 geo->auxiliary_size,
568 geo->auxiliary_status_offset,
569 geo->block_mark_byte_offset,
570 geo->block_mark_bit_offset,
572 geo->ecc_for_meta);
579 struct bch_geometry *geo = &this->bch_geometry;
590 geo->metadata_size = 10;
593 geo->gf_len = 13;
596 geo->ecc0_chunk_size = 512;
597 geo->eccn_chunk_size = 512;
598 while (geo->eccn_chunk_size < mtd->oobsize) {
599 geo->ecc0_chunk_size *= 2; /* keep C >= O */
600 geo->eccn_chunk_size *= 2; /* keep C >= O */
601 geo->gf_len = 14;
604 geo->ecc_chunk_count = mtd->writesize / geo->eccn_chunk_size;
607 geo->ecc_strength = get_ecc_strength(this);
612 geo->ecc_strength,
617 geo->page_size = mtd->writesize + geo->metadata_size +
618 (geo->gf_len * geo->ecc_strength * geo->ecc_chunk_count) / 8;
619 geo->payload_size = mtd->writesize;
627 metadata_size = ALIGN(geo->metadata_size, 4);
628 status_size = ALIGN(geo->ecc_chunk_count, 4);
630 geo->auxiliary_size = metadata_size + status_size;
631 geo->auxiliary_status_offset = metadata_size;
683 (geo->ecc_strength * geo->gf_len * (geo->ecc_chunk_count - 1)
684 + geo->metadata_size * 8);
686 geo->block_mark_byte_offset = block_mark_bit_offset / 8;
687 geo->block_mark_bit_offset = block_mark_bit_offset % 8;
1094 struct bch_geometry *geo = &this->bch_geometry;
1100 oobregion->length = geo->page_size - mtd->writesize;
1110 struct bch_geometry *geo = &this->bch_geometry;
1116 if (geo->page_size < mtd->writesize + mtd->oobsize) {
1117 oobregion->offset = geo->page_size - mtd->writesize;
1310 struct bch_geometry *geo = &this->bch_geometry;
1313 dma_free_coherent(dev, geo->auxiliary_size,
1326 struct bch_geometry *geo = &this->bch_geometry;
1343 this->auxiliary_virt = dma_alloc_coherent(dev, geo->auxiliary_size,
1505 struct bch_geometry *geo = &this->bch_geometry;
1506 unsigned int ecc_strength = geo->ecc_strength >> 1;
1507 unsigned int gf_len = geo->gf_len;
1508 unsigned int block0_size = geo->ecc0_chunk_size;
1509 unsigned int blockn_size = geo->eccn_chunk_size;
1512 BF_BCH_FLASH0LAYOUT0_NBLOCKS(geo->ecc_chunk_count - 1) |
1513 BF_BCH_FLASH0LAYOUT0_META_SIZE(geo->metadata_size) |
1519 BF_BCH_FLASH0LAYOUT1_PAGE_SIZE(geo->page_size) |
1530 struct bch_geometry *geo = &this->bch_geometry;
1537 ret = nand_read_page_op(chip, page, 0, buf, geo->page_size);
1542 geo->ecc_chunk_count,
1543 geo->auxiliary_status_offset);
1571 struct bch_geometry *geo = &this->bch_geometry;
1582 ecc_parity_size = geo->gf_len * geo->ecc_strength / 8;
1596 marker_pos = geo->block_mark_byte_offset / size;
1613 meta = geo->metadata_size;
1615 if (geo->ecc_for_meta)
1625 ecc_parity_size = geo->gf_len * geo->ecc_strength / 8;
1628 if (geo->ecc_for_meta && meta)
1634 ecc_strength = geo->ecc_strength >> 1;
1637 (geo->ecc_for_meta ? n : n - 1)) |
1640 BF_BCH_FLASH0LAYOUT0_GF(geo->gf_len, this) |
1641 BF_BCH_FLASH0LAYOUT0_DATA0_SIZE((geo->ecc_for_meta ?
1642 0 : geo->ecc0_chunk_size), this);
1646 BF_BCH_FLASH0LAYOUT1_GF(geo->gf_len, this) |
1647 BF_BCH_FLASH0LAYOUT1_DATAN_SIZE(geo->eccn_chunk_size, this);