static void lpc32xx_nand_init(void) { unsigned int clk; /* Configure controller for no software write protection, x8 bus width, large block device, and 4 address words */ /* unlock controller registers with magic key */ writel(LOCK_PR_UNLOCK_KEY, &lpc32xx_nand_mlc_registers->lock_pr); /* enable large blocks and large NANDs */ writel(ICR_LARGE_BLOCKS | ICR_ADDR4, &lpc32xx_nand_mlc_registers->icr); /* Make sure MLC interrupts are disabled */ writel(0, &lpc32xx_nand_mlc_registers->irq_mr); /* Normal chip enable operation */ writel(CEH_NORMAL_CE, &lpc32xx_nand_mlc_registers->ceh); /* Setup NAND timing */ clk = get_hclk_clk_rate(); writel( clkdiv(CONFIG_LPC32XX_NAND_MLC_TCEA_DELAY, 0x03, 24) | clkdiv(CONFIG_LPC32XX_NAND_MLC_BUSY_DELAY, 0x1F, 19) | clkdiv(CONFIG_LPC32XX_NAND_MLC_NAND_TA, 0x07, 16) | clkdiv(CONFIG_LPC32XX_NAND_MLC_RD_HIGH, 0x0F, 12) | clkdiv(CONFIG_LPC32XX_NAND_MLC_RD_LOW, 0x0F, 8) | clkdiv(CONFIG_LPC32XX_NAND_MLC_WR_HIGH, 0x0F, 4) | clkdiv(CONFIG_LPC32XX_NAND_MLC_WR_LOW, 0x0F, 0), &lpc32xx_nand_mlc_registers->time_reg); }
int print_cpuinfo(void) { printf("CPU: NXP LPC32XX\n"); printf("CPU clock: %uMHz\n", get_hclk_pll_rate() / 1000000); printf("AHB bus clock: %uMHz\n", get_hclk_clk_rate() / 1000000); printf("Peripheral clock: %uMHz\n", get_periph_clk_rate() / 1000000); return 0; }