unsigned long attr);
bool sbi_hart_has_feature(u32 hartid, unsigned long feature);
unsigned long sbi_hart_get_features(u32 hartid);
-int sbi_hart_get_features_str(u32 hartid, char *features_str, int nfstr);
+void sbi_hart_get_features_str(u32 hartid, char *features_str, int nfstr);
void __attribute__((noreturn)) sbi_hart_hang(void);
* updated
* @param nfstr length of the features_str. The feature string will be truncated
* if nfstr is not long enough.
- * @return the features value currently set for the given platform
*/
-int sbi_platform_get_features_str(const struct sbi_platform *plat,
- char *features_str, int nfstr);
+void sbi_platform_get_features_str(const struct sbi_platform *plat,
+ char *features_str, int nfstr);
/**
* Get name of the platform
* updated
* @param nfstr length of the features_str. The feature string will be truncated
* if nfstr is not long enough.
- * @return the features value currently set for the given platform
*/
-int sbi_hart_get_features_str(u32 hartid, char *features_str, int nfstr)
+void sbi_hart_get_features_str(u32 hartid, char *features_str, int nfstr)
{
unsigned long features, feat = 1UL;
char *temp;
int offset = 0;
- if (!features_str || !nfstr)
- return SBI_EINVAL;
+ if (!features_str || nfstr <= 0)
+ return;
+ sbi_memset(features_str, 0, nfstr);
features = sbi_hart_get_features(hartid);
+ if (!features)
+ goto done;
do {
if (features & feat) {
feat = feat << 1;
} while (feat <= SBI_HART_HAS_LAST_FEATURE);
- features_str[offset - 1] = '\0';
-
- return 0;
+done:
+ if (offset)
+ features_str[offset - 1] = '\0';
+ else
+ sbi_strncpy(features_str, "none", nfstr);
}
static void sbi_hart_set_feature(u32 hartid, unsigned long feature)
static void sbi_boot_prints(struct sbi_scratch *scratch, u32 hartid)
{
- int xlen, ret;
- char str[64];
- int max_fstr_len = 128;
- char features[128];
+ int xlen;
+ char str[128];
const struct sbi_platform *plat = sbi_platform_ptr(scratch);
#ifdef OPENSBI_VERSION_GIT
sbi_printf("Error %d getting MISA XLEN\n", xlen);
sbi_hart_hang();
}
- misa_string(xlen, str, sizeof(str));
/* Platform details */
sbi_printf("Platform Name : %s\n", sbi_platform_name(plat));
sbi_printf("Platform HART Count : %u\n",
sbi_platform_hart_count(plat));
-
- sbi_memset(features, 0, max_fstr_len);
- ret = sbi_platform_get_features_str(plat, features, max_fstr_len);
- if (!ret)
- sbi_printf("Platform Features : %s\n", features);
- else
- sbi_printf("Platform Features : %s\n", "none");
+ sbi_platform_get_features_str(plat, str, sizeof(str));
+ sbi_printf("Platform Features : %s\n", str);
/* Boot HART details */
sbi_printf("Boot HART ID : %u\n", hartid);
+ misa_string(xlen, str, sizeof(str));
sbi_printf("Boot HART ISA : %s\n", str);
-
- sbi_memset(features, 0, max_fstr_len);
- ret = sbi_hart_get_features_str(hartid, features, max_fstr_len);
- if (!ret)
- sbi_printf("BOOT HART Features : %s\n", features);
- else
- sbi_printf("BOOT HART Features : %s\n", "none");
+ sbi_hart_get_features_str(hartid, str, sizeof(str));
+ sbi_printf("BOOT HART Features : %s\n", str);
/* Firmware details */
sbi_printf("Firmware Base : 0x%lx\n", scratch->fw_start);
sbi_printf("Firmware Size : %d KB\n",
(u32)(scratch->fw_size / 1024));
+
/* Generic details */
sbi_printf("Runtime SBI Version : %d.%d\n",
sbi_ecall_version_major(), sbi_ecall_version_minor());
return fstr;
}
-/**
- * Get the platform features in string format
- *
- * @param plat pointer to struct sbi_platform
- * @param features_str pointer to a char array where the features string will be
- * updated
- * @param nfstr length of the features_str. The feature string will be truncated
- * if nfstr is not long enough.
- * @return the features value currently set for the given platform
- */
-int sbi_platform_get_features_str(const struct sbi_platform *plat,
- char *features_str, int nfstr)
+void sbi_platform_get_features_str(const struct sbi_platform *plat,
+ char *features_str, int nfstr)
{
unsigned long features, feat = 1UL;
char *temp;
int offset = 0;
if (!plat || !features_str || !nfstr)
- return SBI_EINVAL;
+ return;
+ sbi_memset(features_str, 0, nfstr);
features = sbi_platform_get_features(plat);
+ if (!features)
+ goto done;
do {
if (features & feat) {
feat = feat << 1;
} while (feat <= SBI_PLATFORM_HAS_LAST_FEATURE);
- features_str[offset - 1] = '\0';
-
- return 0;
+done:
+ if (offset)
+ features_str[offset - 1] = '\0';
+ else
+ sbi_strncpy(features_str, "none", nfstr);
}
-/**
- * Get HART index for the given HART
- *
- * @param plat pointer to struct sbi_platform
- * @param hartid HART ID
- *
- * @return 0 <= value < hart_count for valid HART otherwise -1U
- */
-u32 sbi_platform_hart_index(const struct sbi_platform *plat,
- u32 hartid)
+u32 sbi_platform_hart_index(const struct sbi_platform *plat, u32 hartid)
{
u32 i;