On Friday, July 04, 2014 at 12:19:13 PM, Masahiro Yamada wrote:
> The SPL-mode driver for Denali(Cadence) NAND Flash Memory Controller IP.
> 
> This driver requires two CONFIG macros:
>  - CONFIG_NAND_DENALI
>      Define to enable this driver.
>  - CONFIG_SYS_NAND_BAD_BLOCK_POS
>      Specify bad block mark position in the oob space. Typically 0.
> 
> Signed-off-by: Masahiro Yamada <yamad...@jp.panasonic.com>
> Cc: Chin Liang See <cl...@altera.com>
> Cc: Scott Wood <scottw...@freescale.com>

[...]

> +static void read_data_from_flash_mem(uint8_t *buf, int len)
> +{
> +     int i;
> +     uint32_t *buf32;
> +
> +     /* transfer the data from the flash */
> +     buf32 = (uint32_t *)buf;
> +     for (i = 0; i < len / 4; i++)
> +             *buf32++ = readl(denali_flash_mem + INDEX_DATA_REG);

Won't this trigger unaligned access if $buf is not aligned to 4-byte boundary ?

> +}
> +
> +int denali_send_pipeline_cmd(int page, int ecc_en, int access_type)
> +{
> +     uint32_t addr, cmd;
> +     static uint32_t page_count = 1;
> +
> +     writel(ecc_en, denali_flash_reg + ECC_ENABLE);
> +
> +     /* clear all bits of intr_status. */
> +     writel(0xffff, denali_flash_reg + INTR_STATUS(flash_bank));
> +
> +     addr = BANK(flash_bank) | page;
> +
> +     /* setup the acccess type */
> +     cmd = MODE_10 | addr;
> +     index_addr(cmd, access_type);
> +
> +     /* setup the pipeline command */
> +     index_addr(cmd, 0x2000 | page_count);

Magic value 0x2000 should be fixed here.

> +     cmd = MODE_01 | addr;
> +     writel(cmd, denali_flash_mem + INDEX_CTRL_REG);

Somehow, eventually, this should be migrated to "struct" based register access 
instead of such offset computation. If you feel like doing it, that'd be nice 
;-)

> +     return wait_for_irq(INTR_STATUS__LOAD_COMP);
> +}
[...]

Thanks!
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to