summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/intel/apollolake/uart.c10
-rw-r--r--src/soc/intel/cannonlake/uart.c8
-rw-r--r--src/soc/intel/common/block/include/intelblocks/uart.h6
-rw-r--r--src/soc/intel/common/block/uart/uart.c29
-rw-r--r--src/soc/intel/icelake/uart.c8
-rw-r--r--src/soc/intel/skylake/uart.c8
6 files changed, 38 insertions, 31 deletions
diff --git a/src/soc/intel/apollolake/uart.c b/src/soc/intel/apollolake/uart.c
index 27be4e65f9..f8c4aafec2 100644
--- a/src/soc/intel/apollolake/uart.c
+++ b/src/soc/intel/apollolake/uart.c
@@ -74,7 +74,7 @@ const struct uart_gpio_pad_config uart_gpio_pads[] = {
const int uart_max_index = ARRAY_SIZE(uart_gpio_pads);
-struct device *soc_uart_console_to_device(int uart_console)
+DEVTREE_CONST struct device *soc_uart_console_to_device(int uart_console)
{
/*
* if index is valid, this function will return corresponding structure
@@ -82,13 +82,13 @@ struct device *soc_uart_console_to_device(int uart_console)
*/
switch (uart_console) {
case 0:
- return (struct device *)PCH_DEV_UART0;
+ return pcidev_path_on_root(PCH_DEVFN_UART0);
case 1:
- return (struct device *)PCH_DEV_UART1;
+ return pcidev_path_on_root(PCH_DEVFN_UART1);
case 2:
- return (struct device *)PCH_DEV_UART2;
+ return pcidev_path_on_root(PCH_DEVFN_UART2);
case 3:
- return (struct device *)PCH_DEV_UART3;
+ return pcidev_path_on_root(PCH_DEVFN_UART3);
default:
printk(BIOS_ERR, "Invalid UART console index\n");
return NULL;
diff --git a/src/soc/intel/cannonlake/uart.c b/src/soc/intel/cannonlake/uart.c
index 7174a9a58f..ae19acc264 100644
--- a/src/soc/intel/cannonlake/uart.c
+++ b/src/soc/intel/cannonlake/uart.c
@@ -50,7 +50,7 @@ const struct uart_gpio_pad_config uart_gpio_pads[] = {
const int uart_max_index = ARRAY_SIZE(uart_gpio_pads);
-struct device *soc_uart_console_to_device(int uart_console)
+DEVTREE_CONST struct device *soc_uart_console_to_device(int uart_console)
{
/*
* if index is valid, this function will return corresponding structure
@@ -58,11 +58,11 @@ struct device *soc_uart_console_to_device(int uart_console)
*/
switch (uart_console) {
case 0:
- return (struct device *)PCH_DEV_UART0;
+ return pcidev_path_on_root(PCH_DEVFN_UART0);
case 1:
- return (struct device *)PCH_DEV_UART1;
+ return pcidev_path_on_root(PCH_DEVFN_UART1);
case 2:
- return (struct device *)PCH_DEV_UART2;
+ return pcidev_path_on_root(PCH_DEVFN_UART2);
default:
printk(BIOS_ERR, "Invalid UART console index\n");
return NULL;
diff --git a/src/soc/intel/common/block/include/intelblocks/uart.h b/src/soc/intel/common/block/include/intelblocks/uart.h
index 55f259db7c..1b62421d2b 100644
--- a/src/soc/intel/common/block/include/intelblocks/uart.h
+++ b/src/soc/intel/common/block/include/intelblocks/uart.h
@@ -40,7 +40,7 @@ struct uart_gpio_pad_config {
* Common routine to initialize UART controller PCI config space, take it out of
* reset and configure M/N dividers.
*/
-void uart_common_init(struct device *dev, uintptr_t baseaddr);
+void uart_common_init(const struct device *dev, uintptr_t baseaddr);
/*
* Check if UART debug controller is initialized
@@ -72,7 +72,7 @@ void uart_bootblock_init(void);
* Pointer to device structure = If device has a UART debug controller.
* NULL = otherwise
*/
-struct device *uart_get_device(void);
+const struct device *uart_get_device(void);
/**************************** SoC callbacks ***********************************/
@@ -89,6 +89,6 @@ struct device *uart_get_device(void);
* Pointer to device structure = If device has a UART debug controller.
* NULL = otherwise
*/
-struct device *soc_uart_console_to_device(int uart_console);
+DEVTREE_CONST struct device *soc_uart_console_to_device(int uart_console);
#endif /* SOC_INTEL_COMMON_BLOCK_UART_H */
diff --git a/src/soc/intel/common/block/uart/uart.c b/src/soc/intel/common/block/uart/uart.c
index 9d820ffd7e..f556aed3d6 100644
--- a/src/soc/intel/common/block/uart/uart.c
+++ b/src/soc/intel/common/block/uart/uart.c
@@ -65,15 +65,13 @@ static int uart_get_valid_index(void)
return UART_CONSOLE_INVALID_INDEX;
}
-void uart_common_init(struct device *device, uintptr_t baseaddr)
+void uart_common_init(const struct device *device, uintptr_t baseaddr)
{
#if defined(__SIMPLE_DEVICE__)
- pci_devfn_t dev = (pci_devfn_t)(uintptr_t)device;
+ pci_devfn_t dev = PCI_BDF(device);
#else
- struct device *dev = device;
+ const struct device *dev = device;
#endif
- if (!dev)
- return;
/* Set UART base address */
pci_write_config32(dev, PCI_BASE_ADDRESS_0, baseaddr);
@@ -84,7 +82,7 @@ void uart_common_init(struct device *device, uintptr_t baseaddr)
uart_lpss_init(baseaddr);
}
-struct device *uart_get_device(void)
+const struct device *uart_get_device(void)
{
/*
* This function will get called even if INTEL_LPSS_UART_FOR_CONSOLE
@@ -105,14 +103,16 @@ struct device *uart_get_device(void)
bool uart_is_controller_initialized(void)
{
uintptr_t base;
+ const struct device *dev_uart = uart_get_device();
+
+ if (!dev_uart)
+ return false;
#if defined(__SIMPLE_DEVICE__)
- pci_devfn_t dev = (pci_devfn_t)(uintptr_t)uart_get_device();
+ pci_devfn_t dev = PCI_BDF(dev_uart);
#else
- struct device *dev = uart_get_device();
+ const struct device *dev = dev_uart;
#endif
- if (!dev)
- return false;
base = pci_read_config32(dev, PCI_BASE_ADDRESS_0) & ~0xFFF;
if (!base)
@@ -136,8 +136,15 @@ static void uart_configure_gpio_pads(void)
void uart_bootblock_init(void)
{
+ const struct device *dev_uart;
+
+ dev_uart = uart_get_device();
+
+ if (!dev_uart)
+ return;
+
/* Program UART BAR0, command, reset and clock register */
- uart_common_init(uart_get_device(), CONFIG_CONSOLE_UART_BASE_ADDRESS);
+ uart_common_init(dev_uart, CONFIG_CONSOLE_UART_BASE_ADDRESS);
/* Configure the 2 pads per UART. */
uart_configure_gpio_pads();
diff --git a/src/soc/intel/icelake/uart.c b/src/soc/intel/icelake/uart.c
index 7174a9a58f..ae19acc264 100644
--- a/src/soc/intel/icelake/uart.c
+++ b/src/soc/intel/icelake/uart.c
@@ -50,7 +50,7 @@ const struct uart_gpio_pad_config uart_gpio_pads[] = {
const int uart_max_index = ARRAY_SIZE(uart_gpio_pads);
-struct device *soc_uart_console_to_device(int uart_console)
+DEVTREE_CONST struct device *soc_uart_console_to_device(int uart_console)
{
/*
* if index is valid, this function will return corresponding structure
@@ -58,11 +58,11 @@ struct device *soc_uart_console_to_device(int uart_console)
*/
switch (uart_console) {
case 0:
- return (struct device *)PCH_DEV_UART0;
+ return pcidev_path_on_root(PCH_DEVFN_UART0);
case 1:
- return (struct device *)PCH_DEV_UART1;
+ return pcidev_path_on_root(PCH_DEVFN_UART1);
case 2:
- return (struct device *)PCH_DEV_UART2;
+ return pcidev_path_on_root(PCH_DEVFN_UART2);
default:
printk(BIOS_ERR, "Invalid UART console index\n");
return NULL;
diff --git a/src/soc/intel/skylake/uart.c b/src/soc/intel/skylake/uart.c
index 8b7c99eae5..18fcf1b194 100644
--- a/src/soc/intel/skylake/uart.c
+++ b/src/soc/intel/skylake/uart.c
@@ -51,7 +51,7 @@ const struct uart_gpio_pad_config uart_gpio_pads[] = {
const int uart_max_index = ARRAY_SIZE(uart_gpio_pads);
-struct device *soc_uart_console_to_device(int uart_console)
+DEVTREE_CONST struct device *soc_uart_console_to_device(int uart_console)
{
/*
* if index is valid, this function will return corresponding structure
@@ -59,11 +59,11 @@ struct device *soc_uart_console_to_device(int uart_console)
*/
switch (uart_console) {
case 0:
- return (struct device *)PCH_DEV_UART0;
+ return pcidev_path_on_root(PCH_DEVFN_UART0);
case 1:
- return (struct device *)PCH_DEV_UART1;
+ return pcidev_path_on_root(PCH_DEVFN_UART1);
case 2:
- return (struct device *)PCH_DEV_UART2;
+ return pcidev_path_on_root(PCH_DEVFN_UART2);
default:
printk(BIOS_ERR, "Invalid UART console index\n");
return NULL;