1 /* SPDX-License-Identifier: GPL-2.0-or-later */
4 * The sole purpose of this driver is to avoid BAR to be changed during
5 * resource allocation. Since configuration space is just 32 bytes it
6 * shouldn't cause any fragmentation.
9 #include <console/uart.h>
10 #include <device/device.h>
11 #include <device/pci.h>
12 #include <device/pci_ops.h>
13 #include <device/pci_ids.h>
14 #include <soc/pci_devs.h>
15 #include <console/console.h>
19 static void dnv_ns_uart_read_resources(struct device
*dev
)
21 /* read resources to be visible in the log*/
22 pci_dev_read_resources(dev
);
23 if (!CONFIG(LEGACY_UART_MODE
))
25 struct resource
*res
= probe_resource(dev
, PCI_BASE_ADDRESS_0
);
29 res
->flags
= IORESOURCE_IO
| IORESOURCE_ASSIGNED
| IORESOURCE_FIXED
;
30 /* Do not configure membar */
31 res
= probe_resource(dev
, PCI_BASE_ADDRESS_1
);
34 compact_resources(dev
);
37 static struct device_operations uart_ops
= {
38 .read_resources
= dnv_ns_uart_read_resources
,
39 .set_resources
= pci_dev_set_resources
,
40 .enable_resources
= pci_dev_enable_resources
,
44 static const struct pci_driver uart_driver __pci_driver
= {
46 .vendor
= PCI_VID_INTEL
,
47 .device
= PCI_DID_INTEL_DNV_HSUART
50 static void hide_hsuarts(void)
53 printk(BIOS_DEBUG
, "HIDING HSUARTs.\n");
54 /* There is a hardware requirement to hide functions starting from the
56 for (i
= DENVERTON_UARTS_TO_INI
- 1; i
>= 0; i
--) {
57 struct device
*uart_dev
;
58 uart_dev
= pcidev_on_root(HSUART_DEV
, i
);
61 pci_or_config32(uart_dev
, PCI_FUNC_RDCFG_HIDE
, 1);
65 /* Hide HSUART PCI device very last when FSP no longer needs it */
66 void platform_fsp_notify_status(enum fsp_notify_phase phase
)
68 if (phase
!= END_OF_FIRMWARE
)
70 if (CONFIG(LEGACY_UART_MODE
))