mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 19:56:18 +00:00
ibm_newemac: Introduce mal_has_feature
There are some PowerPC SoCs that do odd things with the MAL handling. In order to accommodate them, we need to introduce a feature mechanism that is similar to the existing emac_has_feature function. This adds a feature variable to the mal_instance structure, and adds a mal_has_feature function. Two features are defined and are guarded by Kconfig options that are selected by the affected platforms. MAL_FTR_CLEAR_ICINSTAT is used for platforms that need to clear the interrupt bits in the ICINTSTAT SDR for txeob/rxeob. This is common on MAL implementations that have interrupt coalescing. MAL_FTR_COMMON_ERR_INT is used for platforms that have SERR, TXDE, and RXDE OR'd into a single interrupt bit. Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Acked-by: Jeff Garzik <jeff@garzik.org> Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
This commit is contained in:
parent
b68d185ab1
commit
ec4f9945b5
2 changed files with 42 additions and 0 deletions
|
@ -66,3 +66,11 @@ config IBM_NEW_EMAC_EMAC4
|
||||||
config IBM_NEW_EMAC_NO_FLOW_CTRL
|
config IBM_NEW_EMAC_NO_FLOW_CTRL
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
|
||||||
|
config IBM_NEW_EMAC_MAL_CLR_ICINTSTAT
|
||||||
|
bool
|
||||||
|
default n
|
||||||
|
|
||||||
|
config IBM_NEW_EMAC_MAL_COMMON_ERR
|
||||||
|
bool
|
||||||
|
default n
|
||||||
|
|
|
@ -213,6 +213,8 @@ struct mal_instance {
|
||||||
struct of_device *ofdev;
|
struct of_device *ofdev;
|
||||||
int index;
|
int index;
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
|
|
||||||
|
unsigned int features;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline u32 get_mal_dcrn(struct mal_instance *mal, int reg)
|
static inline u32 get_mal_dcrn(struct mal_instance *mal, int reg)
|
||||||
|
@ -225,6 +227,38 @@ static inline void set_mal_dcrn(struct mal_instance *mal, int reg, u32 val)
|
||||||
dcr_write(mal->dcr_host, reg, val);
|
dcr_write(mal->dcr_host, reg, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Features of various MAL implementations */
|
||||||
|
|
||||||
|
/* Set if you have interrupt coalescing and you have to clear the SDR
|
||||||
|
* register for TXEOB and RXEOB interrupts to work
|
||||||
|
*/
|
||||||
|
#define MAL_FTR_CLEAR_ICINTSTAT 0x00000001
|
||||||
|
|
||||||
|
/* Set if your MAL has SERR, TXDE, and RXDE OR'd into a single UIC
|
||||||
|
* interrupt
|
||||||
|
*/
|
||||||
|
#define MAL_FTR_COMMON_ERR_INT 0x00000002
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MAL_FTRS_ALWAYS = 0,
|
||||||
|
|
||||||
|
MAL_FTRS_POSSIBLE =
|
||||||
|
#ifdef CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT
|
||||||
|
MAL_FTR_CLEAR_ICINTSTAT |
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR
|
||||||
|
MAL_FTR_COMMON_ERR_INT |
|
||||||
|
#endif
|
||||||
|
0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline int mal_has_feature(struct mal_instance *dev,
|
||||||
|
unsigned long feature)
|
||||||
|
{
|
||||||
|
return (MAL_FTRS_ALWAYS & feature) ||
|
||||||
|
(MAL_FTRS_POSSIBLE & dev->features & feature);
|
||||||
|
}
|
||||||
|
|
||||||
/* Register MAL devices */
|
/* Register MAL devices */
|
||||||
int mal_init(void);
|
int mal_init(void);
|
||||||
void mal_exit(void);
|
void mal_exit(void);
|
||||||
|
|
Loading…
Reference in a new issue