Files
OpenBMC/meta-luxshare/meta-bhs/recipes-phosphor/console/obmc-console/0001-Support-SOL-non-volatile-bitrate-and-volatile-bitrat.patch
T

140 lines
4.0 KiB
Diff
Raw Normal View History

2026-04-23 17:07:55 +08:00
From ead759007999573bf37d1ea01bf19ae76af79e01 Mon Sep 17 00:00:00 2001
From: roly <Rolyli.Li@luxshare-ict.com>
Date: Wed, 20 Nov 2024 15:16:53 +0800
Subject: [PATCH] Support SOL non-volatile bitrate and volatile bitrate
---
console-dbus.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++----
meson.build | 2 +-
2 files changed, 70 insertions(+), 6 deletions(-)
diff --git a/console-dbus.c b/console-dbus.c
index dd53908..e0c0011 100644
--- a/console-dbus.c
+++ b/console-dbus.c
@@ -19,6 +19,7 @@
#include <err.h>
#include <string.h>
#include <sys/socket.h>
+#include <stdlib.h>
#include "console-server.h"
@@ -53,7 +54,7 @@ static void tty_change_baudrate(struct console *console)
}
}
-static int set_baud_handler(sd_bus *bus, const char *path,
+static int set_non_volatile_baud_handler(sd_bus *bus, const char *path,
const char *interface, const char *property,
sd_bus_message *msg, void *userdata,
sd_bus_error *err __attribute__((unused)))
@@ -61,6 +62,8 @@ static int set_baud_handler(sd_bus *bus, const char *path,
struct console *console = userdata;
uint64_t baudrate;
speed_t speed;
+ char buf[64] = {0};
+ int encodedBitRate = 0;
int r;
if (!console) {
@@ -84,6 +87,63 @@ static int set_baud_handler(sd_bus *bus, const char *path,
sd_bus_emit_properties_changed(bus, path, interface, property, NULL);
+ switch(baudrate)
+ {
+ case 9600:
+ encodedBitRate = 0x06;
+ break;
+ case 19200:
+ encodedBitRate = 0x07;
+ break;
+ case 38400:
+ encodedBitRate = 0x08;
+ break;
+ case 57600:
+ encodedBitRate = 0x09;
+ break;
+ case 115200:
+ encodedBitRate = 0xa;
+ break;
+ default:
+ encodedBitRate = 0xa;
+ break;
+ }
+ snprintf(buf, sizeof(buf), "fw_setenv hostserialcfg %d", encodedBitRate);
+ system(buf);
+ system("/usr/bin/sol-configure.sh setup");
+ return 1;
+}
+
+static int set_volatile_baud_handler(sd_bus *bus, const char *path,
+ const char *interface, const char *property,
+ sd_bus_message *msg, void *userdata,
+ sd_bus_error *err __attribute__((unused)))
+{
+ struct console *console = userdata;
+ uint64_t baudrate;
+ speed_t speed;
+ int r;
+
+ if (!console) {
+ return -ENOENT;
+ }
+
+ r = sd_bus_message_read(msg, "t", &baudrate);
+ if (r < 0 || baudrate > UINT32_MAX) {
+ return -EINVAL;
+ }
+
+ speed = parse_int_to_baud((uint32_t)baudrate);
+ if (!speed) {
+ warnx("Invalid baud rate: '%" PRIu64 "'", baudrate);
+ return -EINVAL;
+ }
+
+ assert(console->tty.type == TTY_DEVICE_UART);
+ console->tty.uart.baud = speed;
+ tty_change_baudrate(console);
+
+ sd_bus_emit_properties_changed(bus, path, interface, property, NULL);
return 1;
}
@@ -142,10 +202,14 @@ static int method_connect(sd_bus_message *msg, void *userdata,
static const sd_bus_vtable console_uart_vtable[] = {
SD_BUS_VTABLE_START(0),
- SD_BUS_WRITABLE_PROPERTY("Baud", "t", get_baud_handler,
- set_baud_handler, 0,
- SD_BUS_VTABLE_UNPRIVILEGED |
- SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
+ SD_BUS_WRITABLE_PROPERTY("NonVbitrate", "t", get_baud_handler,
+ set_non_volatile_baud_handler, 0,
+ SD_BUS_VTABLE_UNPRIVILEGED |
+ SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
+ SD_BUS_WRITABLE_PROPERTY("Vbitrate", "t", get_baud_handler,
+ set_volatile_baud_handler, 0,
+ SD_BUS_VTABLE_UNPRIVILEGED |
+ SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_VTABLE_END,
};
diff --git a/meson.build b/meson.build
index 8a570a1..c4e8cf0 100644
--- a/meson.build
+++ b/meson.build
@@ -10,7 +10,7 @@ project('obmc-console', 'c',
meson_version: '>=0.63.0',
)
-add_project_arguments('-D_GNU_SOURCE', language: 'c')
+add_project_arguments('-D_GNU_SOURCE', '-Wno-unused-result', language: 'c')
systemdsystemunitdir = dependency('systemd').get_variable('systemdsystemunitdir')
install_data('conf/obmc-console@.service.in',
--
2.25.1