|
|
@ -1,6 +1,8 @@ |
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* PCIe driver for PLX NAS782X SoCs |
|
|
|
* PCIe driver for PLX NAS782X SoCs |
|
|
|
* |
|
|
|
* |
|
|
|
|
|
|
|
* Author: Ma Haijun <mahaijuns@gmail.com> |
|
|
|
|
|
|
|
* |
|
|
|
* This file is licensed under the terms of the GNU General Public |
|
|
|
* This file is licensed under the terms of the GNU General Public |
|
|
|
* License version 2. This program is licensed "as is" without any |
|
|
|
* License version 2. This program is licensed "as is" without any |
|
|
|
* warranty of any kind, whether express or implied. |
|
|
|
* warranty of any kind, whether express or implied. |
|
|
@ -192,7 +194,7 @@ static int oxnas_pcie_link_up(struct oxnas_pcie *pcie) |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void __init oxnas_pcie_setup_hw(struct oxnas_pcie *pcie) |
|
|
|
static void oxnas_pcie_setup_hw(struct oxnas_pcie *pcie) |
|
|
|
{ |
|
|
|
{ |
|
|
|
/* We won't have any inbound address translation. This allows PCI
|
|
|
|
/* We won't have any inbound address translation. This allows PCI
|
|
|
|
* devices to access anywhere in the AHB address map. Might be regarded |
|
|
|
* devices to access anywhere in the AHB address map. Might be regarded |
|
|
@ -362,7 +364,7 @@ static struct pci_ops oxnas_pcie_ops = { |
|
|
|
.write = oxnas_pcie_wr_conf, |
|
|
|
.write = oxnas_pcie_wr_conf, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
static int __init oxnas_pcie_setup(int nr, struct pci_sys_data *sys) |
|
|
|
static int oxnas_pcie_setup(int nr, struct pci_sys_data *sys) |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct oxnas_pcie *pcie = sys_to_pcie(sys); |
|
|
|
struct oxnas_pcie *pcie = sys_to_pcie(sys); |
|
|
|
|
|
|
|
|
|
|
@ -384,7 +386,7 @@ static int __init oxnas_pcie_setup(int nr, struct pci_sys_data *sys) |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void __init oxnas_pcie_enable(struct device *dev, struct oxnas_pcie *pcie) |
|
|
|
static void oxnas_pcie_enable(struct device *dev, struct oxnas_pcie *pcie) |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct hw_pci hw; |
|
|
|
struct hw_pci hw; |
|
|
|
int i; |
|
|
|
int i; |
|
|
@ -466,7 +468,7 @@ static void oxnas_pcie_shared_deinit(struct platform_device *pdev) |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
static int __init |
|
|
|
static int |
|
|
|
oxnas_pcie_map_registers(struct platform_device *pdev, |
|
|
|
oxnas_pcie_map_registers(struct platform_device *pdev, |
|
|
|
struct device_node *np, |
|
|
|
struct device_node *np, |
|
|
|
struct oxnas_pcie *pcie) |
|
|
|
struct oxnas_pcie *pcie) |
|
|
@ -505,7 +507,7 @@ oxnas_pcie_map_registers(struct platform_device *pdev, |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int __init oxnas_pcie_init_res(struct platform_device *pdev, |
|
|
|
static int oxnas_pcie_init_res(struct platform_device *pdev, |
|
|
|
struct oxnas_pcie *pcie, |
|
|
|
struct oxnas_pcie *pcie, |
|
|
|
struct device_node *np) |
|
|
|
struct device_node *np) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -624,7 +626,7 @@ static void oxnas_pcie_init_hw(struct platform_device *pdev, |
|
|
|
wmb(); |
|
|
|
wmb(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int __init oxnas_pcie_probe(struct platform_device *pdev) |
|
|
|
static int oxnas_pcie_probe(struct platform_device *pdev) |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct oxnas_pcie *pcie; |
|
|
|
struct oxnas_pcie *pcie; |
|
|
|
struct device_node *np = pdev->dev.of_node; |
|
|
|
struct device_node *np = pdev->dev.of_node; |
|
|
@ -693,25 +695,14 @@ static const struct of_device_id oxnas_pcie_of_match_table[] = { |
|
|
|
{ .compatible = "plxtech,nas782x-pcie", }, |
|
|
|
{ .compatible = "plxtech,nas782x-pcie", }, |
|
|
|
{}, |
|
|
|
{}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
MODULE_DEVICE_TABLE(of, oxnas_pcie_of_match_table); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static struct platform_driver oxnas_pcie_driver = { |
|
|
|
static struct platform_driver oxnas_pcie_driver = { |
|
|
|
.driver = { |
|
|
|
.driver = { |
|
|
|
.owner = THIS_MODULE, |
|
|
|
|
|
|
|
.name = "oxnas-pcie", |
|
|
|
.name = "oxnas-pcie", |
|
|
|
.of_match_table = |
|
|
|
.suppress_bind_attrs = true, |
|
|
|
of_match_ptr(oxnas_pcie_of_match_table), |
|
|
|
.of_match_table = oxnas_pcie_of_match_table, |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
.probe = oxnas_pcie_probe, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
static int __init oxnas_pcie_init(void) |
|
|
|
builtin_platform_driver(oxnas_pcie_driver); |
|
|
|
{ |
|
|
|
|
|
|
|
return platform_driver_probe(&oxnas_pcie_driver, |
|
|
|
|
|
|
|
oxnas_pcie_probe); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subsys_initcall(oxnas_pcie_init); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MODULE_AUTHOR("Ma Haijun <mahaijuns@gmail.com>"); |
|
|
|
|
|
|
|
MODULE_DESCRIPTION("NAS782x PCIe driver"); |
|
|
|
|
|
|
|
MODULE_LICENSE("GPLv2"); |
|
|
|
|
|
|
|