| 1886 | } |
| 1887 | |
| 1888 | void |
| 1889 | decode_win_idma_setup(u_long base) |
| 1890 | { |
| 1891 | uint32_t br, sz; |
| 1892 | int i, j; |
| 1893 | |
| 1894 | if (pm_is_disabled(CPU_PM_CTRL_IDMA)) |
| 1895 | return; |
| 1896 | /* |
| 1897 | * Disable and clear all IDMA windows, revoke protection for all channels |
| 1898 | */ |
| 1899 | for (i = 0; i < MV_WIN_IDMA_MAX; i++) { |
| 1900 | idma_bare_write(base, i, 1); |
| 1901 | win_idma_br_write(base, i, 0); |
| 1902 | win_idma_sz_write(base, i, 0); |
| 1903 | if (win_idma_can_remap(i) == 1) |
| 1904 | win_idma_har_write(base, i, 0); |
| 1905 | } |
| 1906 | for (i = 0; i < MV_IDMA_CHAN_MAX; i++) |
| 1907 | win_idma_cap_write(base, i, 0); |
| 1908 | |
| 1909 | /* |
| 1910 | * Set up access to all active DRAM banks |
| 1911 | */ |
| 1912 | for (i = 0; i < MV_WIN_DDR_MAX; i++) |
| 1913 | if (ddr_is_active(i)) { |
| 1914 | br = ddr_base(i) | (ddr_attr(i) << 8) | ddr_target(i); |
| 1915 | sz = ((ddr_size(i) - 1) & 0xffff0000); |
| 1916 | |
| 1917 | /* Place DDR entries in non-remapped windows */ |
| 1918 | for (j = 0; j < MV_WIN_IDMA_MAX; j++) |
| 1919 | if (win_idma_can_remap(j) != 1 && |
| 1920 | idma_bare_read(base, j) == 1) { |
| 1921 | /* Configure window */ |
| 1922 | win_idma_br_write(base, j, br); |
| 1923 | win_idma_sz_write(base, j, sz); |
| 1924 | |
| 1925 | /* Set protection RW on all channels */ |
| 1926 | idma_set_prot(base, j, 0x3); |
| 1927 | |
| 1928 | /* Enable window */ |
| 1929 | idma_bare_write(base, j, 0); |
| 1930 | break; |
| 1931 | } |
| 1932 | } |
| 1933 | |
| 1934 | /* |
| 1935 | * Remaining targets -- from statically defined table |
| 1936 | */ |
| 1937 | for (i = 0; i < idma_wins_no; i++) |
| 1938 | if (idma_wins[i].target > 0) { |
| 1939 | br = (idma_wins[i].base & 0xffff0000) | |
| 1940 | (idma_wins[i].attr << 8) | idma_wins[i].target; |
| 1941 | sz = ((idma_wins[i].size - 1) & 0xffff0000); |
| 1942 | |
| 1943 | /* Set the first free IDMA window */ |
| 1944 | for (j = 0; j < MV_WIN_IDMA_MAX; j++) { |
| 1945 | if (idma_bare_read(base, j) == 0) |
nothing calls this directly
no test coverage detected