summaryrefslogtreecommitdiff
path: root/common/tools
diff options
context:
space:
mode:
authorCyril Jourdan2012-08-21 18:47:26 +0200
committerCyril Jourdan2012-09-20 11:21:16 +0200
commitfe3e67afee7190e19db864fed1aac1a32c055c76 (patch)
treeb7fd319eb8259bcd8aa326b7a6d8cb8945219063 /common/tools
parent0ecb4b0db0d079c74839162dad4cedd7c9ffc85d (diff)
{cleo/uboot, common}: add IOMUX management, refs #2961
Diffstat (limited to 'common/tools')
-rw-r--r--common/tools/genNVRAM/genNVRAM.c328
-rw-r--r--common/tools/genNVRAM/nvram_mse500_simu.conf3
2 files changed, 218 insertions, 113 deletions
diff --git a/common/tools/genNVRAM/genNVRAM.c b/common/tools/genNVRAM/genNVRAM.c
index ae9ca6cf31..0cf83ea806 100644
--- a/common/tools/genNVRAM/genNVRAM.c
+++ b/common/tools/genNVRAM/genNVRAM.c
@@ -214,89 +214,148 @@ static uint32_t *nvram_dynamic = nvram.dynamic;
static enum
{
+ IO_NOINIT,
+ IO_GPIO,
+ IO_IOMUX,
+} io = IO_NOINIT;
+
+/*
+ * IOMUX configurations: triplet of offset, value, mask, where offset is
+ * relative to IOMUX_BASE.
+ */
+
+uint32_t iomux_config_bringup[] =
+{
+ 0x00000000, 0x0000, 0xFFFF,
+ 0x00000050, 0x1025, 0x1477,
+ 0x00000080, 0x0500, 0x0F00,
+ 0x00000084, 0x0002, 0x0002,
+ 0x0000003C, 0x0004, 0x0004,
+ 0x00000048, 0x000F, 0x000F,
+ (uint32_t)-1
+};
+
+uint32_t iomux_config_bringup_uart_leon[] =
+{
+ 0x00000000, 0x0000, 0xFFFF,
+ 0x00000050, 0x1025, 0x1477,
+ 0x00000080, 0x0500, 0x0F00,
+ 0x00000084, 0x0002, 0x0002,
+ 0x0000003C, 0x0004, 0x0004,
+ 0x00000048, 0x0010, 0x0010,
+ (uint32_t)-1
+};
+
+uint32_t iomux_config_bringup_dsu_uart_leon[] =
+{
+ 0x00000000, 0x0000, 0xFFFF,
+ 0x00000050, 0x1025, 0x1477,
+ 0x00000080, 0x0500, 0x0F00,
+ 0x00000084, 0x0002, 0x0002,
+ 0x0000003C, 0x0004, 0x0004,
+ 0x00000048, 0x0090, 0x0090,
+ (uint32_t)-1
+};
+
+struct iomux_config_table_t
+{
+ char *name;
+ uint32_t *config;
+};
+
+static const struct iomux_config_table_t iomux_config_table[] =
+{
+ { "bringup", iomux_config_bringup },
+ { "bringup_uart_leon", iomux_config_bringup_uart_leon },
+ { "bringup_dsu_uart_leon", iomux_config_bringup_dsu_uart_leon },
+ NULL
+};
+
+static enum
+{
DRAM_NOINIT,
DRAM_SDRAM,
DRAM_MIU,
} dram = DRAM_NOINIT;
/*
- * MIU configurations: pair of offset, value, where offset is relative to
- * MIU_BASE.
+ * MIU configurations: triplet of offset, value, mask, where offset is
+ * relative to MIU_BASE.
* There are special offsets that are interpreted by uboot as commands,
* see nvram.h.
*/
uint32_t miu_config_sdram_dini_64m[] =
{
- 0x0004, 0x00000894,
- 0x0008, 0x00000185,
- 0x000c, 0x00000120,
- 0x0020, 0x00000031,
- 0x00b4, 0x00002000,
- 0x003c, 0x00000c01,
- 0x003c, 0x00000c08,
- 0x0000, 0x00000008,
- 0x0000, 0x0000000c,
- 0x0000, 0x0000000e,
- 0x0000, 0x0000000f,
- NVRAM_MIU_WAIT_INIT_DONE_CODE_OP, 0,
+ 0x00000004, 0x0894, 0xFFFF,
+ 0x00000008, 0x0185, 0xFFFF,
+ 0x0000000c, 0x0120, 0xFFFF,
+ 0x00000020, 0x0031, 0xFFFF,
+ 0x000000b4, 0x2000, 0xFFFF,
+ 0x0000003c, 0x0c01, 0xFFFF,
+ 0x0000003c, 0x0c08, 0xFFFF,
+ 0x00000000, 0x0008, 0xFFFF,
+ 0x00000000, 0x000c, 0xFFFF,
+ 0x00000000, 0x000e, 0xFFFF,
+ 0x00000000, 0x000f, 0xFFFF,
+ NVRAM_MIU_WAIT_INIT_DONE_CODE_OP, 0, 0,
(uint32_t)-1
};
uint32_t miu_config_mt47h32m16[] =
{
- 0x003c, 0x0c01,
- 0x003c, 0x0c00,
- 0x008c, 0xFFFE,
- 0x0090, 0xFFFF,
- 0x0094, 0xFFFF,
- 0x0098, 0xFFFF,
- 0x008c, 0xFFFE,
- 0x10060, 0x8348,
- 0x10064, 0x0014,
- 0x10068, 0x0000,
- 0x1006c, 0x0000,
- 0x10040, 0x0000,
- 0x10010, 0x70ff,
- 0x100fc, 0x0000,
- NVRAM_MIU_WAIT_CODE_OP, 500,
- 0x0004, 0x0292,
- 0x0008, 0x008b,
- 0x000c, 0x1420,
- 0x0010, 0x1066,
- 0x0014, 0x1644,
- 0x0018, 0x7465,
- 0x001c, 0x204f,
- 0x0020, 0x0a62,
- 0x0024, 0x4004,
- 0x0028, 0x8000,
- 0x002c, 0xc000,
- 0x10000, 0x0010,
- 0x10070, 0x0033,
- 0x10074, 0x0000,
- 0x10004, 0x0000,
- 0x10008, 0x0000,
- 0x10078, 0x0200,
- 0x1007c, 0x0022,
- 0x1001c, 0x00a7,
- 0x100dc, 0x0055,
- 0x100d0, 0x004f,
- 0x100d4, 0x004f,
- 0x100a8, 0x0000,
- 0x003c, 0x0c01,
- 0x003c, 0x0c00,
- 0x10000, 0x0000,
- 0x10004, 0xaaaa,
- NVRAM_MIU_WAIT_CODE_OP, 1,
- 0x0000, 0x0000,
- 0x0000, 0x0008,
- 0x0000, 0x000c,
- NVRAM_MIU_WAIT_CODE_OP, 200,
- 0x0000, 0x000e,
- NVRAM_MIU_WAIT_CODE_OP, 500,
- 0x0000, 0x001f,
- NVRAM_MIU_WAIT_INIT_DONE_CODE_OP, 0,
- 0x008c, 0x0000,
+ 0x0000003c, 0x0c01, 0xFFFF,
+ 0x0000003c, 0x0c00, 0xFFFF,
+ 0x0000008c, 0xFFFE, 0xFFFF,
+ 0x00000090, 0xFFFF, 0xFFFF,
+ 0x00000094, 0xFFFF, 0xFFFF,
+ 0x00000098, 0xFFFF, 0xFFFF,
+ 0x0000008c, 0xFFFE, 0xFFFF,
+ 0x00010060, 0x8348, 0xFFFF,
+ 0x00010064, 0x0014, 0xFFFF,
+ 0x00010068, 0x0000, 0xFFFF,
+ 0x0001006c, 0x0000, 0xFFFF,
+ 0x00010040, 0x0000, 0xFFFF,
+ 0x00010010, 0x70ff, 0xFFFF,
+ 0x000100fc, 0x0000, 0xFFFF,
+ NVRAM_WAIT_CODE_OP, 500, 0,
+ 0x00000004, 0x0292, 0xFFFF,
+ 0x00000008, 0x008b, 0xFFFF,
+ 0x0000000c, 0x1420, 0xFFFF,
+ 0x00000010, 0x1066, 0xFFFF,
+ 0x00000014, 0x1644, 0xFFFF,
+ 0x00000018, 0x7465, 0xFFFF,
+ 0x0000001c, 0x204f, 0xFFFF,
+ 0x00000020, 0x0a62, 0xFFFF,
+ 0x00000024, 0x4004, 0xFFFF,
+ 0x00000028, 0x8000, 0xFFFF,
+ 0x0000002c, 0xc000, 0xFFFF,
+ 0x00010000, 0x0010, 0xFFFF,
+ 0x00010070, 0x0033, 0xFFFF,
+ 0x00010074, 0x0000, 0xFFFF,
+ 0x00010004, 0x0000, 0xFFFF,
+ 0x00010008, 0x0000, 0xFFFF,
+ 0x00010078, 0x0200, 0xFFFF,
+ 0x0001007c, 0x0022, 0xFFFF,
+ 0x0001001c, 0x00a7, 0xFFFF,
+ 0x000100dc, 0x0055, 0xFFFF,
+ 0x000100d0, 0x004f, 0xFFFF,
+ 0x000100d4, 0x004f, 0xFFFF,
+ 0x000100a8, 0x0000, 0xFFFF,
+ 0x0000003c, 0x0c01, 0xFFFF,
+ 0x0000003c, 0x0c00, 0xFFFF,
+ 0x00010000, 0x0000, 0xFFFF,
+ 0x00010004, 0xaaaa, 0xFFFF,
+ NVRAM_WAIT_CODE_OP, 1, 0,
+ 0x00000000, 0x0000, 0xFFFF,
+ 0x00000000, 0x0008, 0xFFFF,
+ 0x00000000, 0x000c, 0xFFFF,
+ NVRAM_WAIT_CODE_OP, 200, 0,
+ 0x00000000, 0x000e, 0xFFFF,
+ NVRAM_WAIT_CODE_OP, 500, 0,
+ 0x00000000, 0x001f, 0xFFFF,
+ NVRAM_MIU_WAIT_INIT_DONE_CODE_OP, 0, 0,
+ 0x0000008c, 0x0000, 0xFFFF,
(uint32_t)-1
};
@@ -344,6 +403,7 @@ static void print_usage(const char *cmd)
" [ --pkgcfg package number ] (300/500)\n"
" [ --gpio07 GPIO 0 to 7 config ] (300/500)\n"
" [ --gpio815 GPIO 8 to 15 config ] (300/500)\n"
+ " [ --iomux-config IOMUX config ] (500)\n"
" [ --gpiodir GPIO allowed directions ] (300/500)\n"
" [ --sconr SDRAM config register ] (300/500)\n"
" [ --stmg0r SDRAM timing0 register ] (300/500)\n"
@@ -495,16 +555,71 @@ static int parse_pkgcfg(char *arg)
return 0;
}
+static int parse_gpio_check(void)
+{
+ if (io != IO_NOINIT && io != IO_GPIO)
+ {
+ fprintf (stderr, "Several IO muxing configuration detected\n");
+ return -1;
+ }
+ else
+ {
+ io = IO_GPIO;
+ return 0;
+ }
+}
+
static int parse_gpio07(char *arg)
{
nvram.io.spcpio.gpio_0_7_cfg = (uint32_t)strtoul(arg, NULL, 0);
- return 0;
+ return parse_gpio_check();
}
static int parse_gpio815(char *arg)
{
nvram.io.spcpio.gpio_8_15_cfg = (uint32_t)strtoul(arg, NULL, 0);
- return 0;
+ return parse_gpio_check();
+}
+
+static void write_dynamic_config (uint16_t *config_offset, uint16_t *config_size,
+ uint32_t *config)
+{
+ *config_size = 0;
+ *config_offset = (uint32_t) ((uint8_t *) nvram_dynamic - (uint8_t *) &nvram);
+ /* Translate the configuration into NVRAM format, see nvram_dyn_cfg.S in
+ * u-boot. */
+ for ( ; *config != (uint32_t) -1; config += 3)
+ {
+ assert (!(config[1] & ~0xffff));
+ assert (!(config[2] & ~0xffff));
+ *nvram_dynamic++ = config[0];
+ *nvram_dynamic++ = (config[2] << 16) | config[1];
+ *config_size += 2 * sizeof (uint32_t);
+ }
+}
+
+static int parse_iomux_config(char *arg)
+{
+ if (io != IO_NOINIT)
+ {
+ fprintf (stderr, "Several IO muxing configuration detected\n");
+ return -1;
+ }
+ io = IO_IOMUX;
+ /* Lookup the requested config. */
+ const struct iomux_config_table_t *p;
+ for (p = iomux_config_table; p->name; p++)
+ {
+ if (strcmp(p->name, arg) == 0)
+ {
+ nvram.io.iomux.reserved = 0;
+ write_dynamic_config (&nvram.io.iomux.config_offset,
+ &nvram.io.iomux.config_size,
+ p->config);
+ return 0;
+ }
+ }
+ return -1;
}
static int parse_gpiodir(char *arg)
@@ -571,23 +686,12 @@ static int parse_miu_config(char *arg)
{
if (strcmp(p->name, arg) == 0)
{
- int size = 0;
- nvram.dram.miu.config_offset =
- (uint32_t) (nvram_dynamic - (uint32_t *) &nvram);
nvram.dram.miu.ram_size = p->ram_size;
nvram.dram.miu.reserved[0] = 0;
nvram.dram.miu.reserved[1] = 0;
- uint32_t *config;
- /* Translate the configuration into NVRAM format, see miu.S in
- * u-boot. */
- for (config = p->config; *config != (uint32_t) -1; config += 2)
- {
- assert (!(config[0] & ~0x3fffc));
- assert (!(config[1] & ~0xffff));
- *nvram_dynamic++ = (config[0] >> 2 << 16) | config[1];
- size++;
- }
- nvram.dram.miu.config_size = size;
+ write_dynamic_config (&nvram.dram.miu.config_offset,
+ &nvram.dram.miu.config_size,
+ p->config);
return 0;
}
}
@@ -798,6 +902,7 @@ struct parser parse_table[] =
{ "pkgcfg", parse_pkgcfg, NVRAM_TYPE_SPC300 | NVRAM_TYPE_MSE500 },
{ "gpio07", parse_gpio07, NVRAM_TYPE_SPC300 | NVRAM_TYPE_MSE500 },
{ "gpio815", parse_gpio815, NVRAM_TYPE_SPC300 | NVRAM_TYPE_MSE500 },
+ { "iomux_config", parse_iomux_config, NVRAM_TYPE_MSE500 },
{ "gpiodir", parse_gpiodir, NVRAM_TYPE_SPC300 | NVRAM_TYPE_MSE500 },
{ "sconr", parse_sdramcfg, NVRAM_TYPE_SPC300 | NVRAM_TYPE_MSE500 },
{ "stmg0r", parse_sdramtmg0, NVRAM_TYPE_SPC300 | NVRAM_TYPE_MSE500 },
@@ -887,35 +992,36 @@ int main(int argc, char **argv)
{ "pkgcfg", required_argument, NULL, 3 },
{ "gpio07", required_argument, NULL, 4 },
{ "gpio815", required_argument, NULL, 5 },
- { "gpiodir", required_argument, NULL, 6 },
- { "sconr", required_argument, NULL, 7 },
- { "stmg0r", required_argument, NULL, 8 },
- { "stmg1r", required_argument, NULL, 9 },
- { "srefr", required_argument, NULL, 10 },
- { "ssize", required_argument, NULL, 11 },
- { "miu-config", required_argument, NULL, 12 },
- { "forg", required_argument, NULL, 13 },
- { "img0off", required_argument, NULL, 14 },
- { "img1off", required_argument, NULL, 15 },
- { "nbimg", required_argument, NULL, 16 },
- { "name", required_argument, NULL, 17 },
- { "partnb", required_argument, NULL, 18 },
- { "desc", required_argument, NULL, 19 },
- { "serial", required_argument, NULL, 20 },
- { "phy", required_argument, NULL, 21 },
- { "ethernet", required_argument, NULL, 22 },
- { "plc", required_argument, NULL, 23 },
- { "dpw", required_argument, NULL, 24 },
- { "oem", required_argument, NULL, 25 },
- { "tonemask", required_argument, NULL, 26 },
- { "factory", required_argument, NULL, 27 },
- { "portnb", required_argument, NULL, 28 },
- { "imgmaxsize", required_argument, NULL, 29 },
- { "cpupartnb", required_argument, NULL, 30 },
- { "brdnb", required_argument, NULL, 31 },
- { "brddesc", required_argument, NULL, 32 },
- { "brdid", required_argument, NULL, 33 },
- { "afetype", required_argument, NULL, 34 },
+ { "iomux-config", required_argument, NULL, 6 },
+ { "gpiodir", required_argument, NULL, 7 },
+ { "sconr", required_argument, NULL, 8 },
+ { "stmg0r", required_argument, NULL, 9 },
+ { "stmg1r", required_argument, NULL, 10 },
+ { "srefr", required_argument, NULL, 11 },
+ { "ssize", required_argument, NULL, 12 },
+ { "miu-config", required_argument, NULL, 13 },
+ { "forg", required_argument, NULL, 14 },
+ { "img0off", required_argument, NULL, 15 },
+ { "img1off", required_argument, NULL, 16 },
+ { "nbimg", required_argument, NULL, 17 },
+ { "name", required_argument, NULL, 18 },
+ { "partnb", required_argument, NULL, 19 },
+ { "desc", required_argument, NULL, 20 },
+ { "serial", required_argument, NULL, 21 },
+ { "phy", required_argument, NULL, 22 },
+ { "ethernet", required_argument, NULL, 23 },
+ { "plc", required_argument, NULL, 24 },
+ { "dpw", required_argument, NULL, 25 },
+ { "oem", required_argument, NULL, 26 },
+ { "tonemask", required_argument, NULL, 27 },
+ { "factory", required_argument, NULL, 28 },
+ { "portnb", required_argument, NULL, 29 },
+ { "imgmaxsize", required_argument, NULL, 30 },
+ { "cpupartnb", required_argument, NULL, 31 },
+ { "brdnb", required_argument, NULL, 32 },
+ { "brddesc", required_argument, NULL, 33 },
+ { "brdid", required_argument, NULL, 34 },
+ { "afetype", required_argument, NULL, 35 },
{ 0, 0, 0, 0 }
};
diff --git a/common/tools/genNVRAM/nvram_mse500_simu.conf b/common/tools/genNVRAM/nvram_mse500_simu.conf
index f726e70088..3f03e42943 100644
--- a/common/tools/genNVRAM/nvram_mse500_simu.conf
+++ b/common/tools/genNVRAM/nvram_mse500_simu.conf
@@ -1,6 +1,5 @@
pkgcfg=0x0000300f
-gpio07=0x00000000
-gpio815=0x00000000
+iomux_config = bringup
gpiodir=0xffffffff
miu_config = mt47h32m16
forg=0x00000006