| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- From 7c1c679bdd0b6b727248edbee77836024c935f91 Mon Sep 17 00:00:00 2001
- From: Minda Chen <[email protected]>
- Date: Mon, 8 Jan 2024 19:05:55 +0800
- Subject: [PATCH 018/116] PCI: microchip: Rename two PCIe data structures
- Add PLDA PCIe related data structures by rename data structure name from
- mc_* to plda_*.
- axi_base_addr is stayed in struct mc_pcie for it's microchip its own data.
- The event interrupt codes is still using struct mc_pcie because the event
- interrupt codes can not be re-used.
- Signed-off-by: Minda Chen <[email protected]>
- Reviewed-by: Conor Dooley <[email protected]>
- ---
- .../pci/controller/plda/pcie-microchip-host.c | 96 ++++++++++---------
- 1 file changed, 53 insertions(+), 43 deletions(-)
- --- a/drivers/pci/controller/plda/pcie-microchip-host.c
- +++ b/drivers/pci/controller/plda/pcie-microchip-host.c
- @@ -22,7 +22,7 @@
- #include "pcie-plda.h"
-
- /* Number of MSI IRQs */
- -#define MC_MAX_NUM_MSI_IRQS 32
- +#define PLDA_MAX_NUM_MSI_IRQS 32
-
- /* PCIe Bridge Phy and Controller Phy offsets */
- #define MC_PCIE1_BRIDGE_ADDR 0x00008000u
- @@ -179,25 +179,29 @@ struct event_map {
- u32 event_bit;
- };
-
- -struct mc_msi {
- +struct plda_msi {
- struct mutex lock; /* Protect used bitmap */
- struct irq_domain *msi_domain;
- struct irq_domain *dev_domain;
- u32 num_vectors;
- u64 vector_phy;
- - DECLARE_BITMAP(used, MC_MAX_NUM_MSI_IRQS);
- + DECLARE_BITMAP(used, PLDA_MAX_NUM_MSI_IRQS);
- };
-
- -struct mc_pcie {
- - void __iomem *axi_base_addr;
- +struct plda_pcie_rp {
- struct device *dev;
- struct irq_domain *intx_domain;
- struct irq_domain *event_domain;
- raw_spinlock_t lock;
- - struct mc_msi msi;
- + struct plda_msi msi;
- void __iomem *bridge_addr;
- };
-
- +struct mc_pcie {
- + struct plda_pcie_rp plda;
- + void __iomem *axi_base_addr;
- +};
- +
- struct cause {
- const char *sym;
- const char *str;
- @@ -313,7 +317,7 @@ static struct mc_pcie *port;
-
- static void mc_pcie_enable_msi(struct mc_pcie *port, void __iomem *ecam)
- {
- - struct mc_msi *msi = &port->msi;
- + struct plda_msi *msi = &port->plda.msi;
- u16 reg;
- u8 queue_size;
-
- @@ -336,10 +340,10 @@ static void mc_pcie_enable_msi(struct mc
-
- static void mc_handle_msi(struct irq_desc *desc)
- {
- - struct mc_pcie *port = irq_desc_get_handler_data(desc);
- + struct plda_pcie_rp *port = irq_desc_get_handler_data(desc);
- struct irq_chip *chip = irq_desc_get_chip(desc);
- struct device *dev = port->dev;
- - struct mc_msi *msi = &port->msi;
- + struct plda_msi *msi = &port->msi;
- void __iomem *bridge_base_addr = port->bridge_addr;
- unsigned long status;
- u32 bit;
- @@ -364,7 +368,7 @@ static void mc_handle_msi(struct irq_des
-
- static void mc_msi_bottom_irq_ack(struct irq_data *data)
- {
- - struct mc_pcie *port = irq_data_get_irq_chip_data(data);
- + struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
- void __iomem *bridge_base_addr = port->bridge_addr;
- u32 bitpos = data->hwirq;
-
- @@ -373,7 +377,7 @@ static void mc_msi_bottom_irq_ack(struct
-
- static void mc_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
- {
- - struct mc_pcie *port = irq_data_get_irq_chip_data(data);
- + struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
- phys_addr_t addr = port->msi.vector_phy;
-
- msg->address_lo = lower_32_bits(addr);
- @@ -400,8 +404,8 @@ static struct irq_chip mc_msi_bottom_irq
- static int mc_irq_msi_domain_alloc(struct irq_domain *domain, unsigned int virq,
- unsigned int nr_irqs, void *args)
- {
- - struct mc_pcie *port = domain->host_data;
- - struct mc_msi *msi = &port->msi;
- + struct plda_pcie_rp *port = domain->host_data;
- + struct plda_msi *msi = &port->msi;
- unsigned long bit;
-
- mutex_lock(&msi->lock);
- @@ -425,8 +429,8 @@ static void mc_irq_msi_domain_free(struc
- unsigned int nr_irqs)
- {
- struct irq_data *d = irq_domain_get_irq_data(domain, virq);
- - struct mc_pcie *port = irq_data_get_irq_chip_data(d);
- - struct mc_msi *msi = &port->msi;
- + struct plda_pcie_rp *port = irq_data_get_irq_chip_data(d);
- + struct plda_msi *msi = &port->msi;
-
- mutex_lock(&msi->lock);
-
- @@ -456,11 +460,11 @@ static struct msi_domain_info mc_msi_dom
- .chip = &mc_msi_irq_chip,
- };
-
- -static int mc_allocate_msi_domains(struct mc_pcie *port)
- +static int mc_allocate_msi_domains(struct plda_pcie_rp *port)
- {
- struct device *dev = port->dev;
- struct fwnode_handle *fwnode = of_node_to_fwnode(dev->of_node);
- - struct mc_msi *msi = &port->msi;
- + struct plda_msi *msi = &port->msi;
-
- mutex_init(&port->msi.lock);
-
- @@ -484,7 +488,7 @@ static int mc_allocate_msi_domains(struc
-
- static void mc_handle_intx(struct irq_desc *desc)
- {
- - struct mc_pcie *port = irq_desc_get_handler_data(desc);
- + struct plda_pcie_rp *port = irq_desc_get_handler_data(desc);
- struct irq_chip *chip = irq_desc_get_chip(desc);
- struct device *dev = port->dev;
- void __iomem *bridge_base_addr = port->bridge_addr;
- @@ -511,7 +515,7 @@ static void mc_handle_intx(struct irq_de
-
- static void mc_ack_intx_irq(struct irq_data *data)
- {
- - struct mc_pcie *port = irq_data_get_irq_chip_data(data);
- + struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
- void __iomem *bridge_base_addr = port->bridge_addr;
- u32 mask = BIT(data->hwirq + PM_MSI_INT_INTX_SHIFT);
-
- @@ -520,7 +524,7 @@ static void mc_ack_intx_irq(struct irq_d
-
- static void mc_mask_intx_irq(struct irq_data *data)
- {
- - struct mc_pcie *port = irq_data_get_irq_chip_data(data);
- + struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
- void __iomem *bridge_base_addr = port->bridge_addr;
- unsigned long flags;
- u32 mask = BIT(data->hwirq + PM_MSI_INT_INTX_SHIFT);
- @@ -535,7 +539,7 @@ static void mc_mask_intx_irq(struct irq_
-
- static void mc_unmask_intx_irq(struct irq_data *data)
- {
- - struct mc_pcie *port = irq_data_get_irq_chip_data(data);
- + struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
- void __iomem *bridge_base_addr = port->bridge_addr;
- unsigned long flags;
- u32 mask = BIT(data->hwirq + PM_MSI_INT_INTX_SHIFT);
- @@ -625,21 +629,22 @@ static u32 local_events(struct mc_pcie *
- return val;
- }
-
- -static u32 get_events(struct mc_pcie *port)
- +static u32 get_events(struct plda_pcie_rp *port)
- {
- + struct mc_pcie *mc_port = container_of(port, struct mc_pcie, plda);
- u32 events = 0;
-
- - events |= pcie_events(port);
- - events |= sec_errors(port);
- - events |= ded_errors(port);
- - events |= local_events(port);
- + events |= pcie_events(mc_port);
- + events |= sec_errors(mc_port);
- + events |= ded_errors(mc_port);
- + events |= local_events(mc_port);
-
- return events;
- }
-
- static irqreturn_t mc_event_handler(int irq, void *dev_id)
- {
- - struct mc_pcie *port = dev_id;
- + struct plda_pcie_rp *port = dev_id;
- struct device *dev = port->dev;
- struct irq_data *data;
-
- @@ -655,7 +660,7 @@ static irqreturn_t mc_event_handler(int
-
- static void mc_handle_event(struct irq_desc *desc)
- {
- - struct mc_pcie *port = irq_desc_get_handler_data(desc);
- + struct plda_pcie_rp *port = irq_desc_get_handler_data(desc);
- unsigned long events;
- u32 bit;
- struct irq_chip *chip = irq_desc_get_chip(desc);
- @@ -672,12 +677,13 @@ static void mc_handle_event(struct irq_d
-
- static void mc_ack_event_irq(struct irq_data *data)
- {
- - struct mc_pcie *port = irq_data_get_irq_chip_data(data);
- + struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
- + struct mc_pcie *mc_port = container_of(port, struct mc_pcie, plda);
- u32 event = data->hwirq;
- void __iomem *addr;
- u32 mask;
-
- - addr = port->axi_base_addr + event_descs[event].base +
- + addr = mc_port->axi_base_addr + event_descs[event].base +
- event_descs[event].offset;
- mask = event_descs[event].mask;
- mask |= event_descs[event].enb_mask;
- @@ -687,13 +693,14 @@ static void mc_ack_event_irq(struct irq_
-
- static void mc_mask_event_irq(struct irq_data *data)
- {
- - struct mc_pcie *port = irq_data_get_irq_chip_data(data);
- + struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
- + struct mc_pcie *mc_port = container_of(port, struct mc_pcie, plda);
- u32 event = data->hwirq;
- void __iomem *addr;
- u32 mask;
- u32 val;
-
- - addr = port->axi_base_addr + event_descs[event].base +
- + addr = mc_port->axi_base_addr + event_descs[event].base +
- event_descs[event].mask_offset;
- mask = event_descs[event].mask;
- if (event_descs[event].enb_mask) {
- @@ -717,13 +724,14 @@ static void mc_mask_event_irq(struct irq
-
- static void mc_unmask_event_irq(struct irq_data *data)
- {
- - struct mc_pcie *port = irq_data_get_irq_chip_data(data);
- + struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
- + struct mc_pcie *mc_port = container_of(port, struct mc_pcie, plda);
- u32 event = data->hwirq;
- void __iomem *addr;
- u32 mask;
- u32 val;
-
- - addr = port->axi_base_addr + event_descs[event].base +
- + addr = mc_port->axi_base_addr + event_descs[event].base +
- event_descs[event].mask_offset;
- mask = event_descs[event].mask;
-
- @@ -811,7 +819,7 @@ static int mc_pcie_init_clks(struct devi
- return 0;
- }
-
- -static int mc_pcie_init_irq_domains(struct mc_pcie *port)
- +static int mc_pcie_init_irq_domains(struct plda_pcie_rp *port)
- {
- struct device *dev = port->dev;
- struct device_node *node = dev->of_node;
- @@ -889,7 +897,7 @@ static void mc_pcie_setup_window(void __
- }
-
- static int mc_pcie_setup_windows(struct platform_device *pdev,
- - struct mc_pcie *port)
- + struct plda_pcie_rp *port)
- {
- void __iomem *bridge_base_addr = port->bridge_addr;
- struct pci_host_bridge *bridge = platform_get_drvdata(pdev);
- @@ -970,7 +978,7 @@ static void mc_disable_interrupts(struct
- writel_relaxed(GENMASK(31, 0), bridge_base_addr + ISTATUS_HOST);
- }
-
- -static int mc_init_interrupts(struct platform_device *pdev, struct mc_pcie *port)
- +static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp *port)
- {
- struct device *dev = &pdev->dev;
- int irq;
- @@ -1043,12 +1051,12 @@ static int mc_platform_init(struct pci_c
- mc_pcie_enable_msi(port, cfg->win);
-
- /* Configure non-config space outbound ranges */
- - ret = mc_pcie_setup_windows(pdev, port);
- + ret = mc_pcie_setup_windows(pdev, &port->plda);
- if (ret)
- return ret;
-
- /* Address translation is up; safe to enable interrupts */
- - ret = mc_init_interrupts(pdev, port);
- + ret = mc_init_interrupts(pdev, &port->plda);
- if (ret)
- return ret;
-
- @@ -1059,6 +1067,7 @@ static int mc_host_probe(struct platform
- {
- struct device *dev = &pdev->dev;
- void __iomem *bridge_base_addr;
- + struct plda_pcie_rp *plda;
- int ret;
- u32 val;
-
- @@ -1066,7 +1075,8 @@ static int mc_host_probe(struct platform
- if (!port)
- return -ENOMEM;
-
- - port->dev = dev;
- + plda = &port->plda;
- + plda->dev = dev;
-
- port->axi_base_addr = devm_platform_ioremap_resource(pdev, 1);
- if (IS_ERR(port->axi_base_addr))
- @@ -1075,7 +1085,7 @@ static int mc_host_probe(struct platform
- mc_disable_interrupts(port);
-
- bridge_base_addr = port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
- - port->bridge_addr = bridge_base_addr;
- + plda->bridge_addr = bridge_base_addr;
-
- /* Allow enabling MSI by disabling MSI-X */
- val = readl(bridge_base_addr + PCIE_PCI_IRQ_DW0);
- @@ -1087,10 +1097,10 @@ static int mc_host_probe(struct platform
- val &= NUM_MSI_MSGS_MASK;
- val >>= NUM_MSI_MSGS_SHIFT;
-
- - port->msi.num_vectors = 1 << val;
- + plda->msi.num_vectors = 1 << val;
-
- /* Pick vector address from design */
- - port->msi.vector_phy = readl_relaxed(bridge_base_addr + IMSI_ADDR);
- + plda->msi.vector_phy = readl_relaxed(bridge_base_addr + IMSI_ADDR);
-
- ret = mc_pcie_init_clks(dev);
- if (ret) {
|