|
@@ -270,7 +270,7 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus,
|
|
struct of_bus *pbus, u32 *addr,
|
|
struct of_bus *pbus, u32 *addr,
|
|
int na, int ns, int pna)
|
|
int na, int ns, int pna)
|
|
{
|
|
{
|
|
- u32 *ranges;
|
|
|
|
|
|
+ const u32 *ranges;
|
|
unsigned int rlen;
|
|
unsigned int rlen;
|
|
int rone;
|
|
int rone;
|
|
u64 offset = OF_BAD_ADDR;
|
|
u64 offset = OF_BAD_ADDR;
|
|
@@ -287,7 +287,7 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus,
|
|
* to translate addresses that aren't supposed to be translated in
|
|
* to translate addresses that aren't supposed to be translated in
|
|
* the first place. --BenH.
|
|
* the first place. --BenH.
|
|
*/
|
|
*/
|
|
- ranges = (u32 *)get_property(parent, "ranges", &rlen);
|
|
|
|
|
|
+ ranges = get_property(parent, "ranges", &rlen);
|
|
if (ranges == NULL || rlen == 0) {
|
|
if (ranges == NULL || rlen == 0) {
|
|
offset = of_read_number(addr, na);
|
|
offset = of_read_number(addr, na);
|
|
memset(addr, 0, pna * 4);
|
|
memset(addr, 0, pna * 4);
|
|
@@ -330,7 +330,7 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus,
|
|
* that can be mapped to a cpu physical address). This is not really specified
|
|
* that can be mapped to a cpu physical address). This is not really specified
|
|
* that way, but this is traditionally the way IBM at least do things
|
|
* that way, but this is traditionally the way IBM at least do things
|
|
*/
|
|
*/
|
|
-u64 of_translate_address(struct device_node *dev, u32 *in_addr)
|
|
|
|
|
|
+u64 of_translate_address(struct device_node *dev, const u32 *in_addr)
|
|
{
|
|
{
|
|
struct device_node *parent = NULL;
|
|
struct device_node *parent = NULL;
|
|
struct of_bus *bus, *pbus;
|
|
struct of_bus *bus, *pbus;
|
|
@@ -407,10 +407,10 @@ u64 of_translate_address(struct device_node *dev, u32 *in_addr)
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(of_translate_address);
|
|
EXPORT_SYMBOL(of_translate_address);
|
|
|
|
|
|
-u32 *of_get_address(struct device_node *dev, int index, u64 *size,
|
|
|
|
|
|
+const u32 *of_get_address(struct device_node *dev, int index, u64 *size,
|
|
unsigned int *flags)
|
|
unsigned int *flags)
|
|
{
|
|
{
|
|
- u32 *prop;
|
|
|
|
|
|
+ const u32 *prop;
|
|
unsigned int psize;
|
|
unsigned int psize;
|
|
struct device_node *parent;
|
|
struct device_node *parent;
|
|
struct of_bus *bus;
|
|
struct of_bus *bus;
|
|
@@ -427,7 +427,7 @@ u32 *of_get_address(struct device_node *dev, int index, u64 *size,
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
/* Get "reg" or "assigned-addresses" property */
|
|
/* Get "reg" or "assigned-addresses" property */
|
|
- prop = (u32 *)get_property(dev, bus->addresses, &psize);
|
|
|
|
|
|
+ prop = get_property(dev, bus->addresses, &psize);
|
|
if (prop == NULL)
|
|
if (prop == NULL)
|
|
return NULL;
|
|
return NULL;
|
|
psize /= 4;
|
|
psize /= 4;
|
|
@@ -445,10 +445,10 @@ u32 *of_get_address(struct device_node *dev, int index, u64 *size,
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(of_get_address);
|
|
EXPORT_SYMBOL(of_get_address);
|
|
|
|
|
|
-u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size,
|
|
|
|
|
|
+const u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size,
|
|
unsigned int *flags)
|
|
unsigned int *flags)
|
|
{
|
|
{
|
|
- u32 *prop;
|
|
|
|
|
|
+ const u32 *prop;
|
|
unsigned int psize;
|
|
unsigned int psize;
|
|
struct device_node *parent;
|
|
struct device_node *parent;
|
|
struct of_bus *bus;
|
|
struct of_bus *bus;
|
|
@@ -469,7 +469,7 @@ u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size,
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
/* Get "reg" or "assigned-addresses" property */
|
|
/* Get "reg" or "assigned-addresses" property */
|
|
- prop = (u32 *)get_property(dev, bus->addresses, &psize);
|
|
|
|
|
|
+ prop = get_property(dev, bus->addresses, &psize);
|
|
if (prop == NULL)
|
|
if (prop == NULL)
|
|
return NULL;
|
|
return NULL;
|
|
psize /= 4;
|
|
psize /= 4;
|
|
@@ -487,7 +487,7 @@ u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size,
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(of_get_pci_address);
|
|
EXPORT_SYMBOL(of_get_pci_address);
|
|
|
|
|
|
-static int __of_address_to_resource(struct device_node *dev, u32 *addrp,
|
|
|
|
|
|
+static int __of_address_to_resource(struct device_node *dev, const u32 *addrp,
|
|
u64 size, unsigned int flags,
|
|
u64 size, unsigned int flags,
|
|
struct resource *r)
|
|
struct resource *r)
|
|
{
|
|
{
|
|
@@ -518,7 +518,7 @@ static int __of_address_to_resource(struct device_node *dev, u32 *addrp,
|
|
int of_address_to_resource(struct device_node *dev, int index,
|
|
int of_address_to_resource(struct device_node *dev, int index,
|
|
struct resource *r)
|
|
struct resource *r)
|
|
{
|
|
{
|
|
- u32 *addrp;
|
|
|
|
|
|
+ const u32 *addrp;
|
|
u64 size;
|
|
u64 size;
|
|
unsigned int flags;
|
|
unsigned int flags;
|
|
|
|
|
|
@@ -532,7 +532,7 @@ EXPORT_SYMBOL_GPL(of_address_to_resource);
|
|
int of_pci_address_to_resource(struct device_node *dev, int bar,
|
|
int of_pci_address_to_resource(struct device_node *dev, int bar,
|
|
struct resource *r)
|
|
struct resource *r)
|
|
{
|
|
{
|
|
- u32 *addrp;
|
|
|
|
|
|
+ const u32 *addrp;
|
|
u64 size;
|
|
u64 size;
|
|
unsigned int flags;
|
|
unsigned int flags;
|
|
|
|
|
|
@@ -543,13 +543,14 @@ int of_pci_address_to_resource(struct device_node *dev, int bar,
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
|
|
EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
|
|
|
|
|
|
-void of_parse_dma_window(struct device_node *dn, unsigned char *dma_window_prop,
|
|
|
|
|
|
+void of_parse_dma_window(struct device_node *dn, const void *dma_window_prop,
|
|
unsigned long *busno, unsigned long *phys, unsigned long *size)
|
|
unsigned long *busno, unsigned long *phys, unsigned long *size)
|
|
{
|
|
{
|
|
- u32 *dma_window, cells;
|
|
|
|
- unsigned char *prop;
|
|
|
|
|
|
+ const u32 *dma_window;
|
|
|
|
+ u32 cells;
|
|
|
|
+ const unsigned char *prop;
|
|
|
|
|
|
- dma_window = (u32 *)dma_window_prop;
|
|
|
|
|
|
+ dma_window = dma_window_prop;
|
|
|
|
|
|
/* busno is always one cell */
|
|
/* busno is always one cell */
|
|
*busno = *(dma_window++);
|
|
*busno = *(dma_window++);
|
|
@@ -578,13 +579,13 @@ static struct device_node *of_irq_dflt_pic;
|
|
static struct device_node *of_irq_find_parent(struct device_node *child)
|
|
static struct device_node *of_irq_find_parent(struct device_node *child)
|
|
{
|
|
{
|
|
struct device_node *p;
|
|
struct device_node *p;
|
|
- phandle *parp;
|
|
|
|
|
|
+ const phandle *parp;
|
|
|
|
|
|
if (!of_node_get(child))
|
|
if (!of_node_get(child))
|
|
return NULL;
|
|
return NULL;
|
|
|
|
|
|
do {
|
|
do {
|
|
- parp = (phandle *)get_property(child, "interrupt-parent", NULL);
|
|
|
|
|
|
+ parp = get_property(child, "interrupt-parent", NULL);
|
|
if (parp == NULL)
|
|
if (parp == NULL)
|
|
p = of_get_parent(child);
|
|
p = of_get_parent(child);
|
|
else {
|
|
else {
|
|
@@ -646,11 +647,11 @@ void of_irq_map_init(unsigned int flags)
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-int of_irq_map_raw(struct device_node *parent, u32 *intspec, u32 *addr,
|
|
|
|
- struct of_irq *out_irq)
|
|
|
|
|
|
+int of_irq_map_raw(struct device_node *parent, const u32 *intspec,
|
|
|
|
+ const u32 *addr, struct of_irq *out_irq)
|
|
{
|
|
{
|
|
struct device_node *ipar, *tnode, *old = NULL, *newpar = NULL;
|
|
struct device_node *ipar, *tnode, *old = NULL, *newpar = NULL;
|
|
- u32 *tmp, *imap, *imask;
|
|
|
|
|
|
+ const u32 *tmp, *imap, *imask;
|
|
u32 intsize = 1, addrsize, newintsize = 0, newaddrsize = 0;
|
|
u32 intsize = 1, addrsize, newintsize = 0, newaddrsize = 0;
|
|
int imaplen, match, i;
|
|
int imaplen, match, i;
|
|
|
|
|
|
@@ -661,7 +662,7 @@ int of_irq_map_raw(struct device_node *parent, u32 *intspec, u32 *addr,
|
|
* is none, we are nice and just walk up the tree
|
|
* is none, we are nice and just walk up the tree
|
|
*/
|
|
*/
|
|
do {
|
|
do {
|
|
- tmp = (u32 *)get_property(ipar, "#interrupt-cells", NULL);
|
|
|
|
|
|
+ tmp = get_property(ipar, "#interrupt-cells", NULL);
|
|
if (tmp != NULL) {
|
|
if (tmp != NULL) {
|
|
intsize = *tmp;
|
|
intsize = *tmp;
|
|
break;
|
|
break;
|
|
@@ -682,7 +683,7 @@ int of_irq_map_raw(struct device_node *parent, u32 *intspec, u32 *addr,
|
|
*/
|
|
*/
|
|
old = of_node_get(ipar);
|
|
old = of_node_get(ipar);
|
|
do {
|
|
do {
|
|
- tmp = (u32 *)get_property(old, "#address-cells", NULL);
|
|
|
|
|
|
+ tmp = get_property(old, "#address-cells", NULL);
|
|
tnode = of_get_parent(old);
|
|
tnode = of_get_parent(old);
|
|
of_node_put(old);
|
|
of_node_put(old);
|
|
old = tnode;
|
|
old = tnode;
|
|
@@ -709,7 +710,7 @@ int of_irq_map_raw(struct device_node *parent, u32 *intspec, u32 *addr,
|
|
}
|
|
}
|
|
|
|
|
|
/* Now look for an interrupt-map */
|
|
/* Now look for an interrupt-map */
|
|
- imap = (u32 *)get_property(ipar, "interrupt-map", &imaplen);
|
|
|
|
|
|
+ imap = get_property(ipar, "interrupt-map", &imaplen);
|
|
/* No interrupt map, check for an interrupt parent */
|
|
/* No interrupt map, check for an interrupt parent */
|
|
if (imap == NULL) {
|
|
if (imap == NULL) {
|
|
DBG(" -> no map, getting parent\n");
|
|
DBG(" -> no map, getting parent\n");
|
|
@@ -719,7 +720,7 @@ int of_irq_map_raw(struct device_node *parent, u32 *intspec, u32 *addr,
|
|
imaplen /= sizeof(u32);
|
|
imaplen /= sizeof(u32);
|
|
|
|
|
|
/* Look for a mask */
|
|
/* Look for a mask */
|
|
- imask = (u32 *)get_property(ipar, "interrupt-map-mask", NULL);
|
|
|
|
|
|
+ imask = get_property(ipar, "interrupt-map-mask", NULL);
|
|
|
|
|
|
/* If we were passed no "reg" property and we attempt to parse
|
|
/* If we were passed no "reg" property and we attempt to parse
|
|
* an interrupt-map, then #address-cells must be 0.
|
|
* an interrupt-map, then #address-cells must be 0.
|
|
@@ -766,14 +767,14 @@ int of_irq_map_raw(struct device_node *parent, u32 *intspec, u32 *addr,
|
|
/* Get #interrupt-cells and #address-cells of new
|
|
/* Get #interrupt-cells and #address-cells of new
|
|
* parent
|
|
* parent
|
|
*/
|
|
*/
|
|
- tmp = (u32 *)get_property(newpar, "#interrupt-cells",
|
|
|
|
|
|
+ tmp = get_property(newpar, "#interrupt-cells",
|
|
NULL);
|
|
NULL);
|
|
if (tmp == NULL) {
|
|
if (tmp == NULL) {
|
|
DBG(" -> parent lacks #interrupt-cells !\n");
|
|
DBG(" -> parent lacks #interrupt-cells !\n");
|
|
goto fail;
|
|
goto fail;
|
|
}
|
|
}
|
|
newintsize = *tmp;
|
|
newintsize = *tmp;
|
|
- tmp = (u32 *)get_property(newpar, "#address-cells",
|
|
|
|
|
|
+ tmp = get_property(newpar, "#address-cells",
|
|
NULL);
|
|
NULL);
|
|
newaddrsize = (tmp == NULL) ? 0 : *tmp;
|
|
newaddrsize = (tmp == NULL) ? 0 : *tmp;
|
|
|
|
|
|
@@ -819,14 +820,14 @@ EXPORT_SYMBOL_GPL(of_irq_map_raw);
|
|
static int of_irq_map_oldworld(struct device_node *device, int index,
|
|
static int of_irq_map_oldworld(struct device_node *device, int index,
|
|
struct of_irq *out_irq)
|
|
struct of_irq *out_irq)
|
|
{
|
|
{
|
|
- u32 *ints;
|
|
|
|
|
|
+ const u32 *ints;
|
|
int intlen;
|
|
int intlen;
|
|
|
|
|
|
/*
|
|
/*
|
|
* Old machines just have a list of interrupt numbers
|
|
* Old machines just have a list of interrupt numbers
|
|
* and no interrupt-controller nodes.
|
|
* and no interrupt-controller nodes.
|
|
*/
|
|
*/
|
|
- ints = (u32 *) get_property(device, "AAPL,interrupts", &intlen);
|
|
|
|
|
|
+ ints = get_property(device, "AAPL,interrupts", &intlen);
|
|
if (ints == NULL)
|
|
if (ints == NULL)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
intlen /= sizeof(u32);
|
|
intlen /= sizeof(u32);
|
|
@@ -851,7 +852,8 @@ static int of_irq_map_oldworld(struct device_node *device, int index,
|
|
int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq)
|
|
int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq)
|
|
{
|
|
{
|
|
struct device_node *p;
|
|
struct device_node *p;
|
|
- u32 *intspec, *tmp, intsize, intlen, *addr;
|
|
|
|
|
|
+ const u32 *intspec, *tmp, *addr;
|
|
|
|
+ u32 intsize, intlen;
|
|
int res;
|
|
int res;
|
|
|
|
|
|
DBG("of_irq_map_one: dev=%s, index=%d\n", device->full_name, index);
|
|
DBG("of_irq_map_one: dev=%s, index=%d\n", device->full_name, index);
|
|
@@ -861,13 +863,13 @@ int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq
|
|
return of_irq_map_oldworld(device, index, out_irq);
|
|
return of_irq_map_oldworld(device, index, out_irq);
|
|
|
|
|
|
/* Get the interrupts property */
|
|
/* Get the interrupts property */
|
|
- intspec = (u32 *)get_property(device, "interrupts", &intlen);
|
|
|
|
|
|
+ intspec = get_property(device, "interrupts", &intlen);
|
|
if (intspec == NULL)
|
|
if (intspec == NULL)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
intlen /= sizeof(u32);
|
|
intlen /= sizeof(u32);
|
|
|
|
|
|
/* Get the reg property (if any) */
|
|
/* Get the reg property (if any) */
|
|
- addr = (u32 *)get_property(device, "reg", NULL);
|
|
|
|
|
|
+ addr = get_property(device, "reg", NULL);
|
|
|
|
|
|
/* Look for the interrupt parent. */
|
|
/* Look for the interrupt parent. */
|
|
p = of_irq_find_parent(device);
|
|
p = of_irq_find_parent(device);
|
|
@@ -875,7 +877,7 @@ int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
/* Get size of interrupt specifier */
|
|
/* Get size of interrupt specifier */
|
|
- tmp = (u32 *)get_property(p, "#interrupt-cells", NULL);
|
|
|
|
|
|
+ tmp = get_property(p, "#interrupt-cells", NULL);
|
|
if (tmp == NULL) {
|
|
if (tmp == NULL) {
|
|
of_node_put(p);
|
|
of_node_put(p);
|
|
return -EINVAL;
|
|
return -EINVAL;
|