Skip to content

Commit e9b7007

Browse files
mindachen1987bjorn-helgaas
authored andcommitted
PCI: microchip: Rename PLDA structures to be generic
Rename struct mc_msi to plda_msi and move most of struct mc_pcie to a new struct plda_pcie_rp so they can be shared by all PLDA-based drivers. The axi_base_addr field remains in struct mc_pcie since it's Microchip-specific data. The event interrupt code is still using struct mc_pcie because the event interrupt code can not be re-used. [kwilczynski: commit log] Link: https://lore.kernel.org/linux-pci/20240328091835.14797-6-minda.chen@starfivetech.com Signed-off-by: Minda Chen <minda.chen@starfivetech.com> Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
1 parent 55ba253 commit e9b7007

1 file changed

Lines changed: 53 additions & 43 deletions

File tree

drivers/pci/controller/plda/pcie-microchip-host.c

Lines changed: 53 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#include "pcie-plda.h"
2323

2424
/* Number of MSI IRQs */
25-
#define MC_MAX_NUM_MSI_IRQS 32
25+
#define PLDA_MAX_NUM_MSI_IRQS 32
2626

2727
/* PCIe Bridge Phy and Controller Phy offsets */
2828
#define MC_PCIE1_BRIDGE_ADDR 0x00008000u
@@ -179,25 +179,29 @@ struct event_map {
179179
u32 event_bit;
180180
};
181181

182-
struct mc_msi {
182+
struct plda_msi {
183183
struct mutex lock; /* Protect used bitmap */
184184
struct irq_domain *msi_domain;
185185
struct irq_domain *dev_domain;
186186
u32 num_vectors;
187187
u64 vector_phy;
188-
DECLARE_BITMAP(used, MC_MAX_NUM_MSI_IRQS);
188+
DECLARE_BITMAP(used, PLDA_MAX_NUM_MSI_IRQS);
189189
};
190190

191-
struct mc_pcie {
192-
void __iomem *axi_base_addr;
191+
struct plda_pcie_rp {
193192
struct device *dev;
194193
struct irq_domain *intx_domain;
195194
struct irq_domain *event_domain;
196195
raw_spinlock_t lock;
197-
struct mc_msi msi;
196+
struct plda_msi msi;
198197
void __iomem *bridge_addr;
199198
};
200199

200+
struct mc_pcie {
201+
struct plda_pcie_rp plda;
202+
void __iomem *axi_base_addr;
203+
};
204+
201205
struct cause {
202206
const char *sym;
203207
const char *str;
@@ -313,7 +317,7 @@ static struct mc_pcie *port;
313317

314318
static void mc_pcie_enable_msi(struct mc_pcie *port, void __iomem *ecam)
315319
{
316-
struct mc_msi *msi = &port->msi;
320+
struct plda_msi *msi = &port->plda.msi;
317321
u16 reg;
318322
u8 queue_size;
319323

@@ -336,10 +340,10 @@ static void mc_pcie_enable_msi(struct mc_pcie *port, void __iomem *ecam)
336340

337341
static void mc_handle_msi(struct irq_desc *desc)
338342
{
339-
struct mc_pcie *port = irq_desc_get_handler_data(desc);
343+
struct plda_pcie_rp *port = irq_desc_get_handler_data(desc);
340344
struct irq_chip *chip = irq_desc_get_chip(desc);
341345
struct device *dev = port->dev;
342-
struct mc_msi *msi = &port->msi;
346+
struct plda_msi *msi = &port->msi;
343347
void __iomem *bridge_base_addr = port->bridge_addr;
344348
unsigned long status;
345349
u32 bit;
@@ -364,7 +368,7 @@ static void mc_handle_msi(struct irq_desc *desc)
364368

365369
static void mc_msi_bottom_irq_ack(struct irq_data *data)
366370
{
367-
struct mc_pcie *port = irq_data_get_irq_chip_data(data);
371+
struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
368372
void __iomem *bridge_base_addr = port->bridge_addr;
369373
u32 bitpos = data->hwirq;
370374

@@ -373,7 +377,7 @@ static void mc_msi_bottom_irq_ack(struct irq_data *data)
373377

374378
static void mc_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
375379
{
376-
struct mc_pcie *port = irq_data_get_irq_chip_data(data);
380+
struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
377381
phys_addr_t addr = port->msi.vector_phy;
378382

379383
msg->address_lo = lower_32_bits(addr);
@@ -400,8 +404,8 @@ static struct irq_chip mc_msi_bottom_irq_chip = {
400404
static int mc_irq_msi_domain_alloc(struct irq_domain *domain, unsigned int virq,
401405
unsigned int nr_irqs, void *args)
402406
{
403-
struct mc_pcie *port = domain->host_data;
404-
struct mc_msi *msi = &port->msi;
407+
struct plda_pcie_rp *port = domain->host_data;
408+
struct plda_msi *msi = &port->msi;
405409
unsigned long bit;
406410

407411
mutex_lock(&msi->lock);
@@ -425,8 +429,8 @@ static void mc_irq_msi_domain_free(struct irq_domain *domain, unsigned int virq,
425429
unsigned int nr_irqs)
426430
{
427431
struct irq_data *d = irq_domain_get_irq_data(domain, virq);
428-
struct mc_pcie *port = irq_data_get_irq_chip_data(d);
429-
struct mc_msi *msi = &port->msi;
432+
struct plda_pcie_rp *port = irq_data_get_irq_chip_data(d);
433+
struct plda_msi *msi = &port->msi;
430434

431435
mutex_lock(&msi->lock);
432436

@@ -456,11 +460,11 @@ static struct msi_domain_info mc_msi_domain_info = {
456460
.chip = &mc_msi_irq_chip,
457461
};
458462

459-
static int mc_allocate_msi_domains(struct mc_pcie *port)
463+
static int mc_allocate_msi_domains(struct plda_pcie_rp *port)
460464
{
461465
struct device *dev = port->dev;
462466
struct fwnode_handle *fwnode = of_node_to_fwnode(dev->of_node);
463-
struct mc_msi *msi = &port->msi;
467+
struct plda_msi *msi = &port->msi;
464468

465469
mutex_init(&port->msi.lock);
466470

@@ -484,7 +488,7 @@ static int mc_allocate_msi_domains(struct mc_pcie *port)
484488

485489
static void mc_handle_intx(struct irq_desc *desc)
486490
{
487-
struct mc_pcie *port = irq_desc_get_handler_data(desc);
491+
struct plda_pcie_rp *port = irq_desc_get_handler_data(desc);
488492
struct irq_chip *chip = irq_desc_get_chip(desc);
489493
struct device *dev = port->dev;
490494
void __iomem *bridge_base_addr = port->bridge_addr;
@@ -511,7 +515,7 @@ static void mc_handle_intx(struct irq_desc *desc)
511515

512516
static void mc_ack_intx_irq(struct irq_data *data)
513517
{
514-
struct mc_pcie *port = irq_data_get_irq_chip_data(data);
518+
struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
515519
void __iomem *bridge_base_addr = port->bridge_addr;
516520
u32 mask = BIT(data->hwirq + PM_MSI_INT_INTX_SHIFT);
517521

@@ -520,7 +524,7 @@ static void mc_ack_intx_irq(struct irq_data *data)
520524

521525
static void mc_mask_intx_irq(struct irq_data *data)
522526
{
523-
struct mc_pcie *port = irq_data_get_irq_chip_data(data);
527+
struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
524528
void __iomem *bridge_base_addr = port->bridge_addr;
525529
unsigned long flags;
526530
u32 mask = BIT(data->hwirq + PM_MSI_INT_INTX_SHIFT);
@@ -535,7 +539,7 @@ static void mc_mask_intx_irq(struct irq_data *data)
535539

536540
static void mc_unmask_intx_irq(struct irq_data *data)
537541
{
538-
struct mc_pcie *port = irq_data_get_irq_chip_data(data);
542+
struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
539543
void __iomem *bridge_base_addr = port->bridge_addr;
540544
unsigned long flags;
541545
u32 mask = BIT(data->hwirq + PM_MSI_INT_INTX_SHIFT);
@@ -625,21 +629,22 @@ static u32 local_events(struct mc_pcie *port)
625629
return val;
626630
}
627631

628-
static u32 get_events(struct mc_pcie *port)
632+
static u32 get_events(struct plda_pcie_rp *port)
629633
{
634+
struct mc_pcie *mc_port = container_of(port, struct mc_pcie, plda);
630635
u32 events = 0;
631636

632-
events |= pcie_events(port);
633-
events |= sec_errors(port);
634-
events |= ded_errors(port);
635-
events |= local_events(port);
637+
events |= pcie_events(mc_port);
638+
events |= sec_errors(mc_port);
639+
events |= ded_errors(mc_port);
640+
events |= local_events(mc_port);
636641

637642
return events;
638643
}
639644

640645
static irqreturn_t mc_event_handler(int irq, void *dev_id)
641646
{
642-
struct mc_pcie *port = dev_id;
647+
struct plda_pcie_rp *port = dev_id;
643648
struct device *dev = port->dev;
644649
struct irq_data *data;
645650

@@ -655,7 +660,7 @@ static irqreturn_t mc_event_handler(int irq, void *dev_id)
655660

656661
static void mc_handle_event(struct irq_desc *desc)
657662
{
658-
struct mc_pcie *port = irq_desc_get_handler_data(desc);
663+
struct plda_pcie_rp *port = irq_desc_get_handler_data(desc);
659664
unsigned long events;
660665
u32 bit;
661666
struct irq_chip *chip = irq_desc_get_chip(desc);
@@ -672,12 +677,13 @@ static void mc_handle_event(struct irq_desc *desc)
672677

673678
static void mc_ack_event_irq(struct irq_data *data)
674679
{
675-
struct mc_pcie *port = irq_data_get_irq_chip_data(data);
680+
struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
681+
struct mc_pcie *mc_port = container_of(port, struct mc_pcie, plda);
676682
u32 event = data->hwirq;
677683
void __iomem *addr;
678684
u32 mask;
679685

680-
addr = port->axi_base_addr + event_descs[event].base +
686+
addr = mc_port->axi_base_addr + event_descs[event].base +
681687
event_descs[event].offset;
682688
mask = event_descs[event].mask;
683689
mask |= event_descs[event].enb_mask;
@@ -687,13 +693,14 @@ static void mc_ack_event_irq(struct irq_data *data)
687693

688694
static void mc_mask_event_irq(struct irq_data *data)
689695
{
690-
struct mc_pcie *port = irq_data_get_irq_chip_data(data);
696+
struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
697+
struct mc_pcie *mc_port = container_of(port, struct mc_pcie, plda);
691698
u32 event = data->hwirq;
692699
void __iomem *addr;
693700
u32 mask;
694701
u32 val;
695702

696-
addr = port->axi_base_addr + event_descs[event].base +
703+
addr = mc_port->axi_base_addr + event_descs[event].base +
697704
event_descs[event].mask_offset;
698705
mask = event_descs[event].mask;
699706
if (event_descs[event].enb_mask) {
@@ -717,13 +724,14 @@ static void mc_mask_event_irq(struct irq_data *data)
717724

718725
static void mc_unmask_event_irq(struct irq_data *data)
719726
{
720-
struct mc_pcie *port = irq_data_get_irq_chip_data(data);
727+
struct plda_pcie_rp *port = irq_data_get_irq_chip_data(data);
728+
struct mc_pcie *mc_port = container_of(port, struct mc_pcie, plda);
721729
u32 event = data->hwirq;
722730
void __iomem *addr;
723731
u32 mask;
724732
u32 val;
725733

726-
addr = port->axi_base_addr + event_descs[event].base +
734+
addr = mc_port->axi_base_addr + event_descs[event].base +
727735
event_descs[event].mask_offset;
728736
mask = event_descs[event].mask;
729737

@@ -811,7 +819,7 @@ static int mc_pcie_init_clks(struct device *dev)
811819
return 0;
812820
}
813821

814-
static int mc_pcie_init_irq_domains(struct mc_pcie *port)
822+
static int mc_pcie_init_irq_domains(struct plda_pcie_rp *port)
815823
{
816824
struct device *dev = port->dev;
817825
struct device_node *node = dev->of_node;
@@ -889,7 +897,7 @@ static void mc_pcie_setup_window(void __iomem *bridge_base_addr, u32 index,
889897
}
890898

891899
static int mc_pcie_setup_windows(struct platform_device *pdev,
892-
struct mc_pcie *port)
900+
struct plda_pcie_rp *port)
893901
{
894902
void __iomem *bridge_base_addr = port->bridge_addr;
895903
struct pci_host_bridge *bridge = platform_get_drvdata(pdev);
@@ -970,7 +978,7 @@ static void mc_disable_interrupts(struct mc_pcie *port)
970978
writel_relaxed(GENMASK(31, 0), bridge_base_addr + ISTATUS_HOST);
971979
}
972980

973-
static int mc_init_interrupts(struct platform_device *pdev, struct mc_pcie *port)
981+
static int mc_init_interrupts(struct platform_device *pdev, struct plda_pcie_rp *port)
974982
{
975983
struct device *dev = &pdev->dev;
976984
int irq;
@@ -1043,12 +1051,12 @@ static int mc_platform_init(struct pci_config_window *cfg)
10431051
mc_pcie_enable_msi(port, cfg->win);
10441052

10451053
/* Configure non-config space outbound ranges */
1046-
ret = mc_pcie_setup_windows(pdev, port);
1054+
ret = mc_pcie_setup_windows(pdev, &port->plda);
10471055
if (ret)
10481056
return ret;
10491057

10501058
/* Address translation is up; safe to enable interrupts */
1051-
ret = mc_init_interrupts(pdev, port);
1059+
ret = mc_init_interrupts(pdev, &port->plda);
10521060
if (ret)
10531061
return ret;
10541062

@@ -1059,14 +1067,16 @@ static int mc_host_probe(struct platform_device *pdev)
10591067
{
10601068
struct device *dev = &pdev->dev;
10611069
void __iomem *bridge_base_addr;
1070+
struct plda_pcie_rp *plda;
10621071
int ret;
10631072
u32 val;
10641073

10651074
port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);
10661075
if (!port)
10671076
return -ENOMEM;
10681077

1069-
port->dev = dev;
1078+
plda = &port->plda;
1079+
plda->dev = dev;
10701080

10711081
port->axi_base_addr = devm_platform_ioremap_resource(pdev, 1);
10721082
if (IS_ERR(port->axi_base_addr))
@@ -1075,7 +1085,7 @@ static int mc_host_probe(struct platform_device *pdev)
10751085
mc_disable_interrupts(port);
10761086

10771087
bridge_base_addr = port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
1078-
port->bridge_addr = bridge_base_addr;
1088+
plda->bridge_addr = bridge_base_addr;
10791089

10801090
/* Allow enabling MSI by disabling MSI-X */
10811091
val = readl(bridge_base_addr + PCIE_PCI_IRQ_DW0);
@@ -1087,10 +1097,10 @@ static int mc_host_probe(struct platform_device *pdev)
10871097
val &= NUM_MSI_MSGS_MASK;
10881098
val >>= NUM_MSI_MSGS_SHIFT;
10891099

1090-
port->msi.num_vectors = 1 << val;
1100+
plda->msi.num_vectors = 1 << val;
10911101

10921102
/* Pick vector address from design */
1093-
port->msi.vector_phy = readl_relaxed(bridge_base_addr + IMSI_ADDR);
1103+
plda->msi.vector_phy = readl_relaxed(bridge_base_addr + IMSI_ADDR);
10941104

10951105
ret = mc_pcie_init_clks(dev);
10961106
if (ret) {

0 commit comments

Comments
 (0)