1 1.17 rin /* $NetBSD: ibm4xx_autoconf.c,v 1.17 2021/03/29 13:40:21 rin Exp $ */ 2 1.1 shige /* Original Tag: ibm4xxgpx_autoconf.c,v 1.2 2004/10/23 17:12:22 thorpej Exp $ */ 3 1.1 shige 4 1.1 shige /* 5 1.1 shige * Copyright (C) 1995, 1996 Wolfgang Solfrank. 6 1.1 shige * Copyright (C) 1995, 1996 TooLs GmbH. 7 1.1 shige * All rights reserved. 8 1.1 shige * 9 1.1 shige * Redistribution and use in source and binary forms, with or without 10 1.1 shige * modification, are permitted provided that the following conditions 11 1.1 shige * are met: 12 1.1 shige * 1. Redistributions of source code must retain the above copyright 13 1.1 shige * notice, this list of conditions and the following disclaimer. 14 1.1 shige * 2. Redistributions in binary form must reproduce the above copyright 15 1.1 shige * notice, this list of conditions and the following disclaimer in the 16 1.1 shige * documentation and/or other materials provided with the distribution. 17 1.1 shige * 3. All advertising materials mentioning features or use of this software 18 1.1 shige * must display the following acknowledgement: 19 1.1 shige * This product includes software developed by TooLs GmbH. 20 1.1 shige * 4. The name of TooLs GmbH may not be used to endorse or promote products 21 1.1 shige * derived from this software without specific prior written permission. 22 1.1 shige * 23 1.1 shige * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR 24 1.1 shige * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 25 1.1 shige * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26 1.1 shige * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 27 1.1 shige * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 28 1.1 shige * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 29 1.1 shige * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 30 1.1 shige * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 31 1.1 shige * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 32 1.1 shige * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 1.1 shige */ 34 1.1 shige 35 1.1 shige #include <sys/cdefs.h> 36 1.17 rin __KERNEL_RCSID(0, "$NetBSD: ibm4xx_autoconf.c,v 1.17 2021/03/29 13:40:21 rin Exp $"); 37 1.1 shige 38 1.1 shige #include <sys/param.h> 39 1.1 shige #include <sys/conf.h> 40 1.1 shige #include <sys/device.h> 41 1.1 shige #include <sys/systm.h> 42 1.15 matt #include <sys/cpu.h> 43 1.1 shige 44 1.2 shige #include <net/if.h> 45 1.2 shige #include <net/if_ether.h> 46 1.2 shige 47 1.15 matt #include <powerpc/ibm4xx/cpu.h> 48 1.17 rin #include <powerpc/ibm4xx/dev/comopbvar.h> 49 1.5 thorpej #include <powerpc/ibm4xx/dev/opbvar.h> 50 1.5 thorpej 51 1.1 shige void 52 1.16 rin cpu_rootconf(void) 53 1.16 rin { 54 1.16 rin 55 1.16 rin rootconf(); 56 1.16 rin } 57 1.16 rin 58 1.16 rin void 59 1.17 rin ibm4xx_device_register(device_t dev, void *aux, int com_freq) 60 1.1 shige { 61 1.14 matt device_t parent = device_parent(dev); 62 1.1 shige 63 1.17 rin if (device_is_a(dev, "com") && device_is_a(parent, "opb")) { 64 1.17 rin /* Set the frequency of the on-chip UART. */ 65 1.17 rin com_opb_device_register(dev, com_freq); 66 1.17 rin return; 67 1.17 rin } 68 1.17 rin 69 1.8 simonb if (device_is_a(dev, "emac") && device_is_a(parent, "opb")) { 70 1.13 kiyohara /* Set the mac-address of the on-chip Ethernet. */ 71 1.5 thorpej struct opb_attach_args *oaa = aux; 72 1.2 shige 73 1.9 thorpej if (oaa->opb_instance < 10) { 74 1.13 kiyohara prop_dictionary_t dict = device_properties(dev); 75 1.10 thorpej prop_data_t pd; 76 1.13 kiyohara prop_number_t pn; 77 1.2 shige unsigned char prop_name[15]; 78 1.2 shige 79 1.2 shige snprintf(prop_name, sizeof(prop_name), 80 1.13 kiyohara "emac%d-mac-addr", oaa->opb_instance); 81 1.10 thorpej pd = prop_dictionary_get(board_properties, prop_name); 82 1.10 thorpej if (pd == NULL) { 83 1.2 shige printf("WARNING: unable to get mac-addr " 84 1.2 shige "property from board properties\n"); 85 1.2 shige return; 86 1.2 shige } 87 1.13 kiyohara if (prop_dictionary_set(dict, "mac-address", pd) == 88 1.13 kiyohara false) 89 1.13 kiyohara printf("WARNING: unable to set mac-address " 90 1.14 matt "property for %s\n", device_xname(dev)); 91 1.13 kiyohara 92 1.13 kiyohara snprintf(prop_name, sizeof(prop_name), 93 1.13 kiyohara "emac%d-mii-phy", oaa->opb_instance); 94 1.13 kiyohara pn = prop_dictionary_get(board_properties, prop_name); 95 1.13 kiyohara if (pn != NULL) 96 1.13 kiyohara prop_dictionary_set_uint32(dict, "mii-phy", 97 1.13 kiyohara prop_number_integer_value(pn)); 98 1.2 shige } 99 1.1 shige return; 100 1.1 shige } 101 1.1 shige } 102