| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| #include <console/console.h> |
| #include <device/mmio.h> |
| #include <soc/addressmap.h> |
| #include <soc/lastbus_v1.h> |
| |
| static unsigned long preisys_dump_offset[] = { |
| 0x500, /* PERIBUS_DBG0 */ |
| 0x504, /* PERIBUS_DBG1 */ |
| 0x508, /* PERIBUS_DBG2 */ |
| 0x50C, /* PERIBUS_DBG3 */ |
| 0x510, /* PERIBUS_DBG4 */ |
| 0x514, /* PERIBUS_DBG5 */ |
| 0x518, /* PERIBUS_DBG6 */ |
| 0x51C, /* PERIBUS_DBG7 */ |
| 0x520, /* PERIBUS_DBG8 */ |
| 0x524, /* PERIBUS_DBG9 */ |
| 0x528, /* PERIBUS_DBG10 */ |
| 0x52C, /* PERIBUS_DBG11 */ |
| 0x530, /* PERIBUS_DBG12 */ |
| 0x534, /* PERIBUS_DBG13 */ |
| 0x538, /* PERIBUS_DBG14 */ |
| 0x53C, /* PERIBUS_DBG15 */ |
| 0x580, /* PERIBUS_DBG16 */ |
| 0x584, /* PERIBUS_DBG17 */ |
| }; |
| |
| static void lastbus_setup(void) |
| { |
| /* peri lastbus init */ |
| write32p(PERICFG_BASE + BUS_PERI_R0, PERISYS_TIMEOUT); |
| write32p(PERICFG_BASE + BUS_PERI_R1, PERISYS_ENABLE); |
| |
| /* infra lastbus init */ |
| write32p(INFRACFG_AO_BASE + BUS_INFRA_CTRL, INFRASYS_CONFIG); |
| } |
| |
| static void lastbus_dump(void) |
| { |
| unsigned int i; |
| uintptr_t reg; |
| |
| if (read32p(INFRACFG_AO_BASE + BUS_INFRA_CTRL) & 0x1) { |
| printk(BIOS_DEBUG, "** Dump lastbus infra debug registers start **\n"); |
| for (i = 0; i < INFRA_NUM; i++) { |
| reg = INFRACFG_AO_BASE + BUS_INFRA_SNAPSHOT + 4 * i; |
| printk(BIOS_DEBUG, "%08x\n", read32p(reg)); |
| } |
| } |
| |
| if (read32p(PERICFG_BASE + BUS_PERI_R1) & 0x1) { |
| printk(BIOS_DEBUG, "** Dump lastbus peri debug registers start **\n"); |
| for (i = 0; i < PERI_NUM; i++) { |
| reg = PERICFG_BASE + preisys_dump_offset[i]; |
| printk(BIOS_DEBUG, "%08x\n", read32p(reg)); |
| } |
| } |
| } |
| |
| void lastbus_init(void) |
| { |
| lastbus_dump(); |
| lastbus_setup(); |
| } |