blob: 532dca9b2c5c9e38b710c1bb444198c7997d2169 [file] [log] [blame]
Googler15b35d92022-10-03 17:48:21 +08001/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
2/*
3 * arch/arm/cpu/armv8/axg/sdio.c
4 *
5 * Copyright (C) 2020 Amlogic, Inc. All rights reserved.
6 *
7 */
8
9#include <config.h>
10#include <asm/arch/io.h>
11#include <asm/arch/cpu_sdio.h>
12#include <asm/arch/secure_apb.h>
13#include <common.h>
14
15void cpu_sd_emmc_pwr_prepare(unsigned port)
16{
17// switch(port)
18// {
19// case SDIO_PORT_A:
20// clrbits_le32(P_PREG_PAD_GPIO4_EN_N,0x30f);
21// clrbits_le32(P_PREG_PAD_GPIO4_O ,0x30f);
22// clrbits_le32(P_PERIPHS_PIN_MUX_8,0x3f);
23// break;
24// case SDIO_PORT_B:
25// clrbits_le32(P_PREG_PAD_GPIO5_EN_N,0x3f<<23);
26// clrbits_le32(P_PREG_PAD_GPIO5_O ,0x3f<<23);
27// clrbits_le32(P_PERIPHS_PIN_MUX_2,0x3f<<10);
28// break;
29// case SDIO_PORT_C:
30// //clrbits_le32(P_PREG_PAD_GPIO3_EN_N,0xc0f);
31// //clrbits_le32(P_PREG_PAD_GPIO3_O ,0xc0f);
32// //clrbits_le32(P_PERIPHS_PIN_MUX_6,(0x3f<<24));break;
33// break;
34// }
35
36 /**
37 do nothing here
38 */
39}
40unsigned sd_debug_board_1bit_flag = 0;
41int cpu_sd_emmc_init(unsigned port)
42{
43
44 //printf("inand sdio port:%d\n",port);
45 switch (port)
46 {
47 case SDIO_PORT_B:
48 if (sd_debug_board_1bit_flag == 1)
49 clrsetbits_le32(P_PERIPHS_PIN_MUX_4, 0xEE000E, 0x110001);
50 else
51 clrsetbits_le32(P_PERIPHS_PIN_MUX_4, 0xEEEEEE, 0x111111);
52 break;
53 case SDIO_PORT_C:
54 writel(0x7fff, P_PAD_PULL_UP_EN_REG4);
55 writel(0x5fff, P_PAD_PULL_UP_REG4);
56 clrsetbits_le32(P_PERIPHS_PIN_MUX_0, 0xEEEEEEEE, 0x11111111);
57 clrsetbits_le32(P_PERIPHS_PIN_MUX_1, 0xEFFEFE, 0x100101);
58
59 /* hardware reset with pull boot9 */
60 clrbits_le32(PREG_PAD_GPIO4_EN_N, 1<<9);
61 clrbits_le32(PREG_PAD_GPIO4_O, 1<<9);
62 udelay(10);
63 setbits_le32(PREG_PAD_GPIO4_O, 1<<9);
64
65 break;
66 case SDIO_PORT_A:
67 //printf("no port A on axg!\n");
68 default:
69 return -1;
70 }
71 return 0;
72}
73
74__weak void sd_emmc_para_config(struct sd_emmc_global_regs *reg,
75 unsigned int clock, unsigned int port)
76{
77 unsigned int clk = reg->gclock;
78
79 clk &= ~(3 << Cfg_co_phase);
80 clk |= (3 << Cfg_co_phase);
81 reg->gclock = clk;
82 return;
83}