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:
prev parent 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.