Lines Matching refs:mbus
42 * - Provides a debugfs interface in /sys/kernel/debug/mvebu-mbus/ to
53 #include <linux/mbus.h>
190 static bool mvebu_mbus_window_is_remappable(struct mvebu_mbus_state *mbus,
193 return mbus->soc->win_remap_offset(win) != MVEBU_MBUS_NO_REMAP;
200 static void mvebu_mbus_read_window(struct mvebu_mbus_state *mbus,
205 void __iomem *addr = mbus->mbuswins_base +
206 mbus->soc->win_cfg_offset(win);
227 if (mvebu_mbus_window_is_remappable(mbus, win)) {
229 void __iomem *addr_rmp = mbus->mbuswins_base +
230 mbus->soc->win_remap_offset(win);
239 static void mvebu_mbus_disable_window(struct mvebu_mbus_state *mbus,
244 addr = mbus->mbuswins_base + mbus->soc->win_cfg_offset(win);
248 if (mvebu_mbus_window_is_remappable(mbus, win)) {
249 addr = mbus->mbuswins_base + mbus->soc->win_remap_offset(win);
257 static int mvebu_mbus_window_is_free(struct mvebu_mbus_state *mbus,
260 void __iomem *addr = mbus->mbuswins_base +
261 mbus->soc->win_cfg_offset(win);
271 static int mvebu_mbus_window_conflicts(struct mvebu_mbus_state *mbus,
278 for (win = 0; win < mbus->soc->num_wins; win++) {
284 mvebu_mbus_read_window(mbus, win,
304 static int mvebu_mbus_find_window(struct mvebu_mbus_state *mbus,
309 for (win = 0; win < mbus->soc->num_wins; win++) {
314 mvebu_mbus_read_window(mbus, win,
328 static int mvebu_mbus_setup_window(struct mvebu_mbus_state *mbus,
333 void __iomem *addr = mbus->mbuswins_base +
334 mbus->soc->win_cfg_offset(win);
352 if (mbus->hw_io_coherency)
358 if (mvebu_mbus_window_is_remappable(mbus, win)) {
359 void __iomem *addr_rmp = mbus->mbuswins_base +
360 mbus->soc->win_remap_offset(win);
373 static int mvebu_mbus_alloc_window(struct mvebu_mbus_state *mbus,
381 for (win = 0; win < mbus->soc->num_wins; win++) {
382 if (mvebu_mbus_window_is_remappable(mbus, win))
385 if (mvebu_mbus_window_is_free(mbus, win))
386 return mvebu_mbus_setup_window(mbus, win, base,
392 for (win = 0; win < mbus->soc->num_wins; win++) {
395 !mvebu_mbus_window_is_remappable(mbus, win))
398 if (mvebu_mbus_window_is_free(mbus, win))
399 return mvebu_mbus_setup_window(mbus, win, base, size,
411 static int mvebu_sdram_debug_show_orion(struct mvebu_mbus_state *mbus,
417 u32 basereg = readl(mbus->sdramwins_base + DDR_BASE_CS_OFF(i));
418 u32 sizereg = readl(mbus->sdramwins_base + DDR_SIZE_CS_OFF(i));
441 static int mvebu_sdram_debug_show_dove(struct mvebu_mbus_state *mbus,
447 u32 map = readl(mbus->sdramwins_base + DOVE_DDR_BASE_CS_OFF(i));
469 struct mvebu_mbus_state *mbus = &mbus_state;
470 return mbus->soc->show_cpu_target(mbus, seq, v);
487 struct mvebu_mbus_state *mbus = &mbus_state;
490 for (win = 0; win < mbus->soc->num_wins; win++) {
496 mvebu_mbus_read_window(mbus, win,
513 if (mvebu_mbus_window_is_remappable(mbus, win)) {
642 mvebu_mbus_setup_cpu_target_nooverlap(struct mvebu_mbus_state *mbus)
685 if (mbus->hw_io_coherency)
696 mvebu_mbus_default_setup_cpu_target(struct mvebu_mbus_state *mbus)
704 u32 base = readl(mbus->sdramwins_base + DDR_BASE_CS_OFF(i));
705 u32 size = readl(mbus->sdramwins_base + DDR_SIZE_CS_OFF(i));
720 if (mbus->hw_io_coherency)
730 mvebu_mbus_default_save_cpu_target(struct mvebu_mbus_state *mbus,
736 u32 base = readl(mbus->sdramwins_base + DDR_BASE_CS_OFF(i));
737 u32 size = readl(mbus->sdramwins_base + DDR_SIZE_CS_OFF(i));
739 writel(mbus->sdramwins_phys_base + DDR_BASE_CS_OFF(i),
742 writel(mbus->sdramwins_phys_base + DDR_SIZE_CS_OFF(i),
752 mvebu_mbus_dove_setup_cpu_target(struct mvebu_mbus_state *mbus)
760 u32 map = readl(mbus->sdramwins_base + DOVE_DDR_BASE_CS_OFF(i));
782 mvebu_mbus_dove_save_cpu_target(struct mvebu_mbus_state *mbus,
788 u32 map = readl(mbus->sdramwins_base + DOVE_DDR_BASE_CS_OFF(i));
790 writel(mbus->sdramwins_phys_base + DOVE_DDR_BASE_CS_OFF(i),
874 { .compatible = "marvell,armada370-mbus",
876 { .compatible = "marvell,armada375-mbus",
878 { .compatible = "marvell,armada380-mbus",
880 { .compatible = "marvell,armadaxp-mbus",
882 { .compatible = "marvell,kirkwood-mbus",
884 { .compatible = "marvell,dove-mbus",
886 { .compatible = "marvell,orion5x-88f5281-mbus",
888 { .compatible = "marvell,orion5x-88f5182-mbus",
890 { .compatible = "marvell,orion5x-88f5181-mbus",
892 { .compatible = "marvell,orion5x-88f6183-mbus",
894 { .compatible = "marvell,mv78xx0-mbus",
1015 s->debugfs_root = debugfs_create_dir("mvebu-mbus", NULL);
1097 static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus,
1108 mbus->mbuswins_base = ioremap(mbuswins_phys_base, mbuswins_size);
1109 if (!mbus->mbuswins_base)
1112 mbus->sdramwins_base = ioremap(sdramwins_phys_base, sdramwins_size);
1113 if (!mbus->sdramwins_base) {
1118 mbus->sdramwins_phys_base = sdramwins_phys_base;
1121 mbus->mbusbridge_base = ioremap(mbusbridge_phys_base,
1123 if (!mbus->mbusbridge_base) {
1124 iounmap(mbus->sdramwins_base);
1125 iounmap(mbus->mbuswins_base);
1129 mbus->mbusbridge_base = NULL;
1131 for (win = 0; win < mbus->soc->num_wins; win++)
1132 mvebu_mbus_disable_window(mbus, win);
1134 mbus->soc->setup_cpu_target(mbus);
1135 mvebu_mbus_setup_cpu_target_nooverlap(mbus);
1139 mbus->mbuswins_base + UNIT_SYNC_BARRIER_OFF);
1183 static int __init mbus_dt_setup_win(struct mvebu_mbus_state *mbus,
1187 if (!mvebu_mbus_window_conflicts(mbus, base, size, target, attr)) {
1193 if (mvebu_mbus_alloc_window(mbus, base, size, MVEBU_MBUS_NO_REMAP,
1238 static int __init mbus_dt_setup(struct mvebu_mbus_state *mbus,
1269 ret = mbus_dt_setup_win(mbus, base, size, target, attr);
1331 pr_err("could not find an 'mbus-controller' node\n");
1355 pr_warn(FW_WARN "deprecated mbus-mvebu Device Tree, suspend/resume will not work\n");