xref: /rk3399_rockchip-uboot/drivers/mtd/ftsmc020.c (revision 326ea986ac150acdc7656d57fca647db80b50158)
100d10eb0SMacpaul Lin /*
200d10eb0SMacpaul Lin  * (C) Copyright 2009 Faraday Technology
300d10eb0SMacpaul Lin  * Po-Yu Chuang <ratbert@faraday-tech.com>
400d10eb0SMacpaul Lin  *
5*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
600d10eb0SMacpaul Lin  */
700d10eb0SMacpaul Lin 
800d10eb0SMacpaul Lin #include <config.h>
900d10eb0SMacpaul Lin #include <common.h>
1000d10eb0SMacpaul Lin #include <asm/io.h>
1100d10eb0SMacpaul Lin #include <faraday/ftsmc020.h>
1200d10eb0SMacpaul Lin 
1300d10eb0SMacpaul Lin struct ftsmc020_config {
1400d10eb0SMacpaul Lin 	unsigned int	config;
1500d10eb0SMacpaul Lin 	unsigned int	timing;
1600d10eb0SMacpaul Lin };
1700d10eb0SMacpaul Lin 
ftsmc020_setup_bank(unsigned int bank,struct ftsmc020_config * cfg)1800d10eb0SMacpaul Lin static void ftsmc020_setup_bank(unsigned int bank, struct ftsmc020_config *cfg)
1900d10eb0SMacpaul Lin {
20f194f6baSMacpaul Lin 	struct ftsmc020 *smc = (struct ftsmc020 *)CONFIG_FTSMC020_BASE;
21f194f6baSMacpaul Lin 
2200d10eb0SMacpaul Lin 	if (bank > 3) {
2300d10eb0SMacpaul Lin 		printf("bank # %u invalid\n", bank);
2400d10eb0SMacpaul Lin 		return;
2500d10eb0SMacpaul Lin 	}
2600d10eb0SMacpaul Lin 
2700d10eb0SMacpaul Lin 	writel(cfg->config, &smc->bank[bank].cr);
2800d10eb0SMacpaul Lin 	writel(cfg->timing, &smc->bank[bank].tpr);
2900d10eb0SMacpaul Lin }
3000d10eb0SMacpaul Lin 
ftsmc020_init(void)3100d10eb0SMacpaul Lin void ftsmc020_init(void)
3200d10eb0SMacpaul Lin {
33f194f6baSMacpaul Lin 	struct ftsmc020_config config[] = CONFIG_SYS_FTSMC020_CONFIGS;
3400d10eb0SMacpaul Lin 	int i;
3500d10eb0SMacpaul Lin 
3600d10eb0SMacpaul Lin 	for (i = 0; i < ARRAY_SIZE(config); i++)
3700d10eb0SMacpaul Lin 		ftsmc020_setup_bank(i, &config[i]);
3800d10eb0SMacpaul Lin }
39