Commit 1d8e2061 authored by Luc Verhaegen's avatar Luc Verhaegen
Browse files

meminfo: (re-)introduce fex and usage printing



Triggered by command line arguments.
Signed-off-by: default avatarLuc Verhaegen <libv@skynet.be>
parent 0471a131
......@@ -23,6 +23,7 @@
#include <stdint.h>
#include <errno.h>
#include <sys/io.h>
#include <stdbool.h>
typedef uint32_t u32;
......@@ -307,12 +308,85 @@ dram_para_print_uboot(struct dram_para *dram_para)
printf("}\n");
}
/*
* Print output matching the .fex output, so it can be stuck in a
* fex file directly.
*/
void
dram_para_print_fex(struct dram_para *dram_para)
{
printf("; Insert this section into your .fex file\n");
printf("[dram_para]\n");
printf("dram_baseaddr = 0x40000000\n");
printf("dram_clk = %d\n", dram_para->clock);
printf("dram_type = %d\n", dram_para->type);
printf("dram_rank_num = %d\n", dram_para->rank_num);
printf("dram_chip_density = %d\n", dram_para->density);
printf("dram_io_width = %d\n", dram_para->io_width);
printf("dram_bus_width = %d\n", dram_para->bus_width);
printf("dram_cas = %d\n", dram_para->cas);
printf("dram_zq = 0x%02x\n", dram_para->zq);
printf("dram_odt_en = %d\n", dram_para->odt_en);
printf("dram_size = !!! FIXME !!!\n");
printf("dram_tpr0 = 0x%08x\n", dram_para->tpr0);
printf("dram_tpr1 = 0x%04x\n", dram_para->tpr1);
printf("dram_tpr2 = 0x%05x\n", dram_para->tpr2);
printf("dram_tpr3 = 0x%02x\n", dram_para->tpr3);
printf("dram_tpr4 = 0x%02x\n", dram_para->tpr4);
printf("dram_tpr5 = 0x%02x\n", dram_para->tpr5);
printf("dram_emr1 = 0x%02x\n", dram_para->emr1);
printf("dram_emr2 = 0x%02x\n", dram_para->emr2);
printf("dram_emr3 = 0x%02x\n", dram_para->emr3);
}
static void
print_usage(const char *name)
{
printf("Utility to retrieve DRAM information from registers on "
"Allwinner SoCs.\n");
printf("\n");
printf("This is part of the sunxi-tools package from the sunxi "
"project. ");
printf("For more \ninformation visit "
"http://linux-sunxi.org/Sunxi-tools.\n");
printf("\n");
printf("Usage: %s [OPTION]\n", name);
printf("\n");
printf("Options:\n");
printf(" -f: print in FEX format (default).\n");
printf(" -u: print in sunxi U-Boot dram.c file format.\n");
printf(" -h: print this usage information.\n");
}
int
main(int argc, char *argv[])
{
struct dram_para dram_para = {0};
bool uboot;
int ret;
if (argc == 2) {
if (argv[1][0] == '-') {
if (argv[1][1] == 'f')
uboot = false;
else if (argv[1][1] == 'u')
uboot = true;
else if (argv[1][1] == 'h')
goto help;
else if ((argv[1][1] == '-') && (argv[1][2] == 'h'))
goto help;
else
goto usage;
if (argv[1][2] != 0)
goto usage;
} else
goto usage;
} else if (argc == 1)
uboot = false;
else
goto usage;
devmem_fd = open(DEVMEM_FILE, O_RDWR);
if (devmem_fd == -1) {
fprintf(stderr, "Error: failed to open %s: %s\n", DEVMEM_FILE,
......@@ -335,7 +409,18 @@ main(int argc, char *argv[])
if (ret)
return ret;
dram_para_print_uboot(&dram_para);
if (uboot)
dram_para_print_uboot(&dram_para);
else
dram_para_print_fex(&dram_para);
return 0;
usage:
fprintf(stderr, "Error: wrong argument(s).\n");
print_usage(argv[0]);
return EINVAL;
help:
print_usage(argv[0]);
return 0;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment