1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2ab8f4d40SNobuhiro Iwamatsu /*
3ab8f4d40SNobuhiro Iwamatsu * SH4 PCI Controller (PCIC) for U-Boot.
4ab8f4d40SNobuhiro Iwamatsu * (C) Dustin McIntire (dustin@sensoria.com)
5ab8f4d40SNobuhiro Iwamatsu * (C) 2007,2008 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
6ab8f4d40SNobuhiro Iwamatsu * (C) 2008 Yusuke Goda <goda.yusuke@renesas.com>
7ab8f4d40SNobuhiro Iwamatsu *
88f0fec74SPeter Tyser * u-boot/arch/sh/cpu/sh4/pci-sh4.c
9ab8f4d40SNobuhiro Iwamatsu */
10ab8f4d40SNobuhiro Iwamatsu
11ab8f4d40SNobuhiro Iwamatsu #include <common.h>
12ab8f4d40SNobuhiro Iwamatsu
13ab8f4d40SNobuhiro Iwamatsu #include <asm/processor.h>
14ab8f4d40SNobuhiro Iwamatsu #include <asm/io.h>
15ab8f4d40SNobuhiro Iwamatsu #include <asm/pci.h>
16ab8f4d40SNobuhiro Iwamatsu #include <pci.h>
17ab8f4d40SNobuhiro Iwamatsu
pci_sh4_init(struct pci_controller * hose)18ab8f4d40SNobuhiro Iwamatsu int pci_sh4_init(struct pci_controller *hose)
19ab8f4d40SNobuhiro Iwamatsu {
20ab8f4d40SNobuhiro Iwamatsu hose->first_busno = 0;
21ab8f4d40SNobuhiro Iwamatsu hose->region_count = 0;
22ab8f4d40SNobuhiro Iwamatsu hose->last_busno = 0xff;
23ab8f4d40SNobuhiro Iwamatsu
24ab8f4d40SNobuhiro Iwamatsu /* PCI memory space */
25ab8f4d40SNobuhiro Iwamatsu pci_set_region(hose->regions + 0,
26ab8f4d40SNobuhiro Iwamatsu CONFIG_PCI_MEM_BUS,
27ab8f4d40SNobuhiro Iwamatsu CONFIG_PCI_MEM_PHYS,
28ab8f4d40SNobuhiro Iwamatsu CONFIG_PCI_MEM_SIZE,
29ab8f4d40SNobuhiro Iwamatsu PCI_REGION_MEM);
30ab8f4d40SNobuhiro Iwamatsu hose->region_count++;
31ab8f4d40SNobuhiro Iwamatsu
32ab8f4d40SNobuhiro Iwamatsu /* PCI IO space */
33ab8f4d40SNobuhiro Iwamatsu pci_set_region(hose->regions + 1,
34ab8f4d40SNobuhiro Iwamatsu CONFIG_PCI_IO_BUS,
35ab8f4d40SNobuhiro Iwamatsu CONFIG_PCI_IO_PHYS,
36ab8f4d40SNobuhiro Iwamatsu CONFIG_PCI_IO_SIZE,
37ab8f4d40SNobuhiro Iwamatsu PCI_REGION_IO);
38ab8f4d40SNobuhiro Iwamatsu hose->region_count++;
39ab8f4d40SNobuhiro Iwamatsu
4006e2735eSYoshihiro Shimoda #if defined(CONFIG_PCI_SYS_BUS)
4106e2735eSYoshihiro Shimoda /* PCI System Memory space */
4206e2735eSYoshihiro Shimoda pci_set_region(hose->regions + 2,
4306e2735eSYoshihiro Shimoda CONFIG_PCI_SYS_BUS,
4406e2735eSYoshihiro Shimoda CONFIG_PCI_SYS_PHYS,
4506e2735eSYoshihiro Shimoda CONFIG_PCI_SYS_SIZE,
4606e2735eSYoshihiro Shimoda PCI_REGION_MEM | PCI_REGION_SYS_MEMORY);
4706e2735eSYoshihiro Shimoda hose->region_count++;
4806e2735eSYoshihiro Shimoda #endif
4906e2735eSYoshihiro Shimoda
50ab8f4d40SNobuhiro Iwamatsu udelay(1000);
51ab8f4d40SNobuhiro Iwamatsu
52ab8f4d40SNobuhiro Iwamatsu pci_set_ops(hose,
53ab8f4d40SNobuhiro Iwamatsu pci_hose_read_config_byte_via_dword,
54ab8f4d40SNobuhiro Iwamatsu pci_hose_read_config_word_via_dword,
55ab8f4d40SNobuhiro Iwamatsu pci_sh4_read_config_dword,
56ab8f4d40SNobuhiro Iwamatsu pci_hose_write_config_byte_via_dword,
57ab8f4d40SNobuhiro Iwamatsu pci_hose_write_config_word_via_dword,
58ab8f4d40SNobuhiro Iwamatsu pci_sh4_write_config_dword);
59ab8f4d40SNobuhiro Iwamatsu
60ab8f4d40SNobuhiro Iwamatsu pci_register_hose(hose);
61ab8f4d40SNobuhiro Iwamatsu
62ab8f4d40SNobuhiro Iwamatsu udelay(1000);
63ab8f4d40SNobuhiro Iwamatsu
64ab8f4d40SNobuhiro Iwamatsu #ifdef CONFIG_PCI_SCAN_SHOW
65ab8f4d40SNobuhiro Iwamatsu printf("PCI: Bus Dev VenId DevId Class Int\n");
66ab8f4d40SNobuhiro Iwamatsu #endif
67ab8f4d40SNobuhiro Iwamatsu hose->last_busno = pci_hose_scan(hose);
68ab8f4d40SNobuhiro Iwamatsu return 0;
69ab8f4d40SNobuhiro Iwamatsu }
70d85f46a2SNobuhiro Iwamatsu
pci_skip_dev(struct pci_controller * hose,pci_dev_t dev)71d85f46a2SNobuhiro Iwamatsu int pci_skip_dev(struct pci_controller *hose, pci_dev_t dev)
72d85f46a2SNobuhiro Iwamatsu {
73d85f46a2SNobuhiro Iwamatsu return 0;
74d85f46a2SNobuhiro Iwamatsu }
75d85f46a2SNobuhiro Iwamatsu
76d85f46a2SNobuhiro Iwamatsu #ifdef CONFIG_PCI_SCAN_SHOW
pci_print_dev(struct pci_controller * hose,pci_dev_t dev)77d85f46a2SNobuhiro Iwamatsu int pci_print_dev(struct pci_controller *hose, pci_dev_t dev)
78d85f46a2SNobuhiro Iwamatsu {
79d85f46a2SNobuhiro Iwamatsu return 1;
80d85f46a2SNobuhiro Iwamatsu }
81d85f46a2SNobuhiro Iwamatsu #endif /* CONFIG_PCI_SCAN_SHOW */
82