mbus.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * Marvell MBUS common definitions.
  3. *
  4. * Copyright (C) 2008 Marvell Semiconductor
  5. *
  6. * This file is licensed under the terms of the GNU General Public
  7. * License version 2. This program is licensed "as is" without any
  8. * warranty of any kind, whether express or implied.
  9. */
  10. #ifndef __LINUX_MBUS_H
  11. #define __LINUX_MBUS_H
  12. struct resource;
  13. struct mbus_dram_target_info {
  14. /*
  15. * The 4-bit MBUS target ID of the DRAM controller.
  16. */
  17. u8 mbus_dram_target_id;
  18. /*
  19. * The base address, size, and MBUS attribute ID for each
  20. * of the possible DRAM chip selects. Peripherals are
  21. * required to support at least 4 decode windows.
  22. */
  23. int num_cs;
  24. struct mbus_dram_window {
  25. u8 cs_index;
  26. u8 mbus_attr;
  27. u32 base;
  28. u32 size;
  29. } cs[4];
  30. };
  31. struct mvebu_mbus_state {
  32. void __iomem *mbuswins_base;
  33. void __iomem *sdramwins_base;
  34. struct dentry *debugfs_root;
  35. struct dentry *debugfs_sdram;
  36. struct dentry *debugfs_devs;
  37. const struct mvebu_mbus_soc_data *soc;
  38. int hw_io_coherency;
  39. };
  40. /* Flags for PCI/PCIe address decoding regions */
  41. #define MVEBU_MBUS_PCI_IO 0x1
  42. #define MVEBU_MBUS_PCI_MEM 0x2
  43. #define MVEBU_MBUS_PCI_WA 0x3
  44. /*
  45. * Magic value that explicits that we don't need a remapping-capable
  46. * address decoding window.
  47. */
  48. #define MVEBU_MBUS_NO_REMAP (0xffffffff)
  49. /* Maximum size of a mbus window name */
  50. #define MVEBU_MBUS_MAX_WINNAME_SZ 32
  51. const struct mbus_dram_target_info *mvebu_mbus_dram_info(void);
  52. void mvebu_mbus_get_pcie_mem_aperture(struct resource *res);
  53. void mvebu_mbus_get_pcie_io_aperture(struct resource *res);
  54. int mvebu_mbus_add_window_remap_by_id(unsigned int target,
  55. unsigned int attribute,
  56. phys_addr_t base, size_t size,
  57. phys_addr_t remap);
  58. int mvebu_mbus_add_window_by_id(unsigned int target, unsigned int attribute,
  59. phys_addr_t base, size_t size);
  60. int mvebu_mbus_del_window(phys_addr_t base, size_t size);
  61. int mbus_dt_setup_win(struct mvebu_mbus_state *mbus,
  62. u32 base, u32 size, u8 target, u8 attr);
  63. #endif /* __LINUX_MBUS_H */