0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef __LINUX_MBUS_H
0012 #define __LINUX_MBUS_H
0013
0014 #include <linux/errno.h>
0015
0016 struct resource;
0017
0018 struct mbus_dram_target_info
0019 {
0020
0021
0022
0023 u8 mbus_dram_target_id;
0024
0025
0026
0027
0028
0029
0030 int num_cs;
0031 struct mbus_dram_window {
0032 u8 cs_index;
0033 u8 mbus_attr;
0034 u64 base;
0035 u64 size;
0036 } cs[4];
0037 };
0038
0039
0040 #define MVEBU_MBUS_PCI_IO 0x1
0041 #define MVEBU_MBUS_PCI_MEM 0x2
0042 #define MVEBU_MBUS_PCI_WA 0x3
0043
0044
0045
0046
0047
0048 #define MVEBU_MBUS_NO_REMAP (0xffffffff)
0049
0050
0051 #define MVEBU_MBUS_MAX_WINNAME_SZ 32
0052
0053
0054
0055
0056
0057 #ifdef CONFIG_PLAT_ORION
0058 extern const struct mbus_dram_target_info *mv_mbus_dram_info(void);
0059 extern const struct mbus_dram_target_info *mv_mbus_dram_info_nooverlap(void);
0060 int mvebu_mbus_get_io_win_info(phys_addr_t phyaddr, u32 *size, u8 *target,
0061 u8 *attr);
0062 #else
0063 static inline const struct mbus_dram_target_info *mv_mbus_dram_info(void)
0064 {
0065 return NULL;
0066 }
0067 static inline const struct mbus_dram_target_info *mv_mbus_dram_info_nooverlap(void)
0068 {
0069 return NULL;
0070 }
0071 static inline int mvebu_mbus_get_io_win_info(phys_addr_t phyaddr, u32 *size,
0072 u8 *target, u8 *attr)
0073 {
0074
0075
0076
0077
0078
0079
0080
0081 return -EINVAL;
0082 }
0083 #endif
0084
0085 #ifdef CONFIG_MVEBU_MBUS
0086 int mvebu_mbus_save_cpu_target(u32 __iomem *store_addr);
0087 void mvebu_mbus_get_pcie_mem_aperture(struct resource *res);
0088 void mvebu_mbus_get_pcie_io_aperture(struct resource *res);
0089 int mvebu_mbus_get_dram_win_info(phys_addr_t phyaddr, u8 *target, u8 *attr);
0090 int mvebu_mbus_add_window_remap_by_id(unsigned int target,
0091 unsigned int attribute,
0092 phys_addr_t base, size_t size,
0093 phys_addr_t remap);
0094 int mvebu_mbus_add_window_by_id(unsigned int target, unsigned int attribute,
0095 phys_addr_t base, size_t size);
0096 int mvebu_mbus_del_window(phys_addr_t base, size_t size);
0097 int mvebu_mbus_init(const char *soc, phys_addr_t mbus_phys_base,
0098 size_t mbus_size, phys_addr_t sdram_phys_base,
0099 size_t sdram_size);
0100 int mvebu_mbus_dt_init(bool is_coherent);
0101 #else
0102 static inline int mvebu_mbus_get_dram_win_info(phys_addr_t phyaddr, u8 *target,
0103 u8 *attr)
0104 {
0105 return -EINVAL;
0106 }
0107 #endif
0108
0109 #endif