[PATCH linux dev-4.7 v2] ARM: dts: aspeed: Modify Laanyang BMC device tree

Joel Stanley joel at jms.id.au
Wed Apr 26 18:15:48 AEST 2017


Hi Ken,

Thank you for your patch. I have some questions below.

On Wed, Apr 26, 2017 at 2:43 PM, Ken Chen <chen.kenyy at inventec.com> wrote:
> Modify Lanyang dts and add lanyang initial in aspeed.c
>
> Signed-off-by: Ken Chen <chen.kenyy at inventec.com>
> ---
>  arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts | 13 +++---
>  arch/arm/mach-aspeed/aspeed.c                | 65 ++++++++++++++++++++++++++++
>  2 files changed, 71 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts b/arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts
> index 176e4b4..6456458 100644
> --- a/arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts
> +++ b/arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts
> @@ -1,4 +1,4 @@
> -/dts-v1/;
> +/dts-v3/;
>
>  #include "aspeed-g5.dtsi"
>  #include <dt-bindings/gpio/aspeed-gpio.h>
> @@ -302,18 +302,17 @@
>  };
>
>  &gpio {
> -       line_apss_reset {
> -               gpio-hog;
> -               gpios = <ASPEED_GPIO(E, 4) GPIO_ACTIVE_HIGH>;
> -               output-high;
> -               line-name = "BMC_APSS_RESET_N";
> -       };
> +
>  };
>
>  &vuart {
>         status = "okay";
>  };
>
> +&gfx {
> +        status = "okay";
> +};
> +
>  &pinctrl {
>         aspeed,external-nodes = <&gfx &lhc>;
>  };
> diff --git a/arch/arm/mach-aspeed/aspeed.c b/arch/arm/mach-aspeed/aspeed.c
> index a7b03a0..b1073e5 100644
> --- a/arch/arm/mach-aspeed/aspeed.c
> +++ b/arch/arm/mach-aspeed/aspeed.c
> @@ -238,6 +238,69 @@ static void __init do_romulus_setup(void)
>      writel(reg & ~BIT(4), AST_IO(AST_BASE_LPC | 0x98));
>  }
>
> +static void __init do_lanyang_setup(void)
> +{
> +        unsigned long reg;
> +        unsigned long board_rev;
> +        /* D3 in GPIOA/B/C/D direction and data registers */
> +        unsigned long phy_reset_mask = BIT(27);
> +
> +        do_common_setup();
> +
> +        /* Read BOARD_REV[4:0] fuses from GPIOM[7:3] */
> +        reg = readl(AST_IO(AST_BASE_GPIO | 0x78));
> +        board_rev = (reg >> 3) & 0x1F;

Can you check that the board uses GPIOM for revision GPIOs? The
version of the schematic that I saw does not.

> +
> +        /* EVT1 hacks */
> +        if (board_rev == 0) {
> +                /* Disable GPIO I, G/AB pulldowns due to weak driving buffers */
> +                reg = readl(AST_IO(AST_BASE_SCU | 0x8C));
> +                writel(reg | BIT(24) | BIT(22), AST_IO(AST_BASE_SCU | 0x8C));
> +        }
> +
> +        /* Disable GPIO H/AC pulldowns to float 1-wire interface pins */
> +        reg = readl(AST_IO(AST_BASE_SCU | 0x8C));
> +        writel(reg | BIT(23), AST_IO(AST_BASE_SCU | 0x8C));
> +
> +        /* Assert MAC2 PHY hardware reset */

It looks like GPIOD3 is not used for PHY hardware reset.

> +        /* Set pin low */
> +        reg = readl(AST_IO(AST_BASE_GPIO | 0x00));
> +        writel(reg & ~phy_reset_mask, AST_IO(AST_BASE_GPIO | 0x00));
> +        /* Enable pin for output */
> +        reg = readl(AST_IO(AST_BASE_GPIO | 0x04));
> +        writel(reg | phy_reset_mask, AST_IO(AST_BASE_GPIO | 0x04));
> +        udelay(3);
> +        /* Set pin high */
> +        reg = readl(AST_IO(AST_BASE_GPIO | 0x00));
> +        writel(reg | phy_reset_mask, AST_IO(AST_BASE_GPIO | 0x00));
> +
> +        /* Setup PNOR address mapping for 64M flash
> +         *
> +         *   ADRBASE: 0x3000 (0x30000000)
> +         *   HWMBASE: 0x0C00 (0x0C000000)
> +         *  ADDRMASK: 0xFC00 (0xFC000000)
> +         *   HWNCARE: 0x03FF (0x03FF0000)
> +         *
> +         * Mapping appears at 0x60300fc000000 on the host
> +         */
> +        writel(0x30000C00, AST_IO(AST_BASE_LPC | 0x88));
> +        writel(0xFC0003FF, AST_IO(AST_BASE_LPC | 0x8C));
> +
> +        /* Set SPI1 CE1 decoding window to 0x34000000 */
> +        writel(0x70680000, AST_IO(AST_BASE_SPI | 0x34));
> +
> +        /* Set SPI1 CE0 decoding window to 0x30000000 */
> +        writel(0x68600000, AST_IO(AST_BASE_SPI | 0x30));

We should not need to do this. mboxd will set them.

Cheers,

Joel

> +
> +        /* Disable default behavior of UART1 being held in reset by LPCRST#.
> +         * By releasing UART1 from being controlled by LPC reset, it becomes
> +         * immediately available regardless of the host being up.
> +         */
> +        reg = readl(AST_IO(AST_BASE_LPC | 0x98));
> +        /* Clear "Enable UART1 reset source from LPC" */
> +        writel(reg & ~BIT(4), AST_IO(AST_BASE_LPC | 0x98));
> +}
> +
>  #define SCU_PASSWORD   0x1688A8A8
>
>  static void __init aspeed_init_early(void)
> @@ -275,6 +338,8 @@ static void __init aspeed_init_early(void)
>                 do_witherspoon_setup();
>         if (of_machine_is_compatible("ibm,romulus-bmc"))
>                 do_romulus_setup();
> +        if (of_machine_is_compatible("inventec,lanyang-bmc"))
> +                do_romulus_setup();
>  }
>
>  static void __init aspeed_map_io(void)
> --
> 2.9.3
>


More information about the openbmc mailing list