| 1752 | } |
| 1753 | |
| 1754 | void |
| 1755 | decode_win_pcie_setup(u_long base) |
| 1756 | { |
| 1757 | uint32_t size = 0, ddrbase = ~0; |
| 1758 | uint32_t cr, br; |
| 1759 | int i, j; |
| 1760 | |
| 1761 | for (i = 0; i < MV_PCIE_BAR_MAX; i++) { |
| 1762 | pcie_bar_br_write(base, i, |
| 1763 | MV_PCIE_BAR_64BIT | MV_PCIE_BAR_PREFETCH_EN); |
| 1764 | if (i < 3) |
| 1765 | pcie_bar_brh_write(base, i, 0); |
| 1766 | if (i > 0) |
| 1767 | pcie_bar_cr_write(base, i, 0); |
| 1768 | } |
| 1769 | |
| 1770 | for (i = 0; i < MV_WIN_PCIE_MAX; i++) { |
| 1771 | win_pcie_cr_write(base, i, 0); |
| 1772 | win_pcie_br_write(base, i, 0); |
| 1773 | win_pcie_remap_write(base, i, 0); |
| 1774 | } |
| 1775 | |
| 1776 | /* On End-Point only set BAR size to 1MB regardless of DDR size */ |
| 1777 | if ((bus_space_read_4(fdtbus_bs_tag, base, MV_PCIE_CONTROL) |
| 1778 | & MV_PCIE_ROOT_CMPLX) == 0) { |
| 1779 | pcie_bar_cr_write(base, 1, 0xf0000 | 1); |
| 1780 | return; |
| 1781 | } |
| 1782 | |
| 1783 | for (i = 0; i < MV_WIN_DDR_MAX; i++) { |
| 1784 | if (ddr_is_active(i)) { |
| 1785 | /* Map DDR to BAR 1 */ |
| 1786 | cr = (ddr_size(i) - 1) & 0xffff0000; |
| 1787 | size += ddr_size(i) & 0xffff0000; |
| 1788 | cr |= (ddr_attr(i) << 8) | (ddr_target(i) << 4) | 1; |
| 1789 | br = ddr_base(i); |
| 1790 | if (br < ddrbase) |
| 1791 | ddrbase = br; |
| 1792 | |
| 1793 | /* Use the first available PCIE window */ |
| 1794 | for (j = 0; j < MV_WIN_PCIE_MAX; j++) { |
| 1795 | if (win_pcie_cr_read(base, j) != 0) |
| 1796 | continue; |
| 1797 | |
| 1798 | win_pcie_br_write(base, j, br); |
| 1799 | win_pcie_cr_write(base, j, cr); |
| 1800 | break; |
| 1801 | } |
| 1802 | } |
| 1803 | } |
| 1804 | |
| 1805 | /* |
| 1806 | * Upper 16 bits in BAR register is interpreted as BAR size |
| 1807 | * (in 64 kB units) plus 64kB, so subtract 0x10000 |
| 1808 | * form value passed to register to get correct value. |
| 1809 | */ |
| 1810 | size -= 0x10000; |
| 1811 | pcie_bar_cr_write(base, 1, size | 1); |
nothing calls this directly
no test coverage detected