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