blob: 0ed3272342750308c740b1c1049037b875df8709 [file] [log] [blame]
Felix Helddba3fe72021-02-13 01:05:56 +01001/* SPDX-License-Identifier: GPL-2.0-only */
2
3#ifndef AMD_BLOCK_DATA_FABRIC_H
4#define AMD_BLOCK_DATA_FABRIC_H
5
Felix Held789f6f72021-02-13 01:09:28 +01006#include <amdblocks/pci_devs.h>
7#include <device/pci_ops.h>
Fred Reitberger28908412022-11-01 10:49:16 -04008#include <soc/data_fabric.h>
Felix Held789f6f72021-02-13 01:09:28 +01009#include <soc/pci_devs.h>
Felix Helddba3fe72021-02-13 01:05:56 +010010#include <stdint.h>
11
12#define BROADCAST_FABRIC_ID 0xff
13
Felix Held4e4dde42023-02-07 12:13:00 +010014#define DF_MMIO_REG_OFFSET(instance) ((instance) * DF_MMIO_REG_SET_SIZE * sizeof(uint32_t))
15
Felix Held985f3e02021-02-13 20:47:04 +010016/* The number of data fabric MMIO registers is SoC-specific */
Felix Held4e4dde42023-02-07 12:13:00 +010017#define DF_MMIO_BASE(reg) (D18F0_MMIO_BASE0 + DF_MMIO_REG_OFFSET(reg))
18#define DF_MMIO_LIMIT(reg) (D18F0_MMIO_LIMIT0 + DF_MMIO_REG_OFFSET(reg))
19#define DF_MMIO_CONTROL(reg) (D18F0_MMIO_CTRL0 + DF_MMIO_REG_OFFSET(reg))
Felix Held985f3e02021-02-13 20:47:04 +010020
Felix Held407bd582023-04-24 17:58:24 +020021/* Last 12GB of the usable address space are reserved */
22#define DF_RESERVED_TOP_12GB_MMIO_SIZE (12ULL * GiB)
23
Felix Helddba3fe72021-02-13 01:05:56 +010024uint32_t data_fabric_read32(uint8_t function, uint16_t reg, uint8_t instance_id);
Felix Held45df9c12021-02-13 01:08:14 +010025void data_fabric_write32(uint8_t function, uint16_t reg, uint8_t instance_id, uint32_t data);
Felix Helddba3fe72021-02-13 01:05:56 +010026
Felix Held789f6f72021-02-13 01:09:28 +010027static __always_inline
28uint32_t data_fabric_broadcast_read32(uint8_t function, uint16_t reg)
29{
30 /* No bit masking required. Macros will apply mask to values. */
31 return pci_read_config32(_SOC_DEV(DF_DEV, function), reg);
32}
33
34static __always_inline
35void data_fabric_broadcast_write32(uint8_t function, uint16_t reg, uint32_t data)
36{
37 /* No bit masking required. Macros will apply mask to values. */
38 pci_write_config32(_SOC_DEV(DF_DEV, function), reg, data);
39}
40
Felix Held906f9be2021-02-13 20:38:08 +010041void data_fabric_print_mmio_conf(void);
Felix Held602f93e2021-02-13 21:10:08 +010042void data_fabric_disable_mmio_reg(unsigned int reg);
43int data_fabric_find_unused_mmio_reg(void);
Fred Reitberger31e62982022-10-31 14:18:20 -040044void data_fabric_set_mmio_np(void);
Felix Held602f93e2021-02-13 21:10:08 +010045
Felix Held407bd582023-04-24 17:58:24 +020046/* Inform the resource allocator about the usable IO and MMIO regions and PCI bus numbers */
47void amd_pci_domain_read_resources(struct device *domain);
48void amd_pci_domain_scan_bus(struct device *domain);
49
Felix Held7a5dd782023-04-28 22:47:33 +020050void amd_pci_domain_fill_ssdt(const struct device *domain);
51
Felix Helddba3fe72021-02-13 01:05:56 +010052#endif /* AMD_BLOCK_DATA_FABRIC_H */