162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 2010 John Crispin <john@phrozen.org> 562306a36Sopenharmony_ci * Copyright (C) 2013-2015 Lantiq Beteiligungs-GmbH & Co.KG 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/export.h> 962306a36Sopenharmony_ci#include <linux/clk.h> 1062306a36Sopenharmony_ci#include <asm/bootinfo.h> 1162306a36Sopenharmony_ci#include <asm/time.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <lantiq_soc.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#include "../prom.h" 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define SOC_DANUBE "Danube" 1862306a36Sopenharmony_ci#define SOC_TWINPASS "Twinpass" 1962306a36Sopenharmony_ci#define SOC_AMAZON_SE "Amazon_SE" 2062306a36Sopenharmony_ci#define SOC_AR9 "AR9" 2162306a36Sopenharmony_ci#define SOC_GR9 "GRX200" 2262306a36Sopenharmony_ci#define SOC_VR9 "xRX200" 2362306a36Sopenharmony_ci#define SOC_VRX220 "xRX220" 2462306a36Sopenharmony_ci#define SOC_AR10 "xRX300" 2562306a36Sopenharmony_ci#define SOC_GRX390 "xRX330" 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci#define COMP_DANUBE "lantiq,danube" 2862306a36Sopenharmony_ci#define COMP_TWINPASS "lantiq,twinpass" 2962306a36Sopenharmony_ci#define COMP_AMAZON_SE "lantiq,ase" 3062306a36Sopenharmony_ci#define COMP_AR9 "lantiq,ar9" 3162306a36Sopenharmony_ci#define COMP_GR9 "lantiq,gr9" 3262306a36Sopenharmony_ci#define COMP_VR9 "lantiq,vr9" 3362306a36Sopenharmony_ci#define COMP_AR10 "lantiq,ar10" 3462306a36Sopenharmony_ci#define COMP_GRX390 "lantiq,grx390" 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#define PART_SHIFT 12 3762306a36Sopenharmony_ci#define PART_MASK 0x0FFFFFFF 3862306a36Sopenharmony_ci#define REV_SHIFT 28 3962306a36Sopenharmony_ci#define REV_MASK 0xF0000000 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_civoid __init ltq_soc_detect(struct ltq_soc_info *i) 4262306a36Sopenharmony_ci{ 4362306a36Sopenharmony_ci i->partnum = (ltq_r32(LTQ_MPS_CHIPID) & PART_MASK) >> PART_SHIFT; 4462306a36Sopenharmony_ci i->rev = (ltq_r32(LTQ_MPS_CHIPID) & REV_MASK) >> REV_SHIFT; 4562306a36Sopenharmony_ci sprintf(i->rev_type, "1.%d", i->rev); 4662306a36Sopenharmony_ci switch (i->partnum) { 4762306a36Sopenharmony_ci case SOC_ID_DANUBE1: 4862306a36Sopenharmony_ci case SOC_ID_DANUBE2: 4962306a36Sopenharmony_ci i->name = SOC_DANUBE; 5062306a36Sopenharmony_ci i->type = SOC_TYPE_DANUBE; 5162306a36Sopenharmony_ci i->compatible = COMP_DANUBE; 5262306a36Sopenharmony_ci break; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci case SOC_ID_TWINPASS: 5562306a36Sopenharmony_ci i->name = SOC_TWINPASS; 5662306a36Sopenharmony_ci i->type = SOC_TYPE_DANUBE; 5762306a36Sopenharmony_ci i->compatible = COMP_TWINPASS; 5862306a36Sopenharmony_ci break; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci case SOC_ID_ARX188: 6162306a36Sopenharmony_ci case SOC_ID_ARX168_1: 6262306a36Sopenharmony_ci case SOC_ID_ARX168_2: 6362306a36Sopenharmony_ci case SOC_ID_ARX182: 6462306a36Sopenharmony_ci i->name = SOC_AR9; 6562306a36Sopenharmony_ci i->type = SOC_TYPE_AR9; 6662306a36Sopenharmony_ci i->compatible = COMP_AR9; 6762306a36Sopenharmony_ci break; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci case SOC_ID_GRX188: 7062306a36Sopenharmony_ci case SOC_ID_GRX168: 7162306a36Sopenharmony_ci i->name = SOC_GR9; 7262306a36Sopenharmony_ci i->type = SOC_TYPE_AR9; 7362306a36Sopenharmony_ci i->compatible = COMP_GR9; 7462306a36Sopenharmony_ci break; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci case SOC_ID_AMAZON_SE_1: 7762306a36Sopenharmony_ci case SOC_ID_AMAZON_SE_2: 7862306a36Sopenharmony_ci#ifdef CONFIG_PCI 7962306a36Sopenharmony_ci panic("ase is only supported for non pci kernels"); 8062306a36Sopenharmony_ci#endif 8162306a36Sopenharmony_ci i->name = SOC_AMAZON_SE; 8262306a36Sopenharmony_ci i->type = SOC_TYPE_AMAZON_SE; 8362306a36Sopenharmony_ci i->compatible = COMP_AMAZON_SE; 8462306a36Sopenharmony_ci break; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci case SOC_ID_VRX282: 8762306a36Sopenharmony_ci case SOC_ID_VRX268: 8862306a36Sopenharmony_ci case SOC_ID_VRX288: 8962306a36Sopenharmony_ci i->name = SOC_VR9; 9062306a36Sopenharmony_ci i->type = SOC_TYPE_VR9; 9162306a36Sopenharmony_ci i->compatible = COMP_VR9; 9262306a36Sopenharmony_ci break; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci case SOC_ID_GRX268: 9562306a36Sopenharmony_ci case SOC_ID_GRX288: 9662306a36Sopenharmony_ci i->name = SOC_GR9; 9762306a36Sopenharmony_ci i->type = SOC_TYPE_VR9; 9862306a36Sopenharmony_ci i->compatible = COMP_GR9; 9962306a36Sopenharmony_ci break; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci case SOC_ID_VRX268_2: 10262306a36Sopenharmony_ci case SOC_ID_VRX288_2: 10362306a36Sopenharmony_ci i->name = SOC_VR9; 10462306a36Sopenharmony_ci i->type = SOC_TYPE_VR9_2; 10562306a36Sopenharmony_ci i->compatible = COMP_VR9; 10662306a36Sopenharmony_ci break; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci case SOC_ID_VRX220: 10962306a36Sopenharmony_ci i->name = SOC_VRX220; 11062306a36Sopenharmony_ci i->type = SOC_TYPE_VRX220; 11162306a36Sopenharmony_ci i->compatible = COMP_VR9; 11262306a36Sopenharmony_ci break; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci case SOC_ID_GRX282_2: 11562306a36Sopenharmony_ci case SOC_ID_GRX288_2: 11662306a36Sopenharmony_ci i->name = SOC_GR9; 11762306a36Sopenharmony_ci i->type = SOC_TYPE_VR9_2; 11862306a36Sopenharmony_ci i->compatible = COMP_GR9; 11962306a36Sopenharmony_ci break; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci case SOC_ID_ARX362: 12262306a36Sopenharmony_ci case SOC_ID_ARX368: 12362306a36Sopenharmony_ci case SOC_ID_ARX382: 12462306a36Sopenharmony_ci case SOC_ID_ARX388: 12562306a36Sopenharmony_ci case SOC_ID_URX388: 12662306a36Sopenharmony_ci i->name = SOC_AR10; 12762306a36Sopenharmony_ci i->type = SOC_TYPE_AR10; 12862306a36Sopenharmony_ci i->compatible = COMP_AR10; 12962306a36Sopenharmony_ci break; 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci case SOC_ID_GRX383: 13262306a36Sopenharmony_ci case SOC_ID_GRX369: 13362306a36Sopenharmony_ci case SOC_ID_GRX387: 13462306a36Sopenharmony_ci case SOC_ID_GRX389: 13562306a36Sopenharmony_ci i->name = SOC_GRX390; 13662306a36Sopenharmony_ci i->type = SOC_TYPE_GRX390; 13762306a36Sopenharmony_ci i->compatible = COMP_GRX390; 13862306a36Sopenharmony_ci break; 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci default: 14162306a36Sopenharmony_ci unreachable(); 14262306a36Sopenharmony_ci break; 14362306a36Sopenharmony_ci } 14462306a36Sopenharmony_ci} 145