Merge git://www.denx.de/git/u-boot-marvell
[oweals/u-boot.git] / arch / arm / mach-mvebu / serdes / a38x / ctrl_pex.c
index 5f223f9b5601e67df144882558320025923fcc5a..9e5b647e2555437f0f9dd059d8114063e173fadb 100644 (file)
 #include "ctrl_pex.h"
 #include "sys_env_lib.h"
 
-int hws_pex_config(struct serdes_map *serdes_map)
+__weak void board_pex_config(void)
+{
+       /* nothing in this weak default implementation */
+}
+
+int hws_pex_config(const struct serdes_map *serdes_map, u8 count)
 {
        u32 pex_idx, tmp, next_busno, first_busno, temp_pex_reg,
            temp_reg, addr, dev_id, ctrl_mode;
        enum serdes_type serdes_type;
-       u32 idx, max_lane_num;
+       u32 idx;
 
        DEBUG_INIT_FULL_S("\n### hws_pex_config ###\n");
 
-       max_lane_num = hws_serdes_get_max_lane();
-       for (idx = 0; idx < max_lane_num; idx++) {
+       for (idx = 0; idx < count; idx++) {
                serdes_type = serdes_map[idx].serdes_type;
                /* configuration for PEX only */
                if ((serdes_type != PEX0) && (serdes_type != PEX1) &&
@@ -47,7 +51,7 @@ int hws_pex_config(struct serdes_map *serdes_map)
        tmp = reg_read(SOC_CTRL_REG);
        tmp &= ~0x03;
 
-       for (idx = 0; idx < max_lane_num; idx++) {
+       for (idx = 0; idx < count; idx++) {
                serdes_type = serdes_map[idx].serdes_type;
                if ((serdes_type != PEX0) &&
                    ((serdes_map[idx].serdes_mode == PEX_ROOT_COMPLEX_X4) ||
@@ -78,10 +82,13 @@ int hws_pex_config(struct serdes_map *serdes_map)
 
        /* Support gen1/gen2 */
        DEBUG_INIT_FULL_S("Support gen1/gen2\n");
+
+       board_pex_config();
+
        next_busno = 0;
        mdelay(150);
 
-       for (idx = 0; idx < max_lane_num; idx++) {
+       for (idx = 0; idx < count; idx++) {
                serdes_type = serdes_map[idx].serdes_type;
                DEBUG_INIT_FULL_S(" serdes_type=0x");
                DEBUG_INIT_FULL_D(serdes_type, 8);
@@ -185,13 +192,13 @@ int hws_pex_config(struct serdes_map *serdes_map)
                DEBUG_INIT_S("PCIe, Idx ");
                DEBUG_INIT_D(pex_idx, 1);
                DEBUG_INIT_S
-                       (": Link upgraded to Gen2 based on client cpabilities\n");
+                       (": Link upgraded to Gen2 based on client capabilities\n");
        }
 
        /* Update pex DEVICE ID */
        ctrl_mode = sys_env_model_get();
 
-       for (idx = 0; idx < max_lane_num; idx++) {
+       for (idx = 0; idx < count; idx++) {
                serdes_type = serdes_map[idx].serdes_type;
                /* configuration for PEX only */
                if ((serdes_type != PEX0) && (serdes_type != PEX1) &&