From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1lN0p6-0005u6-EO for mharc-grub-devel@gnu.org; Thu, 18 Mar 2021 18:08:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lN0p0-0005qj-M9 for grub-devel@gnu.org; Thu, 18 Mar 2021 18:08:50 -0400 Received: from gate.crashing.org ([63.228.1.57]:56741) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lN0ox-0007L3-FH for grub-devel@gnu.org; Thu, 18 Mar 2021 18:08:50 -0400 Received: from u11bb3cc8ece954.lan (localhost.localdomain [127.0.0.1]) by gate.crashing.org (8.14.1/8.14.1) with ESMTP id 12IM7UMt005587; Thu, 18 Mar 2021 17:07:40 -0500 From: Benjamin Herrenschmidt To: grub-devel@gnu.org Cc: Matthias Lange , Benjamin Herrenschmidt Subject: [PATCH 4/5] ns8250: Add configuration parameter when adding ports Date: Fri, 19 Mar 2021 09:07:27 +1100 Message-Id: <20210318220728.495970-5-benh@kernel.crashing.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210318220728.495970-1-benh@kernel.crashing.org> References: <20210318220728.495970-1-benh@kernel.crashing.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: permerror client-ip=63.228.1.57; envelope-from=benh@kernel.crashing.org; helo=gate.crashing.org X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, T_SPF_HELO_PERMERROR=0.01, T_SPF_PERMERROR=0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Mar 2021 22:08:50 -0000 This will allow ports to be added with a pre-set configuration Signed-off-by: Benjamin Herrenschmidt --- grub-core/term/ns8250.c | 25 +++++++++++++++++++------ grub-core/term/serial.c | 2 +- include/grub/serial.h | 4 ++-- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/grub-core/term/ns8250.c b/grub-core/term/ns8250.c index 183e14b3b..d783c2897 100644 --- a/grub-core/term/ns8250.c +++ b/grub-core/term/ns8250.c @@ -298,7 +298,7 @@ grub_ns8250_hw_get_port (const unsigned int unit) } char * -grub_serial_ns8250_add_port (grub_port_t port) +grub_serial_ns8250_add_port (grub_port_t port, struct grub_serial_config *config) { struct grub_serial_port *p; unsigned i; @@ -307,6 +307,9 @@ grub_serial_ns8250_add_port (grub_port_t port) { if (dead_ports & (1 << i)) return NULL; + /* give the opportunity for SPCR to configure a default com port */ + if (config) + grub_serial_port_configure (&com_ports[i], config); return com_names[i]; } @@ -328,22 +331,29 @@ grub_serial_ns8250_add_port (grub_port_t port) return NULL; } p->driver = &grub_ns8250_driver; - grub_serial_config_defaults (p); p->mmio = 0; p->port = port; + if (config) + grub_serial_port_configure (p, config); + else + grub_serial_config_defaults (p); grub_serial_register (p); return p->name; } char * -grub_serial_ns8250_add_mmio(grub_addr_t addr) +grub_serial_ns8250_add_mmio(grub_addr_t addr, struct grub_serial_config *config) { struct grub_serial_port *p; unsigned i; for (i = 0; i < GRUB_SERIAL_PORT_NUM; i++) - if (com_ports[i].mmio && com_ports[i].mmio_base == addr) - return com_names[i]; + if (com_ports[i].mmio && com_ports[i].mmio_base == addr) + { + if (config) + grub_serial_port_configure (&com_ports[i], config); + return com_names[i]; + } p = grub_malloc (sizeof (*p)); if (!p) @@ -355,9 +365,12 @@ grub_serial_ns8250_add_mmio(grub_addr_t addr) return NULL; } p->driver = &grub_ns8250_driver; - grub_serial_config_defaults (p); p->mmio = 1; p->mmio_base = addr; + if (config) + grub_serial_port_configure (p, config); + else + grub_serial_config_defaults (p); grub_serial_register (p); return p->name; diff --git a/grub-core/term/serial.c b/grub-core/term/serial.c index 7d4dbb2de..313341f53 100644 --- a/grub-core/term/serial.c +++ b/grub-core/term/serial.c @@ -156,7 +156,7 @@ grub_serial_find (const char *name) && grub_isxdigit (name [sizeof ("port") - 1])) { name = grub_serial_ns8250_add_port (grub_strtoul (&name[sizeof ("port") - 1], - 0, 16)); + 0, 16), NULL); if (!name) return NULL; diff --git a/include/grub/serial.h b/include/grub/serial.h index a5756cd25..5677dae33 100644 --- a/include/grub/serial.h +++ b/include/grub/serial.h @@ -184,8 +184,8 @@ grub_serial_config_defaults (struct grub_serial_port *port) #if defined(__mips__) || defined (__i386__) || defined (__x86_64__) void grub_ns8250_init (void); -char *grub_serial_ns8250_add_port (grub_port_t port); -char *grub_serial_ns8250_add_mmio(grub_addr_t addr); +char *grub_serial_ns8250_add_port (grub_port_t port, struct grub_serial_config *config); +char *grub_serial_ns8250_add_mmio(grub_addr_t addr, struct grub_serial_config *config); #endif #ifdef GRUB_MACHINE_IEEE1275 void grub_ofserial_init (void); -- 2.25.1