Commit 6887f8e0 authored by Roger Quadros's avatar Roger Quadros Committed by Tom Rini
Browse files

arm: mach-k3: am6_init: Prioritize MSMC traffic over DDR in NAVSS Northbridge



NB0 is bridge to SRAM and NB1 is bridge to DDR.

To ensure that SRAM transfers are not stalled due to delays during DDR
refreshes, SRAM traffic should be higher priority (threadmap=2) than
DDR traffic (threadmap=0).

This fixup is critical to provide deterministic access latency to
MSMC from ICSSG, it applies to all AM65 silicon revisions and is due
to incorrect reset values (has no erratum id) and statically setting
things up should be done independent of usecases and board.

This specific style of Northbridge configuration is specific only to
AM65x devices, follow-on K3 devices have different data prioritization
schemes (ASEL and the like) and hence the fixup applies purely to
AM65x.

Without this fix, ICSSG TX lock-ups due to delays in MSMC transfers in
case of SR1 devices, on SR2 devices, lockups were not observed so far
but high retry rates of ICSSG Ethernet (icssg-eth) and, thus, lower
throughput.
Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
Acked-by: default avatarAndrew F. Davis <afd@ti.com>
Acked-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
Acked-by: default avatarBenoit Parrot <bparrot@ti.com>
[Jan: rebased, dropped used define, extended commit log]
Signed-off-by: Jan Kiszka's avatarJan Kiszka <jan.kiszka@siemens.com>
[Nishanth: Provide relevant context in the commit message]
Signed-off-by: Nishanth Menon<nm@ti.com>
parent cfd50dfb
......@@ -151,6 +151,19 @@ int fdtdec_board_setup(const void *fdt_blob)
return fixup_usb_boot();
}
#endif
static void setup_am654_navss_northbridge(void)
{
/*
* NB0 is bridge to SRAM and NB1 is bridge to DDR.
* To ensure that SRAM transfers are not stalled due to
* delays during DDR refreshes, SRAM traffic should be higher
* priority (threadmap=2) than DDR traffic (threadmap=0).
*/
writel(0x2, NAVSS0_NBSS_NB0_CFG_BASE + NAVSS_NBSS_THREADMAP);
writel(0x0, NAVSS0_NBSS_NB1_CFG_BASE + NAVSS_NBSS_THREADMAP);
}
void board_init_f(ulong dummy)
{
#if defined(CONFIG_K3_LOAD_SYSFW) || defined(CONFIG_K3_AM654_DDRSS)
......@@ -168,6 +181,8 @@ void board_init_f(ulong dummy)
/* Make all control module registers accessible */
ctrl_mmr_unlock();
setup_am654_navss_northbridge();
#ifdef CONFIG_CPU_V7R
disable_linefill_optimization();
setup_k3_mpu_regions();
......
......@@ -52,4 +52,10 @@
/* MCU SCRATCHPAD usage */
#define TI_SRAM_SCRATCH_BOARD_EEPROM_START CONFIG_SYS_K3_MCU_SCRATCHPAD_BASE
/* NAVSS Northbridge config */
#define NAVSS0_NBSS_NB0_CFG_BASE 0x03802000
#define NAVSS0_NBSS_NB1_CFG_BASE 0x03803000
#define NAVSS_NBSS_THREADMAP 0x10
#endif /* __ASM_ARCH_AM6_HARDWARE_H */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment