amd-xgbe: Re-issue interrupt if interrupt status not cleared
Some of the device interrupts should function as level interrupts. For some hardware configurations this requires setting some control bits so that if the interrupt status has not been cleared the interrupt should be reissued. Additionally, when using MSI or MSI-X interrupts, run the interrupt service routine as a tasklet so that the re-issuance of the interrupt is handled properly. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
45a2005e93
commit
85b85c8534
@@ -837,7 +837,7 @@ struct xgbe_phy_if {
|
||||
bool (*phy_valid_speed)(struct xgbe_prv_data *, int);
|
||||
|
||||
/* For single interrupt support */
|
||||
irqreturn_t (*an_isr)(int, struct xgbe_prv_data *);
|
||||
irqreturn_t (*an_isr)(struct xgbe_prv_data *);
|
||||
|
||||
/* PHY implementation specific services */
|
||||
struct xgbe_phy_impl_if phy_impl;
|
||||
@@ -855,7 +855,7 @@ struct xgbe_i2c_if {
|
||||
int (*i2c_xfer)(struct xgbe_prv_data *, struct xgbe_i2c_op *);
|
||||
|
||||
/* For single interrupt support */
|
||||
irqreturn_t (*i2c_isr)(int, struct xgbe_prv_data *);
|
||||
irqreturn_t (*i2c_isr)(struct xgbe_prv_data *);
|
||||
};
|
||||
|
||||
struct xgbe_desc_if {
|
||||
@@ -924,6 +924,7 @@ struct xgbe_version_data {
|
||||
unsigned int tx_tstamp_workaround;
|
||||
unsigned int ecc_support;
|
||||
unsigned int i2c_support;
|
||||
unsigned int irq_reissue_support;
|
||||
};
|
||||
|
||||
struct xgbe_prv_data {
|
||||
@@ -1159,6 +1160,12 @@ struct xgbe_prv_data {
|
||||
|
||||
unsigned int lpm_ctrl; /* CTRL1 for resume */
|
||||
|
||||
unsigned int isr_as_tasklet;
|
||||
struct tasklet_struct tasklet_dev;
|
||||
struct tasklet_struct tasklet_ecc;
|
||||
struct tasklet_struct tasklet_i2c;
|
||||
struct tasklet_struct tasklet_an;
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *xgbe_debugfs;
|
||||
|
||||
|
Reference in New Issue
Block a user