Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6762ef35 authored by David S. Miller's avatar David S. Miller
Browse files

Merge tag 'linux-can-next-for-4.8-20160617' of...

Merge tag 'linux-can-next-for-4.8-20160617' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next



Marc Kleine-Budde says:

====================
pull-request: can-next 2016-06-17

this is a pull request of 14 patches for net-next/master.

Geert Uytterhoeven contributes a patch that adds a file patterns for
CAN device tree bindings to MAINTAINERS. A patch by Alexander Aring
fixes warnings when building without proc support. A patch by me
improves the sample point calculation. Marek Vasut's patch converts
the slcan driver to use CAN_MTU. A patch by William Breathitt Gray
converts the tscan1 driver to use module_isa_driver.

Two patches by Maximilian Schneider for the gs_usb driver fix coding
style and add support for set_phys_id callback. 5 patches by Oliver
Hartkopp add support for CANFD to the bcm. And finally two patches
by Ramesh Shanmugasundaram, which add support for the rcar_canfd
driver.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 59494dd6 a23b97e6
Loading
Loading
Loading
Loading
+89 −0
Original line number Diff line number Diff line
Renesas R-Car CAN FD controller Device Tree Bindings
----------------------------------------------------

Required properties:
- compatible: Must contain one or more of the following:
  - "renesas,rcar-gen3-canfd" for R-Car Gen3 compatible controller.
  - "renesas,r8a7795-canfd" for R8A7795 (R-Car H3) compatible controller.

  When compatible with the generic version, nodes must list the
  SoC-specific version corresponding to the platform first, followed by the
  family-specific and/or generic versions.

- reg: physical base address and size of the R-Car CAN FD register map.
- interrupts: interrupt specifier for the Global & Channel interrupts
- clocks: phandles and clock specifiers for 3 clock inputs.
- clock-names: 3 clock input name strings: "fck", "canfd", "can_clk".
- pinctrl-0: pin control group to be used for this controller.
- pinctrl-names: must be "default".

Required child nodes:
The controller supports two channels and each is represented as a child node.
The name of the child nodes are "channel0" and "channel1" respectively. Each
child node supports the "status" property only, which is used to
enable/disable the respective channel.

Required properties for "renesas,r8a7795-canfd" compatible:
In R8A7795 SoC, canfd clock is a div6 clock and can be used by both CAN
and CAN FD controller at the same time. It needs to be scaled to maximum
frequency if any of these controllers use it. This is done using the
below properties.

- assigned-clocks: phandle of canfd clock.
- assigned-clock-rates: maximum frequency of this clock.

Example
-------

SoC common .dtsi file:

		canfd: can@e66c0000 {
			compatible = "renesas,r8a7795-canfd",
				     "renesas,rcar-gen3-canfd";
			reg = <0 0xe66c0000 0 0x8000>;
			interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>,
				   <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&cpg CPG_MOD 914>,
			       <&cpg CPG_CORE R8A7795_CLK_CANFD>,
			       <&can_clk>;
			clock-names = "fck", "canfd", "can_clk";
			assigned-clocks = <&cpg CPG_CORE R8A7795_CLK_CANFD>;
			assigned-clock-rates = <40000000>;
			power-domains = <&cpg>;
			status = "disabled";

			channel0 {
				status = "disabled";
			};

			channel1 {
				status = "disabled";
			};
		};

Board specific .dts file:

E.g. below enables Channel 1 alone in the board.

&canfd {
        pinctrl-0 = <&canfd1_pins>;
        pinctrl-names = "default";
        status = "okay";

	channel1 {
		status = "okay";
	};
};

E.g. below enables Channel 0 alone in the board using External clock
as fCAN clock.

&canfd {
        pinctrl-0 = <&canfd0_pins &can_clk_pins>;
        pinctrl-names = "default";
        status = "okay";

	channel0 {
		status = "okay";
	};
};
+24 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ This file contains
      4.2.4 Broadcast Manager message sequence transmission
      4.2.5 Broadcast Manager receive filter timers
      4.2.6 Broadcast Manager multiplex message receive filter
      4.2.7 Broadcast Manager CAN FD support
    4.3 connected transport protocols (SOCK_SEQPACKET)
    4.4 unconnected transport protocols (SOCK_DGRAM)

@@ -799,7 +800,7 @@ solution for a couple of reasons:
    } mytxmsg;

    (..)
    mytxmsg.nframes = 4;
    mytxmsg.msg_head.nframes = 4;
    (..)

    write(s, &mytxmsg, sizeof(mytxmsg));
@@ -852,6 +853,28 @@ solution for a couple of reasons:

    write(s, &msg, sizeof(msg));

  4.2.7 Broadcast Manager CAN FD support

  The programming API of the CAN_BCM depends on struct can_frame which is
  given as array directly behind the bcm_msg_head structure. To follow this
  schema for the CAN FD frames a new flag 'CAN_FD_FRAME' in the bcm_msg_head
  flags indicates that the concatenated CAN frame structures behind the
  bcm_msg_head are defined as struct canfd_frame.

    struct {
            struct bcm_msg_head msg_head;
            struct canfd_frame frame[5];
    } msg;

    msg.msg_head.opcode  = RX_SETUP;
    msg.msg_head.can_id  = 0x42;
    msg.msg_head.flags   = CAN_FD_FRAME;
    msg.msg_head.nframes = 5;
    (..)

  When using CAN FD frames for multiplex filtering the MUX mask is still
  expected in the first 64 bit of the struct canfd_frame data section.

  4.3 connected transport protocols (SOCK_SEQPACKET)
  4.4 unconnected transport protocols (SOCK_DGRAM)

+1 −0
Original line number Diff line number Diff line
@@ -2814,6 +2814,7 @@ W: https://github.com/linux-can
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
S:	Maintained
F:	Documentation/devicetree/bindings/net/can/
F:	drivers/net/can/
F:	include/linux/can/dev.h
F:	include/linux/can/platform/
+1 −10
Original line number Diff line number Diff line
@@ -104,16 +104,6 @@ config CAN_JANZ_ICAN3
	  This driver can also be built as a module. If so, the module will be
	  called janz-ican3.ko.

config CAN_RCAR
	tristate "Renesas R-Car CAN controller"
	depends on ARCH_RENESAS || ARM
	---help---
	  Say Y here if you want to use CAN controller found on Renesas R-Car
	  SoCs.

	  To compile this driver as a module, choose M here: the module will
	  be called rcar_can.

config CAN_SUN4I
	tristate "Allwinner A10 CAN controller"
	depends on MACH_SUN4I || MACH_SUN7I || COMPILE_TEST
@@ -152,6 +142,7 @@ source "drivers/net/can/cc770/Kconfig"
source "drivers/net/can/ifi_canfd/Kconfig"
source "drivers/net/can/m_can/Kconfig"
source "drivers/net/can/mscan/Kconfig"
source "drivers/net/can/rcar/Kconfig"
source "drivers/net/can/sja1000/Kconfig"
source "drivers/net/can/softing/Kconfig"
source "drivers/net/can/spi/Kconfig"
+1 −1
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ can-dev-y := dev.o

can-dev-$(CONFIG_CAN_LEDS)	+= led.o

obj-y				+= rcar/
obj-y				+= spi/
obj-y				+= usb/
obj-y				+= softing/
@@ -24,7 +25,6 @@ obj-$(CONFIG_CAN_IFI_CANFD) += ifi_canfd/
obj-$(CONFIG_CAN_JANZ_ICAN3)	+= janz-ican3.o
obj-$(CONFIG_CAN_MSCAN)		+= mscan/
obj-$(CONFIG_CAN_M_CAN)		+= m_can/
obj-$(CONFIG_CAN_RCAR)		+= rcar_can.o
obj-$(CONFIG_CAN_SJA1000)	+= sja1000/
obj-$(CONFIG_CAN_SUN4I)		+= sun4i_can.o
obj-$(CONFIG_CAN_TI_HECC)	+= ti_hecc.o
Loading