All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wolfgang Grandegger <wg@grandegger.com>
To: Matthias Fuchs <matthias.fuchs@esd.eu>
Cc: netdev@vger.kernel.org, Socketcan-core@lists.berlios.de
Subject: Re: [PATCH] can: Add esd board support to plx_pci CAN driver
Date: Wed, 31 Mar 2010 20:25:13 +0200	[thread overview]
Message-ID: <4BB39389.9050909@grandegger.com> (raw)
In-Reply-To: <201003311732.59921.matthias.fuchs@esd.eu>

Hi Matthias,

Matthias Fuchs wrote:
> This patch adds support for SJA1000 based PCI CAN interface cards
> from electronic system design gmbh.
> 
> Two changes have been done on the common code:
>  - esd boards must not have the 2nd local interupt enabled (PLX9030/9050)
>  - a new path for PLX9056/PEX8311 chips has been added
> 
> In detail the following additional boards are now supported:
> 
>         CAN-PCI/200 (PCI)
>         CAN-PCI/266 (PCI)
>         CAN-PMC266 (PMC module)
>         CAN-PCIe/2000 (PCI Express)
>         CAN-CPCI/200 (Compact PCI, 3U)
>         CAN-PCI104 (PCI104)
> 
> Signed-off-by: Matthias Fuchs <matthias.fuchs@esd.eu>

Could you also please update the corresponding Kconfig entry. Apart
from that, the patch looks good.

Thanks,

Wolfgang.

>  drivers/net/can/sja1000/plx_pci.c |  110 ++++++++++++++++++++++++++++++++++---
>  1 files changed, 101 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/net/can/sja1000/plx_pci.c b/drivers/net/can/sja1000/plx_pci.c
> index 6b46a63..42602e9 100644
> --- a/drivers/net/can/sja1000/plx_pci.c
> +++ b/drivers/net/can/sja1000/plx_pci.c
> @@ -40,7 +40,10 @@ MODULE_DESCRIPTION("Socket-CAN driver for PLX90xx PCI-bridge cards with "
>  MODULE_SUPPORTED_DEVICE("Adlink PCI-7841/cPCI-7841, "
>  			"Adlink PCI-7841/cPCI-7841 SE, "
>  			"Marathon CAN-bus-PCI, "
> -			"TEWS TECHNOLOGIES TPMC810");
> +			"TEWS TECHNOLOGIES TPMC810, "
> +			"esd CAN-PCI/CPCI/PCI104/200, "
> +			"esd CAN-PCI/PMC/266, "
> +			"esd CAN-PCIe/2000")
>  MODULE_LICENSE("GPL v2");
>  
>  #define PLX_PCI_MAX_CHAN 2
> @@ -53,7 +56,7 @@ struct plx_pci_card {
>  
>  #define PLX_PCI_CAN_CLOCK (16000000 / 2)
>  
> -/* PLX90xx registers */
> +/* PLX9030/9050/9052 registers */
>  #define PLX_INTCSR	0x4c		/* Interrupt Control/Status */
>  #define PLX_CNTRL	0x50		/* User I/O, Direct Slave Response,
>  					 * Serial EEPROM, and Initialization
> @@ -65,6 +68,12 @@ struct plx_pci_card {
>  #define PLX_PCI_INT_EN	(1 << 6)	/* PCI Interrupt Enable */
>  #define PLX_PCI_RESET	(1 << 30)	/* PCI Adapter Software Reset */
>  
> +/* PLX9056 registers */
> +#define PLX9056_INTCSR	0x68		/* Interrupt Control/Status */
> +
> +#define PLX9056_LINTI	(1 << 11)
> +#define PLX9056_PCI_INT_EN (1 << 8)
> +
>  /*
>   * The board configuration is probably following:
>   * RX1 is connected to ground.
> @@ -100,6 +109,13 @@ struct plx_pci_card {
>  #define ADLINK_PCI_VENDOR_ID		0x144A
>  #define ADLINK_PCI_DEVICE_ID		0x7841
>  
> +#define ESD_PCI_SUB_SYS_ID_PCI200	0x0004
> +#define ESD_PCI_SUB_SYS_ID_PCI266	0x0009
> +#define ESD_PCI_SUB_SYS_ID_PMC266	0x000e
> +#define ESD_PCI_SUB_SYS_ID_CPCI200	0x010b
> +#define ESD_PCI_SUB_SYS_ID_PCIE2000	0x0200
> +#define ESD_PCI_SUB_SYS_ID_PCI104200	0x0501
> +
>  #define MARATHON_PCI_DEVICE_ID		0x2715
>  
>  #define TEWS_PCI_VENDOR_ID		0x1498
> @@ -147,6 +163,30 @@ static struct plx_pci_card_info plx_pci_card_info_adlink_se __devinitdata = {
>  	/* based on PLX9052 */
>  };
>  
> +static struct plx_pci_card_info plx_pci_card_info_esd200 __devinitdata = {
> +	"esd CAN-PCI/CPCI/PCI104/200", 2,
> +	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,
> +	{0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} },
> +	&plx_pci_reset_common
> +	/* based on PLX9030/9050 */
> +};
> +
> +static struct plx_pci_card_info plx_pci_card_info_esd266 __devinitdata = {
> +	"esd CAN-PCI/PMC/266", 2,
> +	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,
> +	{0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} },
> +	&plx_pci_reset_common
> +	/* based on PLX9056 */
> +};
> +
> +static struct plx_pci_card_info plx_pci_card_info_esd2000 __devinitdata = {
> +	"esd CAN-PCIe/2000", 2,
> +	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,
> +	{0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} },
> +	&plx_pci_reset_common
> +	/* based on PEX8311 */
> +};
> +
>  static struct plx_pci_card_info plx_pci_card_info_marathon __devinitdata = {
>  	"Marathon CAN-bus-PCI", 2,
>  	PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR,
> @@ -179,6 +219,48 @@ static DEFINE_PCI_DEVICE_TABLE(plx_pci_tbl) = {
>  		(kernel_ulong_t)&plx_pci_card_info_adlink_se
>  	},
>  	{
> +		/* esd CAN-PCI/200 */
> +		PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
> +		PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_PCI200,
> +		0, 0,
> +		(kernel_ulong_t)&plx_pci_card_info_esd200
> +	},
> +	{
> +		/* esd CAN-CPCI/200 */
> +		PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
> +		PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_CPCI200,
> +		0, 0,
> +		(kernel_ulong_t)&plx_pci_card_info_esd200
> +	},
> +	{
> +		/* esd CAN-PCI104/200 */
> +		PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
> +		PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_PCI104200,
> +		0, 0,
> +		(kernel_ulong_t)&plx_pci_card_info_esd200
> +	},
> +	{
> +		/* esd CAN-PCI/266 */
> +		PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9056,
> +		PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_PCI266,
> +		0, 0,
> +		(kernel_ulong_t)&plx_pci_card_info_esd266
> +	},
> +	{
> +		/* esd CAN-PMC/266 */
> +		PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9056,
> +		PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_PMC266,
> +		0, 0,
> +		(kernel_ulong_t)&plx_pci_card_info_esd266
> +	},
> +	{
> +		/* esd CAN-PCIE/2000 */
> +		PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9056,
> +		PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_PCIE2000,
> +		0, 0,
> +		(kernel_ulong_t)&plx_pci_card_info_esd2000
> +	},
> +	{
>  		/* Marathon CAN-bus-PCI card */
>  		PCI_VENDOR_ID_PLX, MARATHON_PCI_DEVICE_ID,
>  		PCI_ANY_ID, PCI_ANY_ID,
> @@ -304,10 +386,13 @@ static void plx_pci_del_card(struct pci_dev *pdev)
>  	plx_pci_reset_common(pdev);
>  
>  	/*
> -	 * Disable interrupts from PCI-card (PLX90xx) and disable Local_1,
> -	 * Local_2 interrupts
> +	 * Disable interrupts from PCI-card and disable local
> +	 * interrupts
>  	 */
> -	iowrite32(0x0, card->conf_addr + PLX_INTCSR);
> +	if (pdev->device != PCI_DEVICE_ID_PLX_9056)
> +		iowrite32(0x0, card->conf_addr + PLX_INTCSR);
> +	else
> +		iowrite32(0x0, card->conf_addr + PLX9056_INTCSR);
>  
>  	if (card->conf_addr)
>  		pci_iounmap(pdev, card->conf_addr);
> @@ -437,10 +522,17 @@ static int __devinit plx_pci_add_card(struct pci_dev *pdev,
>  	 * Enable interrupts from PCI-card (PLX90xx) and enable Local_1,
>  	 * Local_2 interrupts from the SJA1000 chips
>  	 */
> -	val = ioread32(card->conf_addr + PLX_INTCSR);
> -	val |= PLX_LINT1_EN | PLX_LINT2_EN | PLX_PCI_INT_EN;
> -	iowrite32(val, card->conf_addr + PLX_INTCSR);
> -
> +	if (pdev->device != PCI_DEVICE_ID_PLX_9056) {
> +		val = ioread32(card->conf_addr + PLX_INTCSR);
> +		if (pdev->subsystem_vendor == PCI_VENDOR_ID_ESDGMBH)
> +			val |= PLX_LINT1_EN | PLX_PCI_INT_EN;
> +		else
> +			val |= PLX_LINT1_EN | PLX_LINT2_EN | PLX_PCI_INT_EN;
> +		iowrite32(val, card->conf_addr + PLX_INTCSR);
> +	} else {
> +		iowrite32(PLX9056_LINTI | PLX9056_PCI_INT_EN,
> +			  card->conf_addr + PLX9056_INTCSR);
> +	}
>  	return 0;
>  
>  failure_cleanup:



      reply	other threads:[~2010-03-31 18:26 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-31 15:32 [PATCH] can: Add esd board support to plx_pci CAN driver Matthias Fuchs
2010-03-31 18:25 ` Wolfgang Grandegger [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BB39389.9050909@grandegger.com \
    --to=wg@grandegger.com \
    --cc=Socketcan-core@lists.berlios.de \
    --cc=matthias.fuchs@esd.eu \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.