Commit d60f314b authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

Merge tag 'aspeed-5.13-lpc' of...

Merge tag 'aspeed-5.13-lpc' of git://git.kernel.org/pub/scm/linux/kernel/git/joel/bmc into arm/drivers

ASPEED LPC updates for 5.13

These patches fix the ASPEED LPC bindings and LPC-related device drivers
so in the future the KCS driver can properly use the hardware.

* tag 'aspeed-5.13-lpc' of git://git.kernel.org/pub/scm/linux/kernel/git/joel/bmc:
  soc: aspeed: Adapt to new LPC device tree layout
  pinctrl: aspeed-g5: Adapt to new LPC device tree layout
  ipmi: kcs: aspeed: Adapt to new LPC DTS layout
  ARM: dts: Remove LPC BMC and Host partitions
  dt-bindings: aspeed-lpc: Remove LPC partitioning

Link: https://lore.kernel.org/r/CACPK8Xcb12LsVr7CUaXXjQskKbVjb7x+jgueG1Hik-kBPWtDSg@mail.gmail.com


Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents 0a8e7330 489774ff
Loading
Loading
Loading
Loading
+25 −75
Original line number Diff line number Diff line
@@ -9,13 +9,7 @@ primary use case of the Aspeed LPC controller is as a slave on the bus
conditions it can also take the role of bus master.

The LPC controller is represented as a multi-function device to account for the
mix of functionality it provides. The principle split is between the register
layout at the start of the I/O space which is, to quote the Aspeed datasheet,
"basically compatible with the [LPC registers from the] popular BMC controller
H8S/2168[1]", and everything else, where everything else is an eclectic
collection of functions with a esoteric register layout. "Everything else",
here labeled the "host" portion of the controller, includes, but is not limited
to:
mix of functionality, which includes, but is not limited to:

* An IPMI Block Transfer[2] Controller

@@ -44,9 +38,9 @@ Required properties
===================

- compatible:	One of:
		"aspeed,ast2400-lpc", "simple-mfd"
		"aspeed,ast2500-lpc", "simple-mfd"
		"aspeed,ast2600-lpc", "simple-mfd"
		"aspeed,ast2400-lpc-v2", "simple-mfd", "syscon"
		"aspeed,ast2500-lpc-v2", "simple-mfd", "syscon"
		"aspeed,ast2600-lpc-v2", "simple-mfd", "syscon"

- reg:		contains the physical address and length values of the Aspeed
                LPC memory region.
@@ -56,68 +50,24 @@ Required properties
- ranges:	Maps 0 to the physical address and length of the LPC memory
                region

Required LPC Child nodes
========================

BMC Node
--------

- compatible:	One of:
		"aspeed,ast2400-lpc-bmc"
		"aspeed,ast2500-lpc-bmc"
		"aspeed,ast2600-lpc-bmc"

- reg:		contains the physical address and length values of the
                H8S/2168-compatible LPC controller memory region

Host Node
---------

- compatible:   One of:
		"aspeed,ast2400-lpc-host", "simple-mfd", "syscon"
		"aspeed,ast2500-lpc-host", "simple-mfd", "syscon"
		"aspeed,ast2600-lpc-host", "simple-mfd", "syscon"

- reg:		contains the address and length values of the host-related
                register space for the Aspeed LPC controller

- #address-cells: <1>
- #size-cells:	<1>
- ranges: 	Maps 0 to the address and length of the host-related LPC memory
                region

Example:

lpc: lpc@1e789000 {
	compatible = "aspeed,ast2500-lpc", "simple-mfd";
	compatible = "aspeed,ast2500-lpc-v2", "simple-mfd", "syscon";
	reg = <0x1e789000 0x1000>;

	#address-cells = <1>;
	#size-cells = <1>;
	ranges = <0x0 0x1e789000 0x1000>;

	lpc_bmc: lpc-bmc@0 {
		compatible = "aspeed,ast2500-lpc-bmc";
	lpc_snoop: lpc-snoop@0 {
		compatible = "aspeed,ast2600-lpc-snoop";
		reg = <0x0 0x80>;
	};

	lpc_host: lpc-host@80 {
		compatible = "aspeed,ast2500-lpc-host", "simple-mfd", "syscon";
		reg = <0x80 0x1e0>;
		reg-io-width = <4>;

		#address-cells = <1>;
		#size-cells = <1>;
		ranges = <0x0 0x80 0x1e0>;
		interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
		snoop-ports = <0x80>;
	};
};

BMC Node Children
==================


Host Node Children
==================

LPC Host Interface Controller
-------------------
@@ -149,15 +99,13 @@ Optional properties:

Example:

lpc-host@80 {
	lpc_ctrl: lpc-ctrl@0 {
lpc_ctrl: lpc-ctrl@80 {
	compatible = "aspeed,ast2500-lpc-ctrl";
		reg = <0x0 0x80>;
	reg = <0x80 0x80>;
	clocks = <&syscon ASPEED_CLK_GATE_LCLK>;
	memory-region = <&flash_memory>;
	flash = <&spi>;
};
};

LPC Host Controller
-------------------
@@ -179,9 +127,9 @@ Required properties:

Example:

lhc: lhc@20 {
lhc: lhc@a0 {
	compatible = "aspeed,ast2500-lhc";
	reg = <0x20 0x24 0x48 0x8>;
	reg = <0xa0 0x24 0xc8 0x8>;
};

LPC reset control
@@ -192,16 +140,18 @@ state of the LPC bus. Some systems may chose to modify this configuration.

Required properties:

 - compatible:		"aspeed,ast2600-lpc-reset" or
			"aspeed,ast2500-lpc-reset"
			"aspeed,ast2400-lpc-reset"
 - compatible:		One of:
			"aspeed,ast2600-lpc-reset";
			"aspeed,ast2500-lpc-reset";
			"aspeed,ast2400-lpc-reset";

 - reg:			offset and length of the IP in the LHC memory region
 - #reset-controller	indicates the number of reset cells expected

Example:

lpc_reset: reset-controller@18 {
lpc_reset: reset-controller@98 {
        compatible = "aspeed,ast2500-lpc-reset";
        reg = <0x18 0x4>;
        reg = <0x98 0x4>;
        #reset-cells = <1>;
};
+31 −45
Original line number Diff line number Diff line
@@ -343,61 +343,47 @@
			};

			lpc: lpc@1e789000 {
				compatible = "aspeed,ast2400-lpc", "simple-mfd";
				compatible = "aspeed,ast2400-lpc-v2", "simple-mfd", "syscon";
				reg = <0x1e789000 0x1000>;

				#address-cells = <1>;
				#size-cells = <1>;
				ranges = <0x0 0x1e789000 0x1000>;

				lpc_bmc: lpc-bmc@0 {
					compatible = "aspeed,ast2400-lpc-bmc";
					reg = <0x0 0x80>;
				};

				lpc_host: lpc-host@80 {
					compatible = "aspeed,ast2400-lpc-host", "simple-mfd", "syscon";
					reg = <0x80 0x1e0>;
				reg-io-width = <4>;

				#address-cells = <1>;
				#size-cells = <1>;
					ranges = <0x0 0x80 0x1e0>;
				ranges = <0x0 0x1e789000 0x1000>;

					lpc_ctrl: lpc-ctrl@0 {
				lpc_ctrl: lpc-ctrl@80 {
					compatible = "aspeed,ast2400-lpc-ctrl";
						reg = <0x0 0x10>;
					reg = <0x80 0x10>;
					clocks = <&syscon ASPEED_CLK_GATE_LCLK>;
					status = "disabled";
				};

					lpc_snoop: lpc-snoop@10 {
				lpc_snoop: lpc-snoop@90 {
					compatible = "aspeed,ast2400-lpc-snoop";
						reg = <0x10 0x8>;
					reg = <0x90 0x8>;
					interrupts = <8>;
					clocks = <&syscon ASPEED_CLK_GATE_LCLK>;
					status = "disabled";
				};

					lhc: lhc@20 {
				lhc: lhc@a0 {
					compatible = "aspeed,ast2400-lhc";
						reg = <0x20 0x24 0x48 0x8>;
					reg = <0xa0 0x24 0xc8 0x8>;
				};

					lpc_reset: reset-controller@18 {
				lpc_reset: reset-controller@98 {
					compatible = "aspeed,ast2400-lpc-reset";
						reg = <0x18 0x4>;
					reg = <0x98 0x4>;
					#reset-cells = <1>;
				};

					ibt: ibt@c0  {
				ibt: ibt@140 {
					compatible = "aspeed,ast2400-ibt-bmc";
						reg = <0xc0 0x18>;
					reg = <0x140 0x18>;
					interrupts = <8>;
					status = "disabled";
				};
			};
			};

			uart2: serial@1e78d000 {
				compatible = "ns16550a";
+60 −77
Original line number Diff line number Diff line
@@ -434,21 +434,13 @@
			};

			lpc: lpc@1e789000 {
				compatible = "aspeed,ast2500-lpc", "simple-mfd";
				compatible = "aspeed,ast2500-lpc-v2", "simple-mfd", "syscon";
				reg = <0x1e789000 0x1000>;

				#address-cells = <1>;
				#size-cells = <1>;
				ranges = <0x0 0x1e789000 0x1000>;

				lpc_bmc: lpc-bmc@0 {
					compatible = "aspeed,ast2500-lpc-bmc", "simple-mfd", "syscon";
					reg = <0x0 0x80>;
				reg-io-width = <4>;

				#address-cells = <1>;
				#size-cells = <1>;
					ranges = <0x0 0x0 0x80>;
				ranges = <0x0 0x1e789000 0x1000>;

				kcs1: kcs@24 {
					compatible = "aspeed,ast2500-kcs-bmc-v2";
@@ -456,71 +448,62 @@
					interrupts = <8>;
					status = "disabled";
				};

				kcs2: kcs@28 {
					compatible = "aspeed,ast2500-kcs-bmc-v2";
					reg = <0x28 0x1>, <0x34 0x1>, <0x40 0x1>;
					interrupts = <8>;
					status = "disabled";
				};

				kcs3: kcs@2c {
					compatible = "aspeed,ast2500-kcs-bmc-v2";
					reg = <0x2c 0x1>, <0x38 0x1>, <0x44 0x1>;
					interrupts = <8>;
					status = "disabled";
				};
				};

				lpc_host: lpc-host@80 {
					compatible = "aspeed,ast2500-lpc-host", "simple-mfd", "syscon";
					reg = <0x80 0x1e0>;
					reg-io-width = <4>;

					#address-cells = <1>;
					#size-cells = <1>;
					ranges = <0x0 0x80 0x1e0>;

					kcs4: kcs@94 {
				kcs4: kcs@114 {
					compatible = "aspeed,ast2500-kcs-bmc-v2";
						reg = <0x94 0x1>, <0x98 0x1>, <0x9c 0x1>;
					reg = <0x114 0x1>, <0x118 0x1>, <0x11c 0x1>;
					interrupts = <8>;
					status = "disabled";
				};

					lpc_ctrl: lpc-ctrl@0 {
				lpc_ctrl: lpc-ctrl@80 {
					compatible = "aspeed,ast2500-lpc-ctrl";
						reg = <0x0 0x10>;
					reg = <0x80 0x10>;
					clocks = <&syscon ASPEED_CLK_GATE_LCLK>;
					status = "disabled";
				};

					lpc_snoop: lpc-snoop@10 {
				lpc_snoop: lpc-snoop@90 {
					compatible = "aspeed,ast2500-lpc-snoop";
						reg = <0x10 0x8>;
					reg = <0x90 0x8>;
					interrupts = <8>;
					clocks = <&syscon ASPEED_CLK_GATE_LCLK>;
					status = "disabled";
				};

					lpc_reset: reset-controller@18 {
				lpc_reset: reset-controller@98 {
					compatible = "aspeed,ast2500-lpc-reset";
						reg = <0x18 0x4>;
					reg = <0x98 0x4>;
					#reset-cells = <1>;
				};

					lhc: lhc@20 {
				lhc: lhc@a0 {
					compatible = "aspeed,ast2500-lhc";
						reg = <0x20 0x24 0x48 0x8>;
					reg = <0xa0 0x24 0xc8 0x8>;
				};


					ibt: ibt@c0 {
				ibt: ibt@140 {
					compatible = "aspeed,ast2500-ibt-bmc";
						reg = <0xc0 0x18>;
					reg = <0x140 0x18>;
					interrupts = <8>;
					status = "disabled";
				};
			};
			};

			uart2: serial@1e78d000 {
				compatible = "ns16550a";
+60 −77
Original line number Diff line number Diff line
@@ -460,21 +460,13 @@
			};

			lpc: lpc@1e789000 {
				compatible = "aspeed,ast2600-lpc", "simple-mfd";
				compatible = "aspeed,ast2600-lpc-v2", "simple-mfd", "syscon";
				reg = <0x1e789000 0x1000>;

				#address-cells = <1>;
				#size-cells = <1>;
				ranges = <0x0 0x1e789000 0x1000>;

				lpc_bmc: lpc-bmc@0 {
					compatible = "aspeed,ast2600-lpc-bmc", "simple-mfd", "syscon";
					reg = <0x0 0x80>;
				reg-io-width = <4>;

				#address-cells = <1>;
				#size-cells = <1>;
					ranges = <0x0 0x0 0x80>;
				ranges = <0x0 0x1e789000 0x1000>;

				kcs1: kcs@24 {
					compatible = "aspeed,ast2500-kcs-bmc-v2";
@@ -483,70 +475,61 @@
					kcs_chan = <1>;
					status = "disabled";
				};

				kcs2: kcs@28 {
					compatible = "aspeed,ast2500-kcs-bmc-v2";
					reg = <0x28 0x1>, <0x34 0x1>, <0x40 0x1>;
					interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
					status = "disabled";
				};

				kcs3: kcs@2c {
					compatible = "aspeed,ast2500-kcs-bmc-v2";
					reg = <0x2c 0x1>, <0x38 0x1>, <0x44 0x1>;
					interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
					status = "disabled";
				};
				};

				lpc_host: lpc-host@80 {
					compatible = "aspeed,ast2600-lpc-host", "simple-mfd", "syscon";
					reg = <0x80 0x1e0>;
					reg-io-width = <4>;

					#address-cells = <1>;
					#size-cells = <1>;
					ranges = <0x0 0x80 0x1e0>;

					kcs4: kcs@94 {
				kcs4: kcs@114 {
					compatible = "aspeed,ast2500-kcs-bmc-v2";
						reg = <0x94 0x1>, <0x98 0x1>, <0x9c 0x1>;
					reg = <0x114 0x1>, <0x118 0x1>, <0x11c 0x1>;
					interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
					status = "disabled";
				};

					lpc_ctrl: lpc-ctrl@0 {
				lpc_ctrl: lpc-ctrl@80 {
					compatible = "aspeed,ast2600-lpc-ctrl";
						reg = <0x0 0x80>;
					reg = <0x80 0x80>;
					clocks = <&syscon ASPEED_CLK_GATE_LCLK>;
					status = "disabled";
				};

					lpc_snoop: lpc-snoop@0 {
				lpc_snoop: lpc-snoop@80 {
					compatible = "aspeed,ast2600-lpc-snoop";
						reg = <0x0 0x80>;
					reg = <0x80 0x80>;
					interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
					clocks = <&syscon ASPEED_CLK_GATE_LCLK>;
					status = "disabled";
				};

					lhc: lhc@20 {
				lhc: lhc@a0 {
					compatible = "aspeed,ast2600-lhc";
						reg = <0x20 0x24 0x48 0x8>;
					reg = <0xa0 0x24 0xc8 0x8>;
				};

					lpc_reset: reset-controller@18 {
				lpc_reset: reset-controller@98 {
					compatible = "aspeed,ast2600-lpc-reset";
						reg = <0x18 0x4>;
					reg = <0x98 0x4>;
					#reset-cells = <1>;
				};

					ibt: ibt@c0 {
				ibt: ibt@140 {
					compatible = "aspeed,ast2600-ibt-bmc";
						reg = <0xc0 0x18>;
					reg = <0x140 0x18>;
					interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
					status = "disabled";
				};
			};
			};

			sdc: sdc@1e740000 {
				compatible = "aspeed,ast2600-sd-controller";
+16 −11
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@

#define KCS_CHANNEL_MAX     4

/* mapped to lpc-bmc@0 IO space */
#define LPC_HICR0            0x000
#define     LPC_HICR0_LPC3E          BIT(7)
#define     LPC_HICR0_LPC2E          BIT(6)
@@ -52,15 +51,13 @@
#define LPC_STR1             0x03C
#define LPC_STR2             0x040
#define LPC_STR3             0x044

/* mapped to lpc-host@80 IO space */
#define LPC_HICRB            0x080
#define LPC_HICRB            0x100
#define     LPC_HICRB_IBFIF4         BIT(1)
#define     LPC_HICRB_LPC4E          BIT(0)
#define LPC_LADR4            0x090
#define LPC_IDR4             0x094
#define LPC_ODR4             0x098
#define LPC_STR4             0x09C
#define LPC_LADR4            0x110
#define LPC_IDR4             0x114
#define LPC_ODR4             0x118
#define LPC_STR4             0x11C

struct aspeed_kcs_bmc {
	struct regmap *map;
@@ -348,7 +345,15 @@ static int aspeed_kcs_probe(struct platform_device *pdev)
	struct device_node *np;
	int rc;

	np = pdev->dev.of_node;
	np = dev->of_node->parent;
	if (!of_device_is_compatible(np, "aspeed,ast2400-lpc-v2") &&
	    !of_device_is_compatible(np, "aspeed,ast2500-lpc-v2") &&
	    !of_device_is_compatible(np, "aspeed,ast2600-lpc-v2")) {
		dev_err(dev, "unsupported LPC device binding\n");
		return -ENODEV;
	}

	np = dev->of_node;
	if (of_device_is_compatible(np, "aspeed,ast2400-kcs-bmc") ||
	    of_device_is_compatible(np, "aspeed,ast2500-kcs-bmc"))
		kcs_bmc = aspeed_kcs_probe_of_v1(pdev);
Loading