[PATCH linux dev-4.10 v2] ARM: aspeed: Add Mellanox MSN machine
Cédric Le Goater
clg at kaod.org
Fri May 26 20:59:04 AEST 2017
On 05/26/2017 06:43 AM, Joel Stanley wrote:
> Andrew, can you please review the pinmux-y bits?
>
> Cedric, can you double check the mtd bits?
There is the SMC controller flash mapping window on the AHB Bus,
which would need a fix but it requires CONFIG_VMSPLIT_2G.
The clocks need to be defined :
clocks = <&clk_ahb>;
clock-names = "ahb";
to optimize the reads and also :
m25p,fast-read;
Cheers,
C.
> On Fri, May 26, 2017 at 12:49 AM, Mykola Kostenok
> <c_mykolak at mellanox.com> wrote:
>> Initial introduction of Mellanox switches of MSNXXXX family equipped
>> with Aspeed 2520 BMC SoC. This adds the platform early initialization
>> and msn platform device tree file.
>>
>> Signed-off-by: Mykola Kostenok <c_mykolak at mellanox.com>
>> ---
>> v1->v2
>> Fixed issues pointed out by Joel:
>> - Make commit title shorter.
>> - Replace flash layout from separate dtsi to dts.
>> - Change compatible = "mellanox,msnxxxx-bmc" to "mellanox,msn-bmc".
>> - Remove no-hw-checksum from dts.
>> - Add comments.
>> - Remove WD2 disable from aspeed.c
>> - Add wdt2 to dts.
>
> Looking good!
>
> Sorry for not getting back to you with some of your questions.
>
> I think it's okay to have the flash layout in the separate dtsi in the future.
>
> In general when submitting patches for the kernel we want to have
> separate patches for different parts of the system, one to add the
> device tree, one to add the aspeed.c changes, and another for the
> defconfigs. Just keep that in mind for next time.
>
>> ---
>> .../devicetree/bindings/vendor-prefixes.txt | 1 +
>> arch/arm/boot/dts/Makefile | 1 +
>> arch/arm/boot/dts/aspeed-bmc-mellanox-msn.dts | 239 +++++++++++++++++++++
>> arch/arm/configs/aspeed_g5_defconfig | 2 +
>> arch/arm/mach-aspeed/aspeed.c | 23 ++
>> 5 files changed, 266 insertions(+)
>> create mode 100644 arch/arm/boot/dts/aspeed-bmc-mellanox-msn.dts
>>
>> diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
>> index 16d3b5e7f5d1..84601d869a1b 100644
>> --- a/Documentation/devicetree/bindings/vendor-prefixes.txt
>> +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
>> @@ -172,6 +172,7 @@ meas Measurement Specialties
>> mediatek MediaTek Inc.
>> melexis Melexis N.V.
>> melfas MELFAS Inc.
>> +mellanox Mellanox Technologies
>> memsic MEMSIC Inc.
>> merrii Merrii Technology Co., Ltd.
>> micrel Micrel Inc.
>> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
>> index 30fe65627f30..3dba6c633686 100644
>> --- a/arch/arm/boot/dts/Makefile
>> +++ b/arch/arm/boot/dts/Makefile
>> @@ -990,6 +990,7 @@ dtb-$(CONFIG_ARCH_ASPEED) += aspeed-bmc-opp-palmetto.dtb \
>> aspeed-bmc-opp-witherspoon.dtb \
>> aspeed-bmc-opp-zaius.dtb \
>> aspeed-bmc-opp-lanyang.dtb \
>> + aspeed-bmc-mellanox-msn.dtb \
>> aspeed-ast2500-evb.dtb
>> endif
>>
>> diff --git a/arch/arm/boot/dts/aspeed-bmc-mellanox-msn.dts b/arch/arm/boot/dts/aspeed-bmc-mellanox-msn.dts
>> new file mode 100644
>> index 000000000000..a29b279b4f40
>> --- /dev/null
>> +++ b/arch/arm/boot/dts/aspeed-bmc-mellanox-msn.dts
>> @@ -0,0 +1,239 @@
>> +/dts-v1/;
>> +
>> +#include <dt-bindings/thermal/thermal.h>
>> +#include <dt-bindings/pwm/pwm.h>
>> +#include <dt-bindings/gpio/gpio.h>
>> +#include <dt-bindings/interrupt-controller/irq.h>
>
> I don't think you're using any defines from these headers. You can
> remove the includes.
>
>> +#include <dt-bindings/gpio/aspeed-gpio.h>
>> +#include "aspeed-g5.dtsi"
>> +
>> +/ {
>> + model = "MSN BMC";
>> + compatible = "mellanox,msn-bmc", "aspeed,ast2500";
>> +
>> + aliases {
>> + serial0 = &uart1;
>> + serial4 = &uart5;
>> + };
>> +
>> + chosen {
>> + stdout-path = &uart5;
>> + bootargs = "console=ttyS4,115200n8 earlyprintk";
>> + };
>> +
>> + memory {
>> + /* 512MiB SDRAM DDR4 @ 0x8000_0000 */
>> + reg = <0x80000000 0x20000000>;
>> + };
>> +
>> + ahb {
>> + bmc_pnor: fmc at 1e620000 {
>> + reg = < 0x1e620000 0xc4
>> + 0x20000000 0x02000000 >;
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> + compatible = "aspeed,ast2500-fmc";
>> + interrupts = <19>;
>> + flash at 0 {
>> + reg = < 0 >;
>> + compatible = "jedec,spi-nor" ;
>> + label = "bmc";
>> + #address-cells = < 1 >;
>> + #size-cells = < 1 >;
>> + u-boot {
>> + reg = < 0 0x60000 >;
>> + label = "u-boot";
>> + };
>> + u-boot-env {
>> + reg = < 0x60000 0x10000>;
>> + label = "u-boot-env";
>> + };
>> + kernel {
>> + reg = < 0x70000 0x280000 >;
>> + label = "kernel";
>> + };
>> + dtb {
>> + reg = < 0x2f0000 0x10000 >;
>> + label = "dtb";
>> + };
>> + initramfs {
>> + reg = < 0x300000 0x1c0000 >;
>> + label = "initramfs";
>> + };
>> + rofs {
>> + reg = < 0x4c0000 0x1740000 >;
>> + label = "rofs";
>> + };
>> + rwfs {
>> + reg = < 0x1c00000 0x400000 >;
>> + label = "rwfs";
>> + };
>> + };
>> + };
>> +
>> + host_pnor: spi2 at 1e631000 {
>> + reg = < 0x1e631000 0xc4
>> + 0x38000000 0x08000000 >;
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> + compatible = "aspeed,ast2500-spi";
>> + status = "disabled";
>
> As this is disabled it has no affect. You can remove the entire host_pnor node.
>
>> + pinctrl-names = "default";
>> + pinctrl-0 = <&pinctrl_spi2ck_default
>> + &pinctrl_spi2cs0_default
>> + &pinctrl_spi2miso_default
>> + &pinctrl_spi2mosi_default>;
>> +
>> + host_flash {
>> + reg = < 0 >;
>> + compatible = "jedec,spi-nor";
>> + label = "host_flash";
>> + #address-cells = < 1 >;
>> + #size-cells = < 1 >;
>> + };
>> + };
>> + };
>> +};
>> +
>> +&uart5 {
>> + status = "okay";
>> +};
>> +
>> +&uart1 {
>> + status = "okay";
>
> You need to request the pins from pinmux. If you'e got all of the
> RS-232 lines connected, that will look like this:
>
> pinctrl-names = "default";
> pinctrl-0 = <&pinctrl_txd1_default
> &pinctrl_rxd1_default
> &pinctrl_nrts1_default
> &pinctrl_ndtr1_default
> &pinctrl_ndsr1_default
> &pinctrl_ncts1_default
> &pinctrl_ndcd1_default
> &pinctrl_nri1_default>;
>
> You may just have the tx and rx lines connected, in which case it
> would look like this:
>
> pinctrl-names = "default";
> pinctrl-0 = <&pinctrl_txd1_default
> &pinctrl_rxd1_default>;
>
> You will need to check your schematic to work that out.
>
>> +};
>> +
>> +&mac0 {
>> + status = "okay";
>> + use-ncsi;
>> +};
>> +
>> +&i2c0 {
>> + status = "okay";
>> +};
>> +
>> +&i2c1 {
>> + status = "okay";
>> +};
>> +
>> +&i2c2 {
>> + status = "okay";
>> +};
>> +
>> +&i2c3 {
>> + status = "okay";
>> +};
>> +
>> +&i2c4 {
>> + status = "okay";
>> +};
>
>
> I assume you're enabling these i2c buses so you can use them from userspace?
>
>> +
>> +&i2c5 {
>> + status = "okay";
>> +
>> + eeprom at 50 {
>> + compatible = "atmel,24c32";
>> + reg = <0x50>;
>> + };
>> +
>> + eeprom at 51 {
>> + compatible = "atmel,24c32";
>> + reg = <0x51>;
>> + };
>> +};
>> +
>> +&i2c6 {
>> + status = "okay";
>> +
>> + eeprom at 51 {
>> + compatible = "atmel,24c32";
>> + reg = <0x51>;
>> + };
>> +
>> + eeprom at 52 {
>> + compatible = "atmel,24c32";
>> + reg = <0x52>;
>> + };
>> +
>> + eeprom at 55 {
>> + compatible = "atmel,24c32";
>> + reg = <0x55>;
>> + };
>> +
>> + i2cswitch at 71 {
>> + compatible = "nxp,pca9548";
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> + reg = <0x71>;
>> + };
>> +};
>> +
>> +&i2c7 {
>> + status = "okay";
>> +};
>> +
>> +&i2c8 {
>> + status = "okay";
>> +
>> + carrier_ambient: lm75 at 49 {
>> + #thermal-sensor-cells = <0>;
>> + compatible = "national,lm75";
>> + reg = <0x49>;
>> + };
>> +
>> + swbrd_ambient: lm75 at 4a {
>> + #thermal-sensor-cells = <0>;
>> + compatible = "national,lm75";
>> + reg = <0x4a>;
>> + };
>> +};
>> +
>> +&i2c9 {
>> + status = "okay";
>> +};
>> +
>> +&i2c10 {
>> + status = "okay";
>> +
>> + hwmon at 41 {
>> + compatible = "ti,ucd9224";
>> + reg = <0x41>;
>> + };
>> +
>> + hwmon at 27 {
>> + compatible = "ti,ucd9224";
>> + reg = <0x27>;
>> + };
>> +
>> + adc at 6d {
>> + compatible = "maxim,max11603";
>> + reg = <0x6d>;
>> + adc0: iio-device at 0 {
>> + #io-channel-cells = <1>;
>> + io-channels = <&adc0 0>, <&adc0 1>, <&adc0 2>,
>> + <&adc0 3>, <&adc0 4>, <&adc0 5>,
>> + <&adc0 6>, <&adc0 7>;
>> + };
>> + };
>> +};
>> +
>> +&i2c11 {
>> + status = "okay";
>> +};
>> +
>> +&i2c12 {
>> + status = "okay";
>> +};
>> +
>> +&i2c13 {
>> + status = "okay";
>> +};
>> +
>> +&vuart {
>> + status = "okay";
>> +};
>> +
>> +&wdt2 {
>> + status = "okay";
>> +};
>> +
>> diff --git a/arch/arm/configs/aspeed_g5_defconfig b/arch/arm/configs/aspeed_g5_defconfig
>> index d0deda45f55b..49a270266fd9 100644
>> --- a/arch/arm/configs/aspeed_g5_defconfig
>> +++ b/arch/arm/configs/aspeed_g5_defconfig
>> @@ -140,6 +140,7 @@ CONFIG_PMBUS=y
>> CONFIG_SENSORS_ADM1275=y
>> CONFIG_SENSORS_LM25066=y
>> CONFIG_SENSORS_UCD9000=y
>> +CONFIG_SENSORS_UCD9200=y
>> CONFIG_SENSORS_TMP421=y
>> CONFIG_USB=y
>> CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
>> @@ -164,6 +165,7 @@ CONFIG_MAILBOX=y
>> CONFIG_ASPEED_LPC_MBOX=y
>> # CONFIG_IOMMU_SUPPORT is not set
>> CONFIG_IIO=y
>> +CONFIG_MAX1363=y
>> CONFIG_ASPEED_ADC=y
>> CONFIG_BMP280=y
>> CONFIG_FSI=y
>> diff --git a/arch/arm/mach-aspeed/aspeed.c b/arch/arm/mach-aspeed/aspeed.c
>> index 0f1a536ba1b2..942cdffed9bd 100644
>> --- a/arch/arm/mach-aspeed/aspeed.c
>> +++ b/arch/arm/mach-aspeed/aspeed.c
>> @@ -188,6 +188,27 @@ static void __init do_lanyang_setup(void)
>> writel(reg & ~BIT(4), AST_IO(AST_BASE_LPC | 0x98));
>> }
>>
>> +static void __init do_mellanox_setup(void)
>> +{
>> + unsigned long reg;
>> +
>> + do_common_setup();
>> +
>> + /* Set strap to RGMII for dedicated PHY networking */
>> + reg = readl(AST_IO(AST_BASE_SCU | 0x70));
>> + reg |= BIT(7);
>> + reg &= ~BIT(6);
>> + writel(reg, AST_IO(AST_BASE_SCU | 0x70));
>> +
>> + /* Disable UART1 Reset from LPC */
>> + writel(0x00000A00, AST_IO(AST_BASE_LPC | 0x98));
>> +
>> + /* Enable RMII1 50MHz RCLK output.*/
>> + reg = readl(AST_IO(AST_BASE_SCU | 0x48));
>> + reg |= BIT(29);
>> + writel(reg, AST_IO(AST_BASE_SCU | 0x48));
>> +}
>> +
>> #define SCU_PASSWORD 0x1688A8A8
>>
>> static void __init aspeed_init_early(void)
>> @@ -227,6 +248,8 @@ static void __init aspeed_init_early(void)
>> do_romulus_setup();
>> if (of_machine_is_compatible("inventec,lanyang-bmc"))
>> do_lanyang_setup();
>> + if (of_machine_is_compatible("mellanox,msn-bmc"))
>> + do_mellanox_setup();
>> }
>>
>> static void __init aspeed_map_io(void)
>> --
>> 2.11.0
>>
More information about the openbmc
mailing list