| 1964 | } |
| 1965 | |
| 1966 | int |
| 1967 | decode_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 |
nothing calls this directly
no test coverage detected