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 Linstatic 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 Linvoid 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