Home | History | Annotate | Download | only in mach-socfpga
      1 // SPDX-License-Identifier: GPL-2.0
      2 /*
      3  * Copyright (C) 2016-2018 Intel Corporation <www.intel.com>
      4  *
      5  */
      6 
      7 #include <common.h>
      8 #include <errno.h>
      9 #include <asm/io.h>
     10 #include <asm/arch/handoff_s10.h>
     11 
     12 static void sysmgr_pinmux_handoff_read(void *handoff_address,
     13 				       const u32 **table,
     14 				       unsigned int *table_len)
     15 {
     16 	unsigned int handoff_entry = (swab32(readl(handoff_address +
     17 					S10_HANDOFF_OFFSET_LENGTH)) -
     18 					S10_HANDOFF_OFFSET_DATA) /
     19 					sizeof(unsigned int);
     20 	unsigned int handoff_chunk[handoff_entry], temp, i;
     21 
     22 	if (swab32(readl(S10_HANDOFF_MUX)) == S10_HANDOFF_MAGIC_MUX) {
     23 		/* using handoff from Quartus tools if exists */
     24 		for (i = 0; i < handoff_entry; i++) {
     25 			temp = readl(handoff_address +
     26 				     S10_HANDOFF_OFFSET_DATA + (i * 4));
     27 			handoff_chunk[i] = swab32(temp);
     28 		}
     29 		*table = handoff_chunk;
     30 		*table_len = ARRAY_SIZE(handoff_chunk);
     31 	}
     32 }
     33 
     34 void sysmgr_pinmux_table_sel(const u32 **table, unsigned int *table_len)
     35 {
     36 	sysmgr_pinmux_handoff_read((void *)S10_HANDOFF_MUX, table,
     37 				   table_len);
     38 }
     39 
     40 void sysmgr_pinmux_table_ctrl(const u32 **table, unsigned int *table_len)
     41 {
     42 	sysmgr_pinmux_handoff_read((void *)S10_HANDOFF_IOCTL, table,
     43 				   table_len);
     44 }
     45 
     46 void sysmgr_pinmux_table_fpga(const u32 **table, unsigned int *table_len)
     47 {
     48 	sysmgr_pinmux_handoff_read((void *)S10_HANDOFF_FPGA, table,
     49 				   table_len);
     50 }
     51 
     52 void sysmgr_pinmux_table_delay(const u32 **table, unsigned int *table_len)
     53 {
     54 	sysmgr_pinmux_handoff_read((void *)S10_HANODFF_DELAY, table,
     55 				   table_len);
     56 }
     57