blob: baa24d8a5f96e3fccbf233b9d75fc94cbaa25a95 [file] [log] [blame]
/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates
********************************************************************************
Marvell GPL License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED. The GPL License provides additional details about this warranty
disclaimer.
*******************************************************************************/
#include <common.h>
#if defined(CONFIG_CMD_SAR)
#include "cpu/mvCpu.h"
#include "ctrlEnv/mvCtrlEnvRegs.h"
#include "ctrlEnv/mvCtrlEnvLib.h"
#include "boardEnv/mvBoardEnvLib.h"
#define FREQ_MODES_NUM 20
typedef struct {
char *name;
MV_U8 cpuFreq;
MV_U8 fabricFreq;
MV_U8 AltfabricFreq;
} MV_FREQ_MODE;
MV_FREQ_MODE freq_modes[FREQ_MODES_NUM] = {
/* Freq Conf CPU Freq Fabric Freq AltFabric` */
/* 0x4d/[4:2] 0x4e/[4:1] */
{" 667 / 667 / 222 / 444 Mhz ", 0x9, 0x2, 0x2}, /* 0 */
{" 667 / 667 / 333 / 667 Mhz ", 0x9, 0x13, 0x13}, /* 1 */
{" 800 / 400 / 200 / 400 Mhz ", 0xA, 0x5, 0x5}, /* 2 */
{"1000 / 500 / 250 / 500 Mhz ", 0x0, 0x5, 0x5}, /* 3 */
{"1066 / 533 / 266 / 533 Mhz ", 0x1, 0x5, 0x5}, /* 4 */
{"1200 / 600 / 300 / 300 Mhz ", 0x2, 0xC, 0xc}, /* 5 */
{"1200 / 600 / 200 / 400 Mhz ", 0x2, 0x9, 0x9}, /* 6 */
{"1200 / 600 / 300 / 600 Mhz ", 0x2, 0x5, 0x5}, /* 7 */
{"1333 / 667 / 266 / 533 Mhz ", 0x3, 0xA, 0xA}, /* 8 */
{"1333 / 667 / 333 / 667 Mhz ", 0x3, 0x5, 0x5}, /* 9 */
{" 667 / 667 / 222 / 444 Mhz (Fabric DFS)", 0x9, 0x1a, 0x2}, /* 10 */
{" 667 / 667 / 333 / 667 Mhz (Fabric DFS)", 0x9, 0x1a, 0x13}, /* 11 */
{" 800 / 400 / 200 / 400 Mhz (Fabric DFS)", 0xA, 0x1a, 0x5}, /* 12 */
{"1000 / 500 / 250 / 500 Mhz (Fabric DFS)", 0x0, 0x1a, 0x5}, /* 13 */
{"1066 / 533 / 266 / 533 Mhz (Fabric DFS)", 0x1, 0x1a, 0x5}, /* 14 */
{"1200 / 600 / 300 / 300 Mhz (Fabric DFS)", 0x2, 0x1a, 0xc}, /* 15 */
{"1200 / 600 / 200 / 400 Mhz (Fabric DFS)", 0x2, 0x1a, 0x9}, /* 16 */
{"1200 / 600 / 300 / 600 Mhz (Fabric DFS)", 0x2, 0x1a, 0x5}, /* 17 */
{"1333 / 667 / 266 / 533 Mhz (Fabric DFS)", 0x3, 0x1a, 0xA}, /* 18 */
{"1333 / 667 / 333 / 667 Mhz (Fabric DFS)", 0x3, 0x1a, 0x5} /* 19 */
};
MV_FREQ_MODE freq_modes_B0[FREQ_MODES_NUM] = {
/* Freq Conf CPU Freq Fabric Freq AltFabric */
/* 0x4d/[4:2] 0x4e/[4:1] */
{" 800 / 400 / 200 / 400 Mhz", 0xA, 5, 5}, /* 0 */
{"1066 / 533 / 266 / 533 Mhz", 0x1, 5, 5}, /* 1 */
{"1200 / 600 / 300 / 600 Mhz", 0x2, 5, 5}, /* 2 */
{"1200 / 600 / 200 / 400 Mhz", 0x2, 9, 9}, /* 3 */
{"1333 / 667 / 333 / 667 Mhz", 0x3, 5, 5}, /* 4 */
{"1500 / 750 / 375 / 750 Mhz", 0x4, 5, 5}, /* 5 */
{"1500 / 750 / 250 / 500 Mhz", 0x4, 9, 9}, /* 6 */
{"1600 / 800 / 266 / 533 Mhz", 0xb, 9, 9}, /* 7 */
{"1600 / 800 / 400 / 800 Mhz", 0xb, 5, 5}, /* 9 */
{"1600 / 800 / 320 / 640 Mhz", 0xb, 10, 10}, /* 10 */
{NULL,0,0,0}, /* 11 */
{NULL,0,0,0}, /* 12 */
{NULL,0,0,0}, /* 13 */
{NULL,0,0,0}, /* 14 */
{NULL,0,0,0}, /* 15 */
{NULL,0,0,0}, /* 16 */
{NULL,0,0,0}, /* 17 */
{NULL,0,0,0}, /* 18 */
{NULL,0,0,0} /* 19 */
};
static int do_sar_list(int argc, char *const argv[])
{
const char *cmd;
int i;
if (argc < 1)
goto usage;
cmd = argv[0];
if (strcmp(cmd, "cpufreq") == 0) {
printf("Determines the frequency of CPU:\n");
printf("\t0x0 = 1000Mhz\n");
printf("\t0x1 = 1066Mhz\n");
printf("\t0x2 = 1200Mhz\n");
printf("\t0x3 = 1333Mhz\n");
printf("\t0x4 = 1500Mhz\n");
printf("\t0x9 = 667Mhz\n");
printf("\t0xA = 800Mhz\n");
printf("\t0xB = 1600Mhz\n");
} else if (strcmp(cmd, "fabfreq") == 0) {
printf("Determines the ratios between PCLK0, XPCLK, HCLK and DRAM clock.\n");
printf("For full deatails about the various options please refer to the clocking section in the HW spec.\n");
} else if (strcmp(cmd, "l2size") == 0) {
printf("Determines the amount of L2 cache:\n");
printf("\t0x0 = 0.5MB\n");
printf("\t0x1 = 1MB\n");
printf("\t0x3 = 2MB\n");
} else if (strcmp(cmd, "bootsrc") == 0) {
printf("Determines the Boot source device:\n");
printf("\t0x0 = NOR\n");
printf("\t0x1 = NAND\n");
printf("\t0x2 = UART\n");
printf("\t0x3 = SPI\n");
printf("\t0x4 = PCI-E\n");
printf("\t0x5 = SATA\n");
/* printf("\t0x6 = NAND (legacy)\n");
printf("\t0x7 = Debug prompt\n");*/
} else if (strcmp(cmd, "bootwidth") == 0) {
printf("Determines the Boot device width for boot via NOR/NAND flash:\n");
printf("\t0x0 = 8bit\n");
printf("\t0x1 = 16bit\n");
if (DB_784MP_GP_ID != mvBoardIdGet()){
printf("\t0x2 = 32bit\n");
printf("\t0x3 = Reserved\n");
}
printf("Determines the Boot device width for boot via SPI flash:\n");
printf("\t0x0 = 32bit\n");
printf("\t0x1 = 24bit\n");
printf("\t0x2-0x3 = Reserved\n");
} else if (strcmp(cmd, "cpu0Endianess") == 0) {
printf("Determines the CPU core mode:\n");
if (DB_784MP_GP_ID != mvBoardIdGet()){
printf("\t0x0 = ARMv6 UP\n");
printf("\t0x1 = ARMv7 UP\n");
printf("\t0x2 = ARMv6 MP\n");
}
printf("\t0x3 = ARMv7 MP\n");
} else if (strcmp(cmd, "cpusnum") == 0) {
printf("Determines the number of CPU cores:\n");
printf("\t0x0 = Single CPU\n");
printf("\t0x1 = Dual CPU\n");
printf("\t0x2 = Reserved\n");
printf("\t0x3 = Quad CPU\n");
} else if (strcmp(cmd, "freq") == 0) {
MV_FREQ_MODE *pFreqModes;
if (mvCtrlRevGet() == 2) {
pFreqModes = freq_modes_B0;
printf("\n\nval| Frequency Configuration | CPU Freq| Fabric Freq| \n");
}
else {
pFreqModes = freq_modes;
printf("\n\nval| Clock Frequency Configuration Options | CPU Freq| Fabric Freq| AltFabric Freq|\n");
}
for (i=0; i < FREQ_MODES_NUM; i++) {
if (pFreqModes->name == NULL)
break;
printf(" %02d| %s| 0x%02x| 0x%02x|", i,
pFreqModes->name,
pFreqModes->cpuFreq,
pFreqModes->fabricFreq);
if (mvCtrlRevGet() == 2)
printf("\n");
else
printf(" 0x%02x|\n", pFreqModes->AltfabricFreq);
pFreqModes++;
}
} else if (strcmp(cmd, "pex") == 0) {
printf("Determines the pex capability mode:\n");
printf("\t0x0 = GEN 1\n");
printf("\t0x1 = GEN 2\n");
} else if (strcmp(cmd, "dramecc") == 0) {
printf("Determines the Dram ECC mode: (Valid only in 1200/300 frequency setup)\n");
printf("\t0x0 = Dram ECC is disabled\n");
printf("\t0x1 = Dram ECC is enabled\n");
} else if (strcmp(cmd, "drambuswidth") == 0) {
printf("Determines the Dram bus width: (Valid only in 1066/533 and 800/400 modes)\n");
printf("\t0x0 = Bus width - 64bit\n");
printf("\t0x1 = Bus width - 32bit\n");
} else if (strcmp(cmd, "dump") == 0) {
printf("Read the SAR register directly\n");
}
else if (strcmp(cmd, "pexmode") == 0) {
printf("sets the mode of PEX0 and PEX1\n");
printf("\t0x0 = PEX0 is x1 and PEX1 is x1\n");
printf("\t0x1 = PEX0 is x4 and PEX1 is x1\n");
printf("\t0x2 = PEX0 is x1 and PEX1 is x4\n");
printf("\t0x3 = PEX0 is x4 and PEX1 is x4\n");
}
return 0;
usage:
printf("Usage: sar list [options] (see help) \n");
return 1;
}
static int do_sar_read(int argc, char *const argv[])
{
int i = 0;
const char *cmd;
MV_U8 cpuFreq;
MV_U8 fabricFreq;
MV_U8 l2size;
MV_U8 bootsrc;
MV_U8 bootwidth;
MV_U8 cpu0core;
MV_U8 cpusnum;
MV_U8 AltfabricFreq;
MV_U8 mvCtrlRev = mvCtrlRevGet();
char* cpuFreqArr[12];
char* bootSrcArr[8];
char* bootWidthArr[2];
cpuFreqArr[0] = "1000 MHz";
cpuFreqArr[1] = "1066 MHz";
cpuFreqArr[2] = "1200 MHz";
cpuFreqArr[3] = "1333 MHz";
cpuFreqArr[4] = "1500 MHz";
cpuFreqArr[5] = "RSVD";
cpuFreqArr[6] = "RSVD";
cpuFreqArr[7] = "RSVD";
cpuFreqArr[8] = "RSVD";
cpuFreqArr[9] = "667 MHz";
cpuFreqArr[10] = "800 MHz";
cpuFreqArr[11] = "1600 MHz";
bootSrcArr[0] = "BootROM enabled, Boot from Device (NOR) flash";
bootSrcArr[1] = "BootROM enabled, Boot from NAND flash";
bootSrcArr[2] = "BootROM enabled, Boot from UART";
bootSrcArr[3] = " BootROM enabled, Boot from SPI0 (CS0)";
bootSrcArr[4] = "BootROM enabled, Boot from PCIe Port 0.0";
bootSrcArr[5] = "BootROM enabled, Boot from SATA (see Nand Flash Initialization Sequence / SERDES Selection SAR for more details)";
bootSrcArr[6] = "RSVD";
bootSrcArr[7] = "BootROM enabled, UART debug prompt mode";
bootWidthArr[0] = "NOR/NAND: 8bits / SPI: 32bits";
bootWidthArr[1] = "NOR/NAND: 16bits / SPI: 24bits/16bits";
int flag = 0;
if (argc < 1)
goto usage;
cmd = argv[0];
if (strcmp(cmd, "cpufreq") == 0) {
printf("cpufreq = %d\n", mvBoardCpuFreqGet());
} else if (strcmp(cmd, "fabfreq") == 0) {
printf("fabfreq = %d\n", mvBoardFabFreqGet());
} else if (strcmp(cmd, "l2size") == 0) {
printf("l2size = %d\n", mvBoardL2SizeGet());
} else if (strcmp(cmd, "bootsrc") == 0) {
printf("bootsrc = %d\n", mvBoardBootDevGet());
} else if (strcmp(cmd, "bootwidth") == 0) {
printf("bootwidth = %d\n", mvBoardBootDevWidthGet());
} else if (strcmp(cmd, "cpu0Endianess") == 0) {
printf("cpu0Endianess = %d\n", mvBoardCpu0EndianessGet());
} else if (strcmp(cmd, "cpusnum") == 0) {
printf("cpusnum = %d\n", mvBoardCpuCoresNumGet());
} else if (strcmp(cmd, "pex") == 0) {
printf("pex = %d\n", mvBoardPexCapabilityGet());
} else if (strcmp(cmd, "dramecc") == 0) {
printf("Dram ECC = %d\n", mvBoardDramEccGet());
} else if (strcmp(cmd, "drambuswidth") == 0) {
if (mvBoardDramBusWidthGet())
printf("Dram Bus Width = 32bit\n");
else
printf("Dram Bus Width = 64bit\n");
} else if (strcmp(cmd, "dump") == 0) {
cpuFreq = (MV_REG_READ(MPP_SAMPLE_AT_RESET(0)) & SAR0_CPU_FREQ_MASK) >> SAR0_CPU_FREQ_OFFSET;
fabricFreq = (MV_REG_READ(MPP_SAMPLE_AT_RESET(0)) & SAR0_FABRIC_FREQ_MASK) >> SAR0_FABRIC_FREQ_OFFSET;
l2size = (MV_REG_READ(MPP_SAMPLE_AT_RESET(0)) & SAR0_L2_SIZE_MASK) >> SAR0_L2_SIZE_OFFSET;
bootsrc = (MV_REG_READ(MPP_SAMPLE_AT_RESET(0)) & SAR0_BOOTSRC_MASK) >> SAR0_BOOTSRC_OFFSET;
bootwidth = (MV_REG_READ(MPP_SAMPLE_AT_RESET(0)) & SAR0_BOOTWIDTH_MASK) >> SAR0_BOOTWIDTH_OFFSET;
cpu0core = ((MV_REG_READ(MPP_SAMPLE_AT_RESET(0)) & SAR0_CPU0CORE_MASK) >> SAR0_CPU0CORE_OFFSET) | ((MV_REG_READ(MPP_SAMPLE_AT_RESET(1)) & SAR1_CPU0CORE_MASK) << (SAR1_CPU0CORE_OFFSET + 1));
cpusnum = (MV_REG_READ(MPP_SAMPLE_AT_RESET(1)) & SAR1_CPU_CORE_MASK) >> SAR1_CPU_CORE_OFFSET;
fabricFreq |= (MV_REG_READ(MPP_SAMPLE_AT_RESET(1)) & SAR1_CPU_MODE_MASK) >> (SAR1_CPU_MODE_OFFSET - 4);
printf("cpufreq = %d ==> %s\n", cpuFreq, cpuFreqArr[cpuFreq]);
printf("fabricFreq = %d\n", fabricFreq);
printf("l2size = %d\n", l2size);
printf("bootsrc = %d ==> %s\n", bootsrc, bootSrcArr[bootsrc]);
printf("bootwidth = %d ==> %s\n", bootwidth, bootWidthArr[bootwidth]);
printf("cpu0core = %d\n", cpu0core);
printf("cpusnum = %d\n", cpusnum);
} else if (strcmp(cmd, "freq") == 0) {
MV_FREQ_MODE *pFreqModes;
cpuFreq = mvBoardCpuFreqGet();
if (mvCtrlRev == 2)
pFreqModes = freq_modes_B0;
else {
pFreqModes = freq_modes;
AltfabricFreq = mvBoardAltFabFreqGet();
}
fabricFreq = mvBoardFabFreqGet();
for (i=0; i<FREQ_MODES_NUM; i++) {
if (pFreqModes->name == NULL)
continue;
if ((pFreqModes->cpuFreq == cpuFreq) &&
(pFreqModes->fabricFreq == fabricFreq)) {
if (mvCtrlRev ==2) {
printf("Mode is: %s\n", pFreqModes->name);
flag = 1;
break;
}
if (pFreqModes->AltfabricFreq == AltfabricFreq) {
printf("Mode is: %s\n", pFreqModes->name);
flag = 1;
break;
}
}
pFreqModes++;
}
if (flag == 0)
printf("Current freq mode is invalid!\n");
} else if (strcmp(cmd, "pexmode") == 0) {
if ((mvBoardPexModeGet()) == 0)
printf("\t0x0 = PEX0 is x1 and PEX1 is x1\n");
else if ((mvBoardPexModeGet()) == 1)
printf("\t0x1 = PEX0 is x4 and PEX1 is x1\n");
else if ((mvBoardPexModeGet()) == 2)
printf("\t0x2 = PEX0 is x1 and PEX1 is x4\n");
else if ((mvBoardPexModeGet()) == 3)
printf("\t0x3 = PEX0 is x4 and PEX1 is x4\n");
else
printf("PEX mode is not valid!\n");
}
return 0;
usage:
printf("Usage: SatR read [options] (see help) \n");
return 1;
}
static int do_sar_write(int argc, char *const argv[])
{
const char *cmd;
MV_FREQ_MODE *pFreqModes;
MV_U8 mvCtrlRev = mvCtrlRevGet();
MV_U32 tmp;
if (argc < 2)
goto usage;
cmd = argv[0];
if (strcmp(cmd, "cpufreq") == 0) {
MV_U8 freq = simple_strtoul(argv[1], NULL, 10);
if (mvBoardCpuFreqSet(freq) != MV_OK)
goto write_fail;
if (mvCtrlRevGet() == 2) {
/* update AVS based on new cpu frequency */
/* since AVS enble 0x20868[9] is not afected by reset */
tmp = MV_REG_READ(AVS_CONTROL2_REG);
if ((0x4 == freq) || (0xB == freq)){
MV_U32 tmp2;
tmp2 = MV_REG_READ(AVS_LOW_VDD_LIMIT);
tmp2 |= 0x0f0;
MV_REG_WRITE(AVS_LOW_VDD_LIMIT , tmp2);
tmp |= BIT9; /* Enable AVS */
}
else
tmp &= ~BIT9; /* disable AVS */
MV_REG_WRITE(AVS_CONTROL2_REG , tmp);
}
} else if (strcmp(cmd, "fabfreq") == 0) {
MV_U8 freq = simple_strtoul(argv[1], NULL, 10);
if (mvBoardFabFreqSet(freq) != MV_OK)
goto write_fail;
} else if (strcmp(cmd, "l2size") == 0) {
MV_U8 l2c = simple_strtoul(argv[1], NULL, 10);
if (mvBoardL2SizeSet(l2c) != MV_OK)
goto write_fail;
} else if (strcmp(cmd, "bootsrc") == 0) {
MV_U8 boot = simple_strtoul(argv[1], NULL, 10);
if (mvBoardBootDevSet(boot) != MV_OK)
goto write_fail;
} else if (strcmp(cmd, "bootwidth") == 0) {
MV_U8 width = simple_strtoul(argv[1], NULL, 10);
if (mvBoardBootDevWidthSet(width) != MV_OK)
goto write_fail;
} else if (strcmp(cmd, "cpu0Endianess") == 0) {
MV_U8 mode = simple_strtoul(argv[1], NULL, 10);
if (mvBoardCpu0EndianessSet(mode) != MV_OK)
goto write_fail;
} else if (strcmp(cmd, "cpusnum") == 0) {
MV_U8 cores = simple_strtoul(argv[1], NULL, 10);
if (mvBoardCpuCoresNumSet(cores) != MV_OK)
goto write_fail;
} else if (strcmp(cmd, "pex") == 0) {
MV_U8 pexMode = simple_strtoul(argv[1], NULL, 10);
if (mvBoardPexCapabilitySet(pexMode) != MV_OK)
goto write_fail;
} else if (strcmp(cmd, "dramecc") == 0) {
MV_U8 eccMode = simple_strtoul(argv[1], NULL, 10);
if (mvBoardDramEccSet(eccMode) != MV_OK)
goto write_fail;
} else if (strcmp(cmd, "drambuswidth") == 0) {
MV_U8 dramBusWidth = simple_strtoul(argv[1], NULL, 10);
if (mvBoardDramBusWidthSet(dramBusWidth) != MV_OK)
goto write_fail;
} else if (strcmp(cmd, "freq") == 0) {
MV_U8 mode = simple_strtoul(argv[1], NULL, 10);
if ((mode<0) || (mode >=FREQ_MODES_NUM)) {
printf("invalid mode %d\n", mode);
goto write_fail;
}
if (mvCtrlRev == 2)
pFreqModes = &freq_modes_B0[mode];
else {
pFreqModes = &freq_modes[mode];
if (mvBoardAltFabFreqSet(pFreqModes->AltfabricFreq) != MV_OK)
goto write_fail;
}
if (mvBoardCpuFreqSet(pFreqModes->cpuFreq) != MV_OK)
goto write_fail;
if (mvCtrlRevGet() == 2) {
/* update AVS based on new cpu frequency */
/* since AVS enble 0x20868[9] is not afected by reset */
tmp = MV_REG_READ(AVS_CONTROL2_REG);
if ( (0x4 == pFreqModes->cpuFreq) || (0xB == pFreqModes->cpuFreq)) {
MV_U32 tmp2;
tmp2 = MV_REG_READ(AVS_LOW_VDD_LIMIT);
tmp2 |= 0x0f0;
MV_REG_WRITE(AVS_LOW_VDD_LIMIT , tmp2);
tmp |= BIT9; /* Enable AVS */
}
else
tmp &= ~BIT9; /* disable AVS */
MV_REG_WRITE(AVS_CONTROL2_REG , tmp);
}
if (mvBoardFabFreqSet(pFreqModes->fabricFreq) != MV_OK)
goto write_fail;
} else if (strcmp(cmd, "pexmode") == 0) {
MV_U8 pexMode= simple_strtoul(argv[1], NULL, 10);
if (mvBoardPexModeSet(pexMode) != MV_OK)
goto write_fail;
}
return 0;
write_fail:
printf("Write S@R failed!\n");
return 1;
usage:
printf("Usage: SatR write [options] (see help) \n");
return 1;
}
int do_sar(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
{
const char *cmd;
/* need at least two arguments */
if (argc < 2)
goto usage;
cmd = argv[1];
if (strcmp(cmd, "list") == 0)
return do_sar_list(argc - 2, argv + 2);
else if (strcmp(cmd, "write") == 0) {
if (do_sar_write(argc - 2, argv + 2) == 0) {
do_sar_read(argc - 2, argv + 2);
}
return 0;
} else if (strcmp(cmd, "read") == 0)
return do_sar_read(argc - 2, argv + 2);
usage:
cmd_usage(cmdtp);
return 1;
}
U_BOOT_CMD(SatR, 6, 1, do_sar,
"Sample At Reset sub-system\n",
"list cpufreq - prints the S@R modes list\n"
"SatR list fabfreq - prints the S@R modes list\n"
"SatR list l2size - prints the S@R modes list\n"
"SatR list bootsrc - prints the S@R modes list\n"
"SatR list bootwidth - prints the S@R modes list\n"
"SatR list cpu0Endianess- prints the S@R modes list\n"
"SatR list cpusnum - prints the S@R modes list\n"
"SatR list freq - prints the S@R modes list\n"
"SatR list pex - prints the S@R modes list\n"
"SatR list pexmode - prints the S@R modes list\n"
"SatR list dramecc - prints the S@R modes list\n"
"SatR list drambuswidth - prints the S@R modes list\n"
"SatR read cpufreq - read and print the CPU frequency S@R value\n"
"SatR read fabfreq - read and print the Fabric frequency S@R value\n"
"SatR read l2size - read and print the L2 cache size S@R value\n"
"SatR read bootsrc - read and print the Boot source S@R value\n"
"SatR read bootwidth - read and print the Boot device width S@R value\n"
"SatR read cpu0Endianess- read and print the CPU0 core mode S@R value\n"
"SatR read cpusnum - read and print the number of CPU cores S@R value (reading the I2C device)\n"
"SatR read freq - read and print the mode of cpu/ddr freq S@R value (reading the I2C device)\n"
"SatR read pex - read and print the pex capability mode from S@R value (reading the I2C device)\n"
"SatR read dramecc - read and print the Dram ECC mode from S@R value (reading the I2C device)\n"
"SatR read drambuswidth <val> - read and print the S@R with the Dram bus width value (reading the I2C device)\n"
"SatR read pex - read and print the pex mode(x1 or x4) from S@R value (reading the I2C device)\n"
"SatR read dump - read and print the SAR register \n\n"
"SatR write cpufreq <val> - write the S@R with CPU frequency value\n"
"SatR write fabfreq <val> - write the S@R with Fabric frequency value\n"
"SatR write l2size <val> - write the S@R with L2 cache size value\n"
"SatR write bootsrc <val> - write the S@R with Boot source value\n"
"SatR write bootwidth <val> - write the S@R with Boot device width value\n"
"SatR write cpu0Endianess <val> - write the S@R with CPU0 cpu0Endianess value\n"
"SatR write cpusnum <val> - write the S@R with the number of CPU cores\n"
"SatR write freq <val> - write the S@R with the cpu/ddr freq mode\n"
"SatR write pex <val> - write the S@R with the pex capability mode\n"
"SatR write dramecc <val> - write the S@R with the Dram ECC mode\n"
"SatR write drambuswidth <val> - write the S@R with the Dram bus width value\n"
"SatR write pexmode <val> - write the S@R with the pex mode (x1 or x4)\n"
);
#endif /*defined(CONFIG_CMD_SAR)*/