MCPcopy Create free account
hub / github.com/F-Stack/f-stack / decode_win_idma_valid

Function decode_win_idma_valid

freebsd/arm/mv/mv_common.c:1966–2025  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1964}
1965
1966int
1967decode_win_idma_valid(void)
1968{
1969 const struct decode_win *wintab;
1970 int c, i, j, rv;
1971 uint32_t b, e, s;
1972
1973 if (idma_wins_no > MV_WIN_IDMA_MAX) {
1974 printf("IDMA windows: too many entries: %d\n", idma_wins_no);
1975 return (0);
1976 }
1977 for (i = 0, c = 0; i < MV_WIN_DDR_MAX; i++)
1978 if (ddr_is_active(i))
1979 c++;
1980
1981 if (idma_wins_no > (MV_WIN_IDMA_MAX - c)) {
1982 printf("IDMA windows: too many entries: %d, available: %d\n",
1983 idma_wins_no, MV_WIN_IDMA_MAX - c);
1984 return (0);
1985 }
1986
1987 wintab = idma_wins;
1988 rv = 1;
1989 for (i = 0; i < idma_wins_no; i++, wintab++) {
1990 if (wintab->target == 0) {
1991 printf("IDMA window#%d: DDR target window is not "
1992 "supposed to be reprogrammed!\n", i);
1993 rv = 0;
1994 }
1995
1996 if (wintab->remap >= 0 && win_cpu_can_remap(i) != 1) {
1997 printf("IDMA window#%d: not capable of remapping, but "
1998 "val 0x%08x defined\n", i, wintab->remap);
1999 rv = 0;
2000 }
2001
2002 s = wintab->size;
2003 b = wintab->base;
2004 e = b + s - 1;
2005 if (s > (0xFFFFFFFF - b + 1)) {
2006 /* XXX this boundary check should account for 64bit and
2007 * remapping.. */
2008 printf("IDMA window#%d: no space for size 0x%08x at "
2009 "0x%08x\n", i, s, b);
2010 rv = 0;
2011 continue;
2012 }
2013
2014 j = decode_win_overlap(i, idma_wins_no, &idma_wins[0]);
2015 if (j >= 0) {
2016 printf("IDMA window#%d: (0x%08x - 0x%08x) overlaps "
2017 "with #%d (0x%08x - 0x%08x)\n", i, b, e, j,
2018 idma_wins[j].base,
2019 idma_wins[j].base + idma_wins[j].size - 1);
2020 rv = 0;
2021 }
2022 }
2023

Callers

nothing calls this directly

Calls 4

ddr_is_activeFunction · 0.85
win_cpu_can_remapFunction · 0.85
decode_win_overlapFunction · 0.85
printfFunction · 0.50

Tested by

no test coverage detected