soc/cavium: dynamic UART initialization for cavium cn8100
Now only those UARTs that are enabled in devicetree.cb are initialized. Tested on Opencellular Elgon. Change-Id: I145c224148f0cc078bb1c76f588f603e73121a62 Signed-off-by: Jens Drenhaus <jens.drenhaus@9elements.com> Reviewed-on: https://review.coreboot.org/28975 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
parent
6ae7a2a101
commit
fe66a0760c
|
@ -83,12 +83,6 @@ static void mainboard_init(struct device *dev)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
/* Init UARTs */
|
|
||||||
for (i = 0; i < 4; i++) {
|
|
||||||
if (!uart_is_enabled(i))
|
|
||||||
uart_setup(i, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Init timer */
|
/* Init timer */
|
||||||
soc_timer_init();
|
soc_timer_init();
|
||||||
|
|
||||||
|
|
|
@ -101,12 +101,6 @@ static void mainboard_init(struct device *dev)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
/* Init UARTs */
|
|
||||||
for (i = 0; i < 4; i++) {
|
|
||||||
if (!uart_is_enabled(i))
|
|
||||||
uart_setup(i, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Init timer */
|
/* Init timer */
|
||||||
soc_timer_init();
|
soc_timer_init();
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <soc/clock.h>
|
#include <soc/clock.h>
|
||||||
#include <soc/sdram.h>
|
#include <soc/sdram.h>
|
||||||
#include <soc/timer.h>
|
#include <soc/timer.h>
|
||||||
|
#include <soc/uart.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -207,6 +208,21 @@ static int dt_platform_fixup(struct device_tree_fixup *fixup,
|
||||||
printk(BIOS_ERR, "%s: Node not found. OS might miss-behave !\n",
|
printk(BIOS_ERR, "%s: Node not found. OS might miss-behave !\n",
|
||||||
__func__);
|
__func__);
|
||||||
|
|
||||||
|
/* Remove unused UART entries */
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
char path[32];
|
||||||
|
const uint64_t addr = UAAx_PF_BAR0(i);
|
||||||
|
/* Remove the node */
|
||||||
|
snprintf(path, sizeof(path), "soc@0/serial@%llx", addr);
|
||||||
|
dt_node = dt_find_node_by_path(tree->root, path, NULL, NULL, 0);
|
||||||
|
if (!dt_node || uart_is_enabled(i)) {
|
||||||
|
printk(BIOS_INFO, "%s: ignoring %s\n", __func__, path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
printk(BIOS_INFO, "%s: Removing node %s\n", __func__, path);
|
||||||
|
list_remove(&dt_node->list_node);
|
||||||
|
}
|
||||||
|
|
||||||
/* Remove unused PEM entries */
|
/* Remove unused PEM entries */
|
||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
char path[32];
|
char path[32];
|
||||||
|
@ -374,6 +390,18 @@ static void soc_init(struct device *dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Init UARTs */
|
||||||
|
size_t i;
|
||||||
|
struct device *uart_dev;
|
||||||
|
for (i = 0; i <= 3; i++) {
|
||||||
|
uart_dev = dev_find_slot(1, PCI_DEVFN(8, i));
|
||||||
|
/* using device enable state from devicetree.cb */
|
||||||
|
if (uart_dev && uart_dev->enabled) {
|
||||||
|
if (!uart_is_enabled(i))
|
||||||
|
uart_setup(i, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE))
|
if (IS_ENABLED(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE))
|
||||||
soc_init_atf();
|
soc_init_atf();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue