km_arm.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * (C) Copyright 2009
  4. * Marvell Semiconductor <www.marvell.com>
  5. * Prafulla Wadaskar <prafulla@marvell.com>
  6. *
  7. * (C) Copyright 2009
  8. * Stefan Roese, DENX Software Engineering, sr@denx.de.
  9. *
  10. * (C) Copyright 2010-2011
  11. * Heiko Schocher, DENX Software Engineering, hs@denx.de.
  12. */
  13. /*
  14. * for linking errors see
  15. * http://lists.denx.de/pipermail/u-boot/2009-July/057350.html
  16. */
  17. #ifndef _CONFIG_KM_ARM_H
  18. #define _CONFIG_KM_ARM_H
  19. /*
  20. * High Level Configuration Options (easy to change)
  21. */
  22. #define CONFIG_FEROCEON_88FR131 /* CPU Core subversion */
  23. #define CONFIG_KW88F6281 /* SOC Name */
  24. #define CONFIG_MACH_TYPE MACH_TYPE_KM_KIRKWOOD
  25. #define CONFIG_NAND_ECC_BCH
  26. /* include common defines/options for all Keymile boards */
  27. #include "keymile-common.h"
  28. /* Reserve 4 MB for malloc */
  29. #define CONFIG_SYS_MALLOC_LEN (4 * 1024 * 1024)
  30. #include "asm/arch/config.h"
  31. #define CONFIG_SYS_LOAD_ADDR 0x00800000 /* default load adr- 8M */
  32. /* architecture specific default bootargs */
  33. #define CONFIG_KM_DEF_BOOT_ARGS_CPU \
  34. "bootcountaddr=${bootcountaddr} ${mtdparts}" \
  35. " boardid=0x${IVM_BoardId} hwkey=0x${IVM_HWKey}"
  36. #define CONFIG_KM_DEF_ENV_CPU \
  37. "u-boot="CONFIG_HOSTNAME "/u-boot.kwb\0" \
  38. CONFIG_KM_UPDATE_UBOOT \
  39. "set_fdthigh=setenv fdt_high ${kernelmem}\0" \
  40. "checkfdt=" \
  41. "if cramfsls fdt_0x${IVM_BoardId}_0x${IVM_HWKey}.dtb; " \
  42. "then true; else setenv cramfsloadfdt true; " \
  43. "setenv boot bootm ${load_addr_r}; " \
  44. "echo No FDT found, booting with the kernel " \
  45. "appended one; fi\0" \
  46. ""
  47. #define CONFIG_SKIP_LOWLEVEL_INIT /* disable board lowlevel_init */
  48. /*
  49. * For booting Linux, the board info and command line data
  50. * have to be in the first 8 MB of memory, since this is
  51. * the maximum mapped by the Linux kernel during initialization.
  52. */
  53. #define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
  54. #define CONFIG_INITRD_TAG /* enable INITRD tag */
  55. #define CONFIG_SETUP_MEMORY_TAGS /* enable memory tag */
  56. /*
  57. * NAND Flash configuration
  58. */
  59. #define CONFIG_SYS_MAX_NAND_DEVICE 1
  60. /*
  61. * Other required minimal configurations
  62. */
  63. /*
  64. * Ethernet Driver configuration
  65. */
  66. #define PHY_ANEG_TIMEOUT 8000 /* PHY needs a longer autoneg timeout */
  67. #define CONFIG_MVGBE_PORTS {1, 0} /* enable port 0 only */
  68. #define CONFIG_PHY_BASE_ADR 0
  69. /*
  70. * I2C related stuff
  71. */
  72. #undef CONFIG_I2C_MVTWSI
  73. #define CONFIG_SYS_I2C
  74. #define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */
  75. #define CONFIG_SYS_I2C_INIT_BOARD
  76. #define CONFIG_KIRKWOOD_GPIO /* Enable GPIO Support */
  77. #define CONFIG_SYS_NUM_I2C_BUSES 6
  78. #define CONFIG_SYS_I2C_MAX_HOPS 1
  79. #define CONFIG_SYS_I2C_BUSES { {0, {I2C_NULL_HOP} }, \
  80. {0, {{I2C_MUX_PCA9547, 0x70, 1} } }, \
  81. {0, {{I2C_MUX_PCA9547, 0x70, 2} } }, \
  82. {0, {{I2C_MUX_PCA9547, 0x70, 3} } }, \
  83. {0, {{I2C_MUX_PCA9547, 0x70, 4} } }, \
  84. {0, {{I2C_MUX_PCA9547, 0x70, 5} } }, \
  85. }
  86. #ifndef __ASSEMBLY__
  87. #include <asm/arch/gpio.h>
  88. #include <linux/stringify.h>
  89. extern void __set_direction(unsigned pin, int high);
  90. void set_sda(int state);
  91. void set_scl(int state);
  92. int get_sda(void);
  93. int get_scl(void);
  94. #define KM_KIRKWOOD_SDA_PIN 8
  95. #define KM_KIRKWOOD_SCL_PIN 9
  96. #define KM_KIRKWOOD_SOFT_I2C_GPIOS 0x0300
  97. #define KM_KIRKWOOD_ENV_WP 38
  98. #define I2C_ACTIVE __set_direction(KM_KIRKWOOD_SDA_PIN, 0)
  99. #define I2C_TRISTATE __set_direction(KM_KIRKWOOD_SDA_PIN, 1)
  100. #define I2C_READ (kw_gpio_get_value(KM_KIRKWOOD_SDA_PIN) ? 1 : 0)
  101. #define I2C_SDA(bit) kw_gpio_set_value(KM_KIRKWOOD_SDA_PIN, bit)
  102. #define I2C_SCL(bit) kw_gpio_set_value(KM_KIRKWOOD_SCL_PIN, bit)
  103. #endif
  104. #define I2C_DELAY udelay(1)
  105. #define I2C_SOFT_DECLARATIONS
  106. #define CONFIG_SYS_I2C_SOFT_SLAVE 0x0
  107. #define CONFIG_SYS_I2C_SOFT_SPEED 100000
  108. /* EEprom support 24C128, 24C256 valid for environment eeprom */
  109. #define CONFIG_SYS_EEPROM_PAGE_WRITE_ENABLE
  110. #define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 6 /* 64 Byte write page */
  111. #define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10
  112. #define CONFIG_SYS_I2C_EEPROM_ADDR 0x50
  113. #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2
  114. /*
  115. * Environment variables configurations
  116. */
  117. #if defined CONFIG_KM_ENV_IS_IN_SPI_NOR
  118. #define CONFIG_ENV_TOTAL_SIZE 0x20000 /* no bracets! */
  119. #else
  120. #define CONFIG_SYS_DEF_EEPROM_ADDR 0x50
  121. #define CONFIG_ENV_EEPROM_IS_ON_I2C
  122. #define CONFIG_SYS_EEPROM_WREN
  123. #define CONFIG_I2C_ENV_EEPROM_BUS 5 /* I2C2 (Mux-Port 5) */
  124. #endif
  125. #define KM_FLASH_GPIO_PIN 16
  126. #define CONFIG_KM_UPDATE_UBOOT \
  127. "update=" \
  128. "sf probe 0;sf erase 0 +${filesize};" \
  129. "sf write ${load_addr_r} 0 ${filesize};\0"
  130. #if defined CONFIG_KM_ENV_IS_IN_SPI_NOR
  131. #define CONFIG_KM_NEW_ENV \
  132. "newenv=sf probe 0;" \
  133. "sf erase " __stringify(CONFIG_ENV_OFFSET) " " \
  134. __stringify(CONFIG_ENV_TOTAL_SIZE)"\0"
  135. #else
  136. #define CONFIG_KM_NEW_ENV \
  137. "newenv=setenv addr 0x100000 && " \
  138. "i2c dev " __stringify(CONFIG_I2C_ENV_EEPROM_BUS) "; " \
  139. "mw.b ${addr} 0 4 && " \
  140. "eeprom write " __stringify(CONFIG_SYS_DEF_EEPROM_ADDR) \
  141. " ${addr} " __stringify(CONFIG_ENV_OFFSET) " 4 && " \
  142. "eeprom write " __stringify(CONFIG_SYS_DEF_EEPROM_ADDR) \
  143. " ${addr} " __stringify(CONFIG_ENV_OFFSET_REDUND) " 4\0"
  144. #endif
  145. #ifndef CONFIG_KM_BOARD_EXTRA_ENV
  146. #define CONFIG_KM_BOARD_EXTRA_ENV ""
  147. #endif
  148. /*
  149. * Default environment variables
  150. */
  151. #define CONFIG_EXTRA_ENV_SETTINGS \
  152. CONFIG_KM_BOARD_EXTRA_ENV \
  153. CONFIG_KM_DEF_ENV \
  154. CONFIG_KM_NEW_ENV \
  155. "arch=arm\0" \
  156. ""
  157. /* additions for new relocation code, must be added to all boards */
  158. #define CONFIG_SYS_SDRAM_BASE 0x00000000
  159. /* address for the bootcount (taken from end of RAM) */
  160. #define BOOTCOUNT_ADDR (CONFIG_KM_RESERVED_PRAM)
  161. /* enable POST tests */
  162. #define CONFIG_POST (CONFIG_SYS_POST_MEM_REGIONS)
  163. #define CONFIG_POST_SKIP_ENV_FLAGS
  164. #define CONFIG_POST_EXTERNAL_WORD_FUNCS
  165. #endif /* _CONFIG_KM_ARM_H */