コード例 #1
0
ファイル: bamboo.c プロジェクト: ska-sa/borph_linux_devel
static void __init
bamboo_setup_pci(void)
{
	void *pci_reg_base;
	unsigned long memory_size;
	memory_size = ppc_md.find_end_of_memory();

	pci_reg_base = ioremap64(BAMBOO_PCIL0_BASE, BAMBOO_PCIL0_SIZE);

	/* Enable PCI I/O, Mem, and Busmaster cycles */
	PCI_WRITEW(PCI_READW(PCI_COMMAND) |
		   PCI_COMMAND_MEMORY |
		   PCI_COMMAND_MASTER, PCI_COMMAND);

	/* Disable region first */
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM0MA);

	/* PLB starting addr: 0x00000000A0000000 */
	PCI_WRITEL(BAMBOO_PCI_PHY_MEM_BASE, BAMBOO_PCIL0_PMM0LA);

	/* PCI start addr, 0xA0000000 (PCI Address) */
	PCI_WRITEL(BAMBOO_PCI_MEM_BASE, BAMBOO_PCIL0_PMM0PCILA);
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM0PCIHA);

	/* Enable no pre-fetch, enable region */
	PCI_WRITEL(((0xffffffff -
		     (BAMBOO_PCI_UPPER_MEM - BAMBOO_PCI_MEM_BASE)) | 0x01),
		      BAMBOO_PCIL0_PMM0MA);

	/* Disable region one */
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM1MA);
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM1LA);
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM1PCILA);
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM1PCIHA);
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM1MA);

	/* Disable region two */
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM2MA);
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM2LA);
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM2PCILA);
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM2PCIHA);
	PCI_WRITEL(0, BAMBOO_PCIL0_PMM2MA);

	/* Now configure the PCI->PLB windows, we only use PTM1
	 *
	 * For Inbound flow, set the window size to all available memory
	 * This is required because if size is smaller,
	 * then Eth/PCI DD would fail as PCI card not able to access
	 * the memory allocated by DD.
	 */

	PCI_WRITEL(0, BAMBOO_PCIL0_PTM1MS);	/* disabled region 1 */
	PCI_WRITEL(0, BAMBOO_PCIL0_PTM1LA);	/* begin of address map */

	memory_size = 1 << fls(memory_size - 1);

	/* Size low + Enabled */
	PCI_WRITEL((0xffffffff - (memory_size - 1)) | 0x1, BAMBOO_PCIL0_PTM1MS);

	eieio();
	iounmap(pci_reg_base);
}
コード例 #2
0
ファイル: sequoia.c プロジェクト: prime5711/blackbox
static void __init sequoia_setup_pci(void)
{
	void *pci_reg_base;
	void *pci_cfg_base;
	unsigned long memory_size;

	memory_size = ppc_md.find_end_of_memory();

	pci_reg_base = ioremap64(SEQUOIA_PCIL0_BASE, SEQUOIA_PCIL0_SIZE);
	pci_cfg_base = ioremap64(SEQUOIA_PCI_CFGREGS_BASE, 64);

	PCI_CFG_OUT(SEQUOIA_PCI_CFGA_OFFSET,
		    0x80000000 | (PCI_COMMAND & 0xfc));
	PCI_CFG_OUT(SEQUOIA_PCI_CFGD_OFFSET,
		    ( PCI_CFG_IN(SEQUOIA_PCI_CFGD_OFFSET) |
		    PCI_COMMAND_MEMORY |
		    PCI_COMMAND_MASTER));

	/* Disable region first */
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM0MA);

	/* PLB starting addr: 0x0000000180000000 */
	PCI_WRITEL(SEQUOIA_PCI_PHY_MEM_BASE, SEQUOIA_PCIL0_PMM0LA);

	/* PCI start addr, 0x80000000 (PCI Address) */
	PCI_WRITEL(SEQUOIA_PCI_MEM_BASE, SEQUOIA_PCIL0_PMM0PCILA);
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM0PCIHA);

	/* Enable no pre-fetch, enable region */
	PCI_WRITEL(((0xffffffff -
		     (SEQUOIA_PCI_UPPER_MEM - SEQUOIA_PCI_MEM_BASE)) | 0x01),
		      SEQUOIA_PCIL0_PMM0MA);

	/* Disable region one */
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM1MA);
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM1LA);
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM1PCILA);
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM1PCIHA);
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM1MA);

	/* Disable region two */
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM2MA);
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM2LA);
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM2PCILA);
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM2PCIHA);
	PCI_WRITEL(0, SEQUOIA_PCIL0_PMM2MA);

	/* Now configure the PCI->PLB windows, we only use PTM1
	 *
	 * For Inbound flow, set the window size to all available memory
	 * This is required because if size is smaller,
	 * then Eth/PCI DD would fail as PCI card not able to access
	 * the memory allocated by DD.
	 */

	PCI_WRITEL(0, SEQUOIA_PCIL0_PTM1MS);	/* disabled region 1 */
	PCI_WRITEL(0, SEQUOIA_PCIL0_PTM1LA);	/* begin of address map */

	memory_size = 1 << fls(memory_size - 1);

	/* Size low + Enabled */
	PCI_WRITEL((0xffffffff - (memory_size - 1)) | 0x1, SEQUOIA_PCIL0_PTM1MS);

	eieio();
	iounmap(pci_reg_base);
}