[PATCH v3] arm: kirkwood: nas220: Add DM Ethernet, SATA, GPIO
Hajo Noerenberg
hajo-uboot at noerenberg.de
Wed Mar 9 14:42:33 CET 2022
On 09.03.2022 at 12:26 Tony Dinh wrote:
> Hi Hajo,
>
Hi Tony,
> On Wed, Mar 9, 2022 at 1:27 AM Hajo Noerenberg <hajo-uboot at noerenberg.de> wrote:
>>
>> Bring the NAS220 board up to current standards. This is basically an adaptation of the changes Tony Dinh implemented for the Dockstar board.
>>
>> - Implement the changes to v2 as suggested by Stefan Roese
>> - Add CONFIG_SUPPORT_PASSING_ATAGS et al, otherwise standard Debian flash-kernel pkg is unable to start kernel
>
> I believe CONFIG_SUPPORT_PASSING_ATAGS should no longer be needed.
> Debian mainline kernels have been device-tree based for quite some
> time. Perhaps it is the flash-kernel package that needs to be looked
> at (maybe it failed to include the NAS220 DTB?). FWIW, I have been
> running a custom Debian Kirkwood kernel (with other Kirkwood boards)
> for many years with u-boots that don't have the ATAGS option enabled.
>
I personally am a big friend of distributions running without changes, i.e. no modified kernel or similar, and full update support for everything. So I vote to keep ATAGS support and change this later in line with the distribution.
Note: My knowledge of ATAGS and so on is quite limited, so if in doubt I would follow your thoughts, but would like to consider the above.
For reference, this is the relevant part from the flash-kernel database, other Kirkwood devices (e.g. Dockstar) seem to have different settings:
Machine: Seagate Blackarmor NAS220
Kernel-Flavors: kirkwood marvell
DTB-Id: kirkwood-blackarmor-nas220.dtb
DTB-Append: yes
Mtd-Kernel: uimage
Mtd-Initrd: rootfs
U-Boot-Kernel-Address: 0x00040000
U-Boot-Initrd-Address: 0x00800000
Required-Packages: u-boot-tools
Machine: Seagate FreeAgent Dockstar
Machine: Seagate FreeAgent DockStar
Kernel-Flavors: kirkwood marvell
DTB-Id: kirkwood-dockstar.dtb
DTB-Append: yes
U-Boot-Kernel-Address: 0x00008000
U-Boot-Initrd-Address: 0x0
Boot-Kernel-Path: /boot/uImage
Boot-Initrd-Path: /boot/uInitrd
Boot-DTB-Path: /boot/dtb
Required-Packages: u-boot-tools
Kind regards,
Hajo
>> - Add CONFIG_SYS_64BIT_LBA, basic read tests with a 4TB hdd succeed with my NAS220 hardware
>>
>> - Thanks to Stefan and Tony
>>
>>
>> Signed-off-by: Hajo Noerenberg <hajo-uboot at noerenberg.de>
>> ---
>> board/Seagate/nas220/MAINTAINERS | 1 +
>> board/Seagate/nas220/nas220.c | 68 +++++++++++---------------------
>> configs/nas220_defconfig | 16 +++++++-
>> include/configs/nas220.h | 35 ++++++----------
>> 4 files changed, 49 insertions(+), 71 deletions(-)
>>
>> diff --git a/board/Seagate/nas220/MAINTAINERS b/board/Seagate/nas220/MAINTAINERS
>> index f2df7ea64f..6033f93cf4 100644
>> --- a/board/Seagate/nas220/MAINTAINERS
>> +++ b/board/Seagate/nas220/MAINTAINERS
>> @@ -4,3 +4,4 @@ S: Maintained
>> F: board/Seagate/nas220/
>> F: include/configs/nas220.h
>> F: configs/nas220_defconfig
>> +F: arch/arm/dts/kirkwood-blackarmor-nas220.dts
>> diff --git a/board/Seagate/nas220/nas220.c b/board/Seagate/nas220/nas220.c
>> index cd2bbdad1c..fdbf321ff9 100644
>> --- a/board/Seagate/nas220/nas220.c
>> +++ b/board/Seagate/nas220/nas220.c
>> @@ -10,17 +10,22 @@
>>
>> #include <common.h>
>> #include <init.h>
>> -#include <miiphy.h>
>> -#include <net.h>
>> -#include <asm/global_data.h>
>> -#include <asm/mach-types.h>
>> +#include <netdev.h>
>> +#include <asm/arch/cpu.h>
>> #include <asm/arch/soc.h>
>> #include <asm/arch/mpp.h>
>> -#include <asm/arch/cpu.h>
>> -#include <asm/io.h>
>> +#include <asm/global_data.h>
>> +#include <asm/mach-types.h>
>> +#include <linux/bitops.h>
>>
>> DECLARE_GLOBAL_DATA_PTR;
>>
>> +/* blue power led, board power, sata0, sata1 */
>> +#define NAS220_GE_OE_LOW (~(BIT(12) | BIT(14) | BIT(24) | BIT(28)))
>> +#define NAS220_GE_OE_HIGH (~(0))
>> +#define NAS220_GE_OE_VAL_LOW (BIT(12) | BIT(14) | BIT(24) | BIT(28))
>> +#define NAS220_GE_OE_VAL_HIGH (0)
>> +
>> int board_early_init_f(void)
>> {
>> /*
>> @@ -43,9 +48,9 @@ int board_early_init_f(void)
>> MPP9_TW_SCK,
>> MPP10_UART0_TXD,
>> MPP11_UART0_RXD,
>> - MPP12_GPO,
>> + MPP12_GPO, /* blue power led */
>> MPP13_GPIO,
>> - MPP14_GPIO,
>> + MPP14_GPIO, /* board power */
>> MPP15_SATA0_ACTn,
>> MPP16_SATA1_ACTn,
>> MPP17_SATA0_PRESENTn,
>> @@ -55,12 +60,12 @@ int board_early_init_f(void)
>> MPP21_GPIO,
>> MPP22_GPIO,
>> MPP23_GPIO,
>> - MPP24_GPIO,
>> + MPP24_GPIO, /* sata0 power */
>> MPP25_GPIO,
>> - MPP26_GPIO,
>> + MPP26_GPIO, /* power button */
>> MPP27_GPIO,
>> - MPP28_GPIO,
>> - MPP29_GPIO,
>> + MPP28_GPIO, /* sata1 power */
>> + MPP29_GPIO, /* reset button */
>> MPP30_GPIO,
>> MPP31_GPIO,
>> MPP32_GPIO,
>> @@ -73,6 +78,11 @@ int board_early_init_f(void)
>> return 0;
>> }
>>
>> +int board_eth_init(struct bd_info *bis)
>> +{
>> + return cpu_eth_init(bis);
>> +}
>> +
>> int board_init(void)
>> {
>> /*
>> @@ -85,37 +95,3 @@ int board_init(void)
>>
>> return 0;
>> }
>> -
>> -#ifdef CONFIG_RESET_PHY_R
>> -/* Configure and enable MV88E1116 PHY */
>> -void reset_phy(void)
>> -{
>> - u16 reg;
>> - u16 devadr;
>> - char *name = "egiga0";
>> -
>> - if (miiphy_set_current_dev(name))
>> - return;
>> -
>> - /* command to read PHY dev address */
>> - if (miiphy_read(name, 0xEE, 0xEE, (u16 *)&devadr)) {
>> - printf("Err..%s could not read PHY dev address\n", __func__);
>> - return;
>> - }
>> -
>> - /*
>> - * Enable RGMII delay on Tx and Rx for CPU port
>> - * Ref: sec 4.7.2 of chip datasheet
>> - */
>> - miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
>> - miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, ®);
>> - reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
>> - miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg);
>> - miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
>> -
>> - /* reset the phy */
>> - miiphy_reset(name, devadr);
>> -
>> - printf("88E1116 Initialized on %s\n", name);
>> -}
>> -#endif /* CONFIG_RESET_PHY_R */
>> diff --git a/configs/nas220_defconfig b/configs/nas220_defconfig
>> index f6a1dcbee0..5bf1233273 100644
>> --- a/configs/nas220_defconfig
>> +++ b/configs/nas220_defconfig
>> @@ -3,6 +3,9 @@ CONFIG_SKIP_LOWLEVEL_INIT=y
>> CONFIG_SYS_DCACHE_OFF=y
>> CONFIG_ARCH_CPU_INIT=y
>> CONFIG_ARCH_KIRKWOOD=y
>> +CONFIG_SUPPORT_PASSING_ATAGS=y
>> +CONFIG_CMDLINE_TAG=y
>> +CONFIG_INITRD_TAG=y
>> CONFIG_SYS_KWD_CONFIG="board/Seagate/nas220/kwbimage.cfg"
>> CONFIG_SYS_TEXT_BASE=0x600000
>> CONFIG_NR_DRAM_BANKS=2
>> @@ -20,7 +23,7 @@ CONFIG_USE_PREBOOT=y
>> CONFIG_HUSH_PARSER=y
>> CONFIG_SYS_PROMPT="nas220> "
>> # CONFIG_CMD_FLASH is not set
>> -CONFIG_CMD_IDE=y
>> +CONFIG_CMD_SATA=y
>> CONFIG_CMD_NAND=y
>> CONFIG_CMD_USB=y
>> # CONFIG_CMD_SETEXPR is not set
>> @@ -32,6 +35,7 @@ CONFIG_CMD_EXT4=y
>> CONFIG_CMD_FAT=y
>> CONFIG_CMD_JFFS2=y
>> CONFIG_CMD_MTDPARTS=y
>> +CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:0xa0000 at 0x0(uboot),0x010000 at 0xa0000(env),0x500000 at 0xc0000(uimage),0x1a40000 at 0x5c0000(rootfs)"
>> CONFIG_CMD_UBI=y
>> CONFIG_ISO_PARTITION=y
>> CONFIG_EFI_PARTITION=y
>> @@ -47,11 +51,21 @@ CONFIG_SYS_ATA_DATA_OFFSET=0x100
>> CONFIG_SYS_ATA_REG_OFFSET=0x100
>> CONFIG_SYS_ATA_ALT_OFFSET=0x100
>> CONFIG_KIRKWOOD_GPIO=y
>> +CONFIG_MVEBU_GPIO=y
>> +CONFIG_GPIO_EXTRA_HEADER=y
>> +CONFIG_DM_GPIO=y
>> +CONFIG_CMD_GPIO=y
>> +CONFIG_GPIO=y
>> +CONFIG_DM_GPIO_LOOKUP_LABEL=y
>> # CONFIG_MMC is not set
>> CONFIG_MTD=y
>> CONFIG_MTD_RAW_NAND=y
>> +CONFIG_PHY_MARVELL=y
>> +CONFIG_DM_ETH=y
>> CONFIG_MVGBE=y
>> CONFIG_MII=y
>> +CONFIG_SATA_MV=y
>> +CONFIG_SYS_SATA_MAX_DEVICE=2
>> CONFIG_DM_RTC=y
>> CONFIG_RTC_MV=y
>> CONFIG_SYS_NS16550=y
>> diff --git a/include/configs/nas220.h b/include/configs/nas220.h
>> index 815f81f649..4c20245e5f 100644
>> --- a/include/configs/nas220.h
>> +++ b/include/configs/nas220.h
>> @@ -11,50 +11,37 @@
>> #ifndef _CONFIG_NAS220_H
>> #define _CONFIG_NAS220_H
>>
>> -/* power-on led, regulator, sata0, sata1 */
>> -#define NAS220_GE_OE_VAL_LOW ((1 << 12)|(1 << 14)|(1 << 24)|(1 << 28))
>> -#define NAS220_GE_OE_VAL_HIGH (0)
>> -#define NAS220_GE_OE_LOW (~((1 << 12)|(1 << 14)|(1 << 24)|(1 << 28)))
>> -#define NAS220_GE_OE_HIGH (~(0))
>> -
>> -/* PHY related */
>> -#define MV88E1116_LED_FCTRL_REG 10
>> -#define MV88E1116_CPRSP_CR3_REG 21
>> -#define MV88E1116_MAC_CTRL_REG 21
>> -#define MV88E1116_PGADR_REG 22
>> -#define MV88E1116_RGMII_TXTM_CTRL (1 << 4)
>> -#define MV88E1116_RGMII_RXTM_CTRL (1 << 5)
>> -
>> -#include "mv-common.h"
>> -
>> /*
>> - * Environment variables configurations
>> + * mv-common.h should be defined after CMD configs since it used them
>> + * to enable certain macros
>> */
>>
>> +#include "mv-common.h"
>> +
>> /*
>> * Default environment variables
>> */
>>
>> #define CONFIG_EXTRA_ENV_SETTINGS \
>> "bootargs=console=ttyS0,115200\0" \
>> - "mtdparts=mtdparts=orion_nand:0xa0000 at 0x0(uboot),"\
>> - "0x010000 at 0xa0000(env),"\
>> - "0x500000 at 0xc0000(uimage),"\
>> - "0x1a40000 at 0x5c0000(rootfs)\0" \
>> "mtdids=nand0=orion_nand\0"\
>> + "mtdparts=" CONFIG_MTDPARTS_DEFAULT \
>> "autostart=no\0"\
>> "autoload=no\0"
>>
>> /*
>> * Ethernet Driver configuration
>> */
>> -#ifdef CONFIG_CMD_NET
>> #define CONFIG_MVGBE_PORTS {1, 0} /* enable port 0 only */
>> #define CONFIG_PHY_BASE_ADR 8
>> -#endif /* CONFIG_CMD_NET */
>> +#ifdef CONFIG_RESET_PHY_R
>> +#undef CONFIG_RESET_PHY_R /* remove legacy reset_phy() */
>> +#endif
>>
>> /*
>> - * EFI partition
>> + * SATA driver configuration
>> */
>> +#define CONFIG_LBA48
>> +#define CONFIG_SYS_64BIT_LBA
>>
>> #endif /* _CONFIG_NAS220_H */
>> --
>> 2.20.1
>>
More information about the U-Boot
mailing list